From 016abc150409777d402ea45a774bc1c9ac3053d0 Mon Sep 17 00:00:00 2001 From: Frederike Duembgen Date: Sun, 1 Jun 2025 21:48:11 +0200 Subject: [PATCH 01/12] Create new RO lifter structure --- popcor/base_lifters/__init__.py | 3 +- .../{poly_lifters.py => poly_lifter.py} | 0 .../range_only_lifter.py} | 312 ++++++------------ popcor/examples/__init__.py | 6 +- popcor/examples/ro_nsq_lifter.py | 249 ++++++++++++++ popcor/examples/ro_sq_lifter.py | 260 +++++++++++++++ popcor/solvers/common.py | 4 +- popcor/utils/test_tools.py | 8 +- tests/test_autotemplate.py | 4 +- 9 files changed, 625 insertions(+), 221 deletions(-) rename popcor/base_lifters/{poly_lifters.py => poly_lifter.py} (100%) rename popcor/{examples/range_only_lifters.py => base_lifters/range_only_lifter.py} (60%) create mode 100644 popcor/examples/ro_nsq_lifter.py create mode 100644 popcor/examples/ro_sq_lifter.py diff --git a/popcor/base_lifters/__init__.py b/popcor/base_lifters/__init__.py index 2facb8c..20351d1 100644 --- a/popcor/base_lifters/__init__.py +++ b/popcor/base_lifters/__init__.py @@ -1,4 +1,5 @@ -from .poly_lifters import PolyLifter +from .poly_lifter import PolyLifter +from .range_only_lifter import RangeOnlyLifter from .robust_pose_lifter import RobustPoseLifter from .state_lifter import StateLifter from .stereo_lifter import StereoLifter diff --git a/popcor/base_lifters/poly_lifters.py b/popcor/base_lifters/poly_lifter.py similarity index 100% rename from popcor/base_lifters/poly_lifters.py rename to popcor/base_lifters/poly_lifter.py diff --git a/popcor/examples/range_only_lifters.py b/popcor/base_lifters/range_only_lifter.py similarity index 60% rename from popcor/examples/range_only_lifters.py rename to popcor/base_lifters/range_only_lifter.py index b9ba4bd..503355d 100644 --- a/popcor/examples/range_only_lifters.py +++ b/popcor/base_lifters/range_only_lifter.py @@ -1,13 +1,11 @@ -import matplotlib.pylab as plt +from abc import abstractmethod + +import autograd.numpy as anp import numpy as np import scipy.sparse as sp -from poly_matrix.least_squares_problem import LeastSquaresProblem from scipy.optimize import minimize from popcor.base_lifters import StateLifter -from popcor.utils.common import diag_indices, upper_triangular - -plt.ion() NOISE = 1e-2 # std deviation of distance noise @@ -23,54 +21,8 @@ } -class RangeOnlyLocLifter(StateLifter): - """Range-only localization in 2D or 3D. - - We minimize the cost function - - .. math:: f(\\theta) = \\sum_{n=0}^{N-1} \\sum_{k=0}^{K-1} w_{nk} (d_{nk}^2 - ||p_n - a_k||^2)^2 - - where - - - :math:`w_{nk}` is the weight for the nth point and kth landmark (currently assumed binary to mark missing edges). - - :math:`\\theta` is the flattened vector of positions :math:`p_n`. - - :math:`d_{nk}` is the distance measurement from point n to landmark k. - - :math:`a_k` is the kth landmark. - - Note that in the current implementation, there is no regularization term so the problem could be split into individual points. - - We experiment with two different substitutions to turn the cost function into aquadratic form: - - - level "no" uses substitution :math:`z_i=||p_i||^2=x_i^2 + y_i^2` (or equivalent 3D version). - - level "quad" uses substitution :math:`y_i=[x_i^2, x_iy_i, y_i^2]` (or equivalent 3D version). - - This example is treated in more details in `this paper `_. - """ - - TIGHTNESS = "rank" - LEVELS = ["no", "quad"] - LEVEL_NAMES = { - "no": "$z_n$", - "quad": "$\\boldsymbol{y}_n$", - } - - def get_vec_around_gt(self, delta: float = 0): - """Sample around ground truth. - :param delta: sample from gt + std(delta) (set to 0 to start from gt.) - """ - assert self.landmarks is not None, "landmarks must be set before sampling" - - if delta == 0: - return self.theta - else: - bbox_max = np.max(self.landmarks, axis=0) * 2 - bbox_min = np.min(self.landmarks, axis=0) * 2 - pos = ( - np.random.rand(self.n_positions, self.d) - * (bbox_max - bbox_min)[None, :] - + bbox_min[None, :] - ) - return pos.flatten() +class RangeOnlyLifter(StateLifter): + """Range-only localization base class, in 2D or 3D.""" def __init__( self, @@ -120,11 +72,27 @@ def VARIABLE_LIST(self): [self.HOM, "x_0", "x_1", "z_0", "z_1"], ] + @abstractmethod def get_all_variables(self): - vars = [self.HOM] - vars += [f"x_{i}" for i in range(self.n_positions)] - vars += [f"z_{i}" for i in range(self.n_positions)] - return [vars] + pass + + def get_vec_around_gt(self, delta: float = 0): + """Sample around ground truth. + :param delta: sample from gt + std(delta) (set to 0 to start from gt.) + """ + assert self.landmarks is not None, "landmarks must be set before sampling" + + if delta == 0: + return self.theta + else: + bbox_max = np.max(self.landmarks, axis=0) * 2 + bbox_min = np.min(self.landmarks, axis=0) * 2 + pos = ( + np.random.rand(self.n_positions, self.d) + * (bbox_max - bbox_min)[None, :] + + bbox_min[None, :] + ) + return pos.flatten() def sample_parameters(self, theta=None): landmarks = np.random.rand(self.n_landmarks, self.d) @@ -138,72 +106,6 @@ def overwrite_theta(self, theta): def sample_theta(self): return np.random.rand(self.n_positions, self.d).flatten() - def get_A_known(self, var_dict=None, output_poly=False, add_redundant=False): - from poly_matrix.poly_matrix import PolyMatrix - - if var_dict is None: - var_dict = self.var_dict - positions = self.get_variable_indices(var_dict) - - A_list = [] - for n in positions: - if self.level == "no": - A = PolyMatrix(symmetric=True) - A[f"x_{n}", f"x_{n}"] = np.eye(self.d) - A[self.HOM, f"z_{n}"] = -0.5 - if output_poly: - A_list.append(A) - else: - A_list.append(A.get_matrix(self.var_dict)) - - elif self.level == "quad": - count = 0 - for i in range(self.d): - for j in range(i, self.d): - A = PolyMatrix(symmetric=True) - mat_x = np.zeros((self.d, self.d)) - mat_z = np.zeros((1, self.size_z)) - if i == j: - mat_x[i, i] = 1.0 - else: - mat_x[i, j] = 0.5 - mat_x[j, i] = 0.5 - mat_z[0, count] = -0.5 - A[f"x_{n}", f"x_{n}"] = mat_x - A[self.HOM, f"z_{n}"] = mat_z - count += 1 - if output_poly: - A_list.append(A) - else: - A_list.append(A.get_matrix(self.var_dict)) - return A_list - - def get_x(self, theta=None, parameters=None, var_subset=None): - if var_subset is None: - var_subset = self.var_dict - if theta is None: - theta = self.theta - if parameters is None: - parameters = self.parameters - - positions = theta.reshape(self.n_positions, -1) - - x_data = [] - for key in var_subset: - if key == self.HOM: - x_data.append(1.0) - elif "x" in key: - n = int(key.split("_")[-1]) - x_data += list(positions[n]) - elif "z" in key: - n = int(key.split("_")[-1]) - if self.level == "no": - x_data.append(np.linalg.norm(positions[n]) ** 2) - elif self.level == "quad": - x_data += list(upper_triangular(positions[n])) - assert len(x_data) == self.get_dim_x(var_subset) - return np.array(x_data) - def get_J_lifting(self, t): pos = t.reshape((-1, self.d)) ii = [] @@ -276,32 +178,57 @@ def fixed_hessian_list(self): else: raise ValueError(f"Unsupported dimension {self.d} for fixed hessians.") - def get_residuals(self, t, y): - positions = t.reshape((-1, self.d)) - y_current = ( - np.linalg.norm(self.landmarks[None, :, :] - positions[:, None, :], axis=2) - ** 2 - ) - return self.W * (y - y_current) + def get_residuals(self, t, y, squared=True, ad=False): + if ad: + positions = t.reshape((-1, self.d)) + if squared: + y_current = np.sum( + (self.landmarks[None, :, :] - positions[:, None, :]) ** 2, axis=2 + ) + return self.W * (y - y_current) + else: + y_current = np.linalg.norm( + (self.landmarks[None, :, :] - positions[:, None, :]), axis=2 + ) + return self.W * (y - y_current**2) + else: + positions = t.reshape((-1, self.d)) + if squared: + y_current = anp.sum( # type: ignore + (self.landmarks[None, :, :] - positions[:, None, :]) ** 2, axis=2 + ) + return self.W * (y - y_current) + else: + y_current = anp.linalg.norm( # type:ignore + (self.landmarks[None, :, :] - positions[:, None, :]), axis=2 + ) + return self.W * (y - y_current**2) - def get_cost(self, theta, y, sub_idx=None): + def get_cost(self, theta, y, sub_idx=None, ad=False): """ - get cost for given positions, landmarks and noise. + Get cost for given positions, landmarks and noise. :param t: flattened positions of length Nd :param y: N x K distance measurements """ - residuals = self.get_residuals(theta, y) - if sub_idx is None: - cost = np.sum(residuals**2) + residuals = self.get_residuals(theta, y, ad=ad) + if ad: + if sub_idx is None: + cost = anp.sum(residuals**2) # type: ignore + else: + cost = anp.sum(residuals[sub_idx] ** 2) # type: ignore + if NORMALIZE: + cost /= anp.sum(self.W > 0) # type: ignore else: - cost = np.sum(residuals[sub_idx] ** 2) - if NORMALIZE: - return cost / np.sum(self.W > 0) + if sub_idx is None: + cost = np.sum(residuals**2) + else: + cost = np.sum(residuals[sub_idx] ** 2) + if NORMALIZE: + cost /= np.sum(self.W > 0) return cost def get_grad(self, t, y, sub_idx=None): - """get gradient""" J = self.get_J(t, y) x = self.get_x(t) Q = self.get_Q_from_y(y) @@ -321,7 +248,6 @@ def get_J(self, t, y): return J def get_hess(self, t, y): - """get Hessian""" x = self.get_x(t) Q = self.get_Q_from_y(y) J = self.get_J(t, y) @@ -336,42 +262,6 @@ def get_hess(self, t, y): hess += 2 * factor * h return hess - def get_Q_from_y(self, y, output_poly: bool = False): - import itertools - - self.ls_problem = LeastSquaresProblem() - - if self.level == "quad": - diag_idx = diag_indices(self.d) - - for n, k in itertools.product(range(self.n_positions), range(self.n_landmarks)): - if self.W[n, k] > 0: - ak = self.landmarks[k] - if self.level == "no": - self.ls_problem.add_residual( - { - self.HOM: y[n, k] - np.linalg.norm(ak) ** 2, - f"x_{n}": 2 * ak.reshape((1, -1)), - f"z_{n}": -1, - } - ) - elif self.level == "quad": - mat = np.zeros((1, self.size_z)) - mat[0, diag_idx] = -1 - res_dict = { - self.HOM: y[n, k] - np.linalg.norm(ak) ** 2, - f"x_{n}": 2 * ak.reshape((1, -1)), - f"z_{n}": mat, - } - self.ls_problem.add_residual(res_dict) - if output_poly: - Q = self.ls_problem.get_Q() - else: - Q = self.ls_problem.get_Q().get_matrix(self.var_dict) - if NORMALIZE: - return Q / np.sum(self.W > 0) - return Q - def simulate_y(self, noise: float | None = None, squared: bool = True): assert self.landmarks is not None # N x K matrix @@ -429,10 +319,6 @@ def get_theta(self, x): # below is if we have order x_1, x_2, ..., z_1, z_2, ... return x[: self.n_positions * self.d] - def get_position(self, theta=None): - if theta is not None: - return theta.reshape(self.n_positions, self.d) - def get_error(self, theta_hat, error_type="rmse", *args, **kwargs): if error_type == "rmse": return np.sqrt(np.mean((self.theta - theta_hat) ** 2)) @@ -453,18 +339,39 @@ def local_solver( :param t_init: (positions, landmarks) tuple """ - # TODO(FD): split problem into individual points. - options = solver_kwargs[method] - options["disp"] = verbose - sol = minimize( - self.get_cost, - x0=t0, - args=y, - jac=self.get_grad, - # hess=self.get_hess, not used by any solvers. - method=method, - options=options, - ) + use_autograd = False + if self.get_grad(t0, y) is None: + use_autograd = True + + if use_autograd: + from autograd import grad # , hessian + + fun = lambda x: self.get_cost(theta=x, y=y, ad=True) + # TODO(FD): split problem into individual points. + options = solver_kwargs[method] + options["disp"] = verbose + sol = minimize( + fun, + x0=t0, + args=y, + jac=grad(fun), # type: ignore + # hess=hessian(fun), not used by any solvers + method=method, + options=options, + ) + else: + # TODO(FD): split problem into individual points. + options = solver_kwargs[method] + options["disp"] = verbose + sol = minimize( + self.get_cost, + x0=t0, + args=y, + jac=self.get_grad, + # hess=self.get_hess, not used by any solvers. + method=method, + options=options, + ) info = {} info["success"] = sol.success @@ -487,25 +394,14 @@ def local_solver( return that, info, cost @property - def var_dict(self): - var_dict = {self.HOM: 1} - var_dict.update({f"x_{n}": self.d for n in range(self.n_positions)}) - var_dict.update({f"z_{n}": self.size_z for n in range(self.n_positions)}) - return var_dict + @abstractmethod + def size_z(self) -> int: + return 1 @property def param_dict(self): return self.param_dict_landmarks - @property - def size_z(self): - if self.level == "no": - return 1 - elif self.level == "quad": - return int(self.d * (self.d + 1) / 2) - else: - raise ValueError(f"Unknown level {self.level}") - @property def N(self): return self.n_positions * self.d @@ -516,7 +412,3 @@ def M(self): def __repr__(self): return f"rangeonlyloc{self.d}d_{self.level}" - - -if __name__ == "__main__": - lifter = RangeOnlyLocLifter(n_positions=3, n_landmarks=4, d=2) diff --git a/popcor/examples/__init__.py b/popcor/examples/__init__.py index 495ae9b..6694b44 100644 --- a/popcor/examples/__init__.py +++ b/popcor/examples/__init__.py @@ -2,7 +2,8 @@ from .mono_lifter import MonoLifter from .poly4_lifter import Poly4Lifter from .poly6_lifter import Poly6Lifter -from .range_only_lifters import RangeOnlyLocLifter +from .ro_nsq_lifter import RangeOnlyNsqLifter +from .ro_sq_lifter import RangeOnlySqLifter from .rotation_lifter import RotationLifter from .stereo1d_lifter import Stereo1DLifter from .stereo2d_lifter import Stereo2DLifter @@ -14,7 +15,8 @@ MonoLifter, Poly4Lifter, Poly6Lifter, - RangeOnlyLocLifter, + RangeOnlyNsqLifter, + RangeOnlySqLifter, RotationLifter, Stereo1DLifter, Stereo2DLifter, diff --git a/popcor/examples/ro_nsq_lifter.py b/popcor/examples/ro_nsq_lifter.py new file mode 100644 index 0000000..0f84654 --- /dev/null +++ b/popcor/examples/ro_nsq_lifter.py @@ -0,0 +1,249 @@ +import itertools + +import numpy as np +import scipy.sparse as sp +from poly_matrix.least_squares_problem import LeastSquaresProblem + +from popcor.base_lifters import RangeOnlyLifter +from popcor.utils.common import diag_indices + +NOISE = 1e-2 # std deviation of distance noise + +NORMALIZE = True + + +class RangeOnlyNsqLifter(RangeOnlyLifter): + """Range-only localization in 2D or 3D. + + Almost same as RangeOnlySqLifter, but we do not square the distances. We minimize + + .. math:: f(\\theta) = \\sum_{n=0}^{N-1} \\sum_{k=0}^{K-1} w_{nk} (d_{nk} - ||p_n - a_k||)^2 + + where + + - :math:`w_{nk}` is the weight for the nth point and kth landmark (currently assumed binary to mark missing edges). + - :math:`\\theta` is the flattened vector of positions :math:`p_n`. + - :math:`d_{nk}` is the distance measurement from point n to landmark k. + - :math:`a_k` is the kth landmark. + + Note that in the current implementation, there is no regularization term so the problem could be split into individual points. + + We experiment with two different substitutions to turn the cost function into a quadratic form: + + - level "normals" uses a reformulation that introduce normal vectors, as proposed by Halstedt et al (see below). + - level "simple" uses substitution :math:`z_i=||p_n - a_k||` (or equivalent 3D version). + + .. math:: f(\\theta) = \\sum_{n=0}^{N-1} \\sum_{k=0}^{K-1} w_{nk} || n_{nk} - d_{nk}\\top(p_n - a_k) ||^2 + + where all are as above, except: + + - :math:`\\theta` is now the flattened vector of positions :math:`p_n` and also normal vectors :amth:`z_{nk}`. + """ + + TIGHTNESS = "rank" + LEVELS = ["normals", "simple"] + LEVEL_NAMES = { + "normals": "$\\boldymbol{y}_n$", + "simple": "$z_n$", + } + + def __init__( + self, + n_positions, + n_landmarks, + d, + W=None, + level="normals", + variable_list=None, + param_level="no", + ): + if level == "simple": + raise NotImplementedError("simple is not implemented yet.") + super().__init__( + n_positions=n_positions, + n_landmarks=n_landmarks, + d=d, + W=W, + level=level, + variable_list=variable_list, + param_level=param_level, + ) + + @property + def VARIABLE_LIST(self): + return [ + [self.HOM, "x_0"], + [self.HOM, "x_0"] + [f"z_0_{i}" for i in range(self.n_landmarks)], + ] + + def get_all_variables(self): + vars = [self.HOM] + vars += [f"x_{i}" for i in range(self.n_positions)] + vars += [ + f"z_{i}_{k}" + for i in range(self.n_positions) + for k in range(self.n_landmarks) + ] + return [vars] + + def get_A_known(self, var_dict=None, output_poly=False, add_redundant=False): + from poly_matrix.poly_matrix import PolyMatrix + + if var_dict is None: + var_dict = self.var_dict + positions = self.get_variable_indices(var_dict) + + A_list = [] + for n in positions: + if self.level == "normals": + # enforce the normal vectors are indeed unit-norm + A = PolyMatrix(symmetric=True) + + if output_poly: + A_list.append(A) + else: + A_list.append(A.get_matrix(self.var_dict)) + + elif self.level == "simple": + # enfore that y_{nk}^2 = ||p_n - a_k||^2 = ||p_n||^2 - 2a_k^T p_n + ||a_k||^2 + A = PolyMatrix(symmetric=True) + + if output_poly: + A_list.append(A) + else: + A_list.append(A.get_matrix(self.var_dict)) + return A_list + + def get_residuals(self, t, y, ad=False): + return super().get_residuals(t, y, ad=ad, squared=False) + + def get_x(self, theta=None, parameters=None, var_subset=None): + if var_subset is None: + var_subset = self.var_dict + if theta is None: + theta = self.theta + if parameters is None: + parameters = self.parameters + + positions = theta.reshape(self.n_positions, -1) + normals = self.get_normals(positions, parameters) + + x_data = [] + for key in var_subset: + if key == self.HOM: + x_data.append(1.0) + elif "x" in key: + n = int(key.split("_")[-1]) + x_data += list(positions[n]) + elif "z" in key: + n, k = [int(k) for k in key.split("_")[-2:]] + if self.level == "simple": + x_data.append(np.linalg.norm(positions[n])) + elif self.level == "normals": + x_data += list((normals[n][k])) + assert len(x_data) == self.get_dim_x(var_subset) + return np.array(x_data) + + def get_J_lifting(self, t): + pos = t.reshape((-1, self.d)) + ii = [] + jj = [] + data = [] + + for n in range(self.n_positions): + if self.level == "normals": + pass + elif self.level == "simple": + pass + J_lifting = sp.csr_array( + (data, (ii, jj)), + shape=(self.M, self.N), + ) + return J_lifting + + def get_hess_lifting(self, t): + """return list of the hessians of the M lifting functions.""" + hessians = [] + for n in range(self.n_positions): + idx = range(n * self.d, (n + 1) * self.d) + if self.level == "no": + hessian = sp.csr_array( + ([2] * self.d, (idx, idx)), + shape=(self.N, self.N), + ) + hessians.append(hessian) + elif self.level == "quad": + for h in self.fixed_hessian_list: + ii, jj = np.meshgrid(idx, idx) + hessian = sp.csr_array( + (h.flatten(), (ii.flatten(), jj.flatten())), + shape=(self.N, self.N), + ) + hessians.append(hessian) + return hessians + + def get_Q_from_y(self, y, output_poly: bool = False): + self.ls_problem = LeastSquaresProblem() + + if self.level == "quad": + diag_idx = diag_indices(self.d) + + for n, k in itertools.product(range(self.n_positions), range(self.n_landmarks)): + if self.W[n, k] > 0: + ak = self.landmarks[k] + if self.level == "no": + self.ls_problem.add_residual( + { + self.HOM: y[n, k] - np.linalg.norm(ak) ** 2, + f"x_{n}": 2 * ak.reshape((1, -1)), + f"z_{n}": -1, + } + ) + elif self.level == "quad": + mat = np.zeros((1, self.size_z)) + mat[0, diag_idx] = -1 + res_dict = { + self.HOM: y[n, k] - np.linalg.norm(ak) ** 2, + f"x_{n}": 2 * ak.reshape((1, -1)), + f"z_{n}": mat, + } + self.ls_problem.add_residual(res_dict) + if output_poly: + Q = self.ls_problem.get_Q() + else: + Q = self.ls_problem.get_Q().get_matrix(self.var_dict) + if NORMALIZE: + return Q / np.sum(self.W > 0) + return Q + + def simulate_y(self, noise: float | None = None, squared: bool = True): + return super().simulate_y(noise=noise, squared=False) + + @property + def var_dict(self): + var_dict = {self.HOM: 1} + var_dict.update({f"x_{n}": self.d for n in range(self.n_positions)}) + var_dict.update( + { + f"z_{n}_{k}": self.size_z + for n in range(self.n_positions) + for k in range(self.n_landmarks) + } + ) + return var_dict + + @property + def size_z(self) -> int: + if self.level == "normals": + return self.d + elif self.level == "simple": + return 1 + else: + raise ValueError(f"Unknown level {self.level}") + + def __repr__(self): + return f"rangeonlyloc{self.d}d_{self.level}" + + +if __name__ == "__main__": + lifter = RangeOnlyNsqLifter(n_positions=3, n_landmarks=4, d=2) diff --git a/popcor/examples/ro_sq_lifter.py b/popcor/examples/ro_sq_lifter.py new file mode 100644 index 0000000..0cadf74 --- /dev/null +++ b/popcor/examples/ro_sq_lifter.py @@ -0,0 +1,260 @@ +import itertools + +import numpy as np +import scipy.sparse as sp +from poly_matrix.least_squares_problem import LeastSquaresProblem + +from popcor.base_lifters import RangeOnlyLifter +from popcor.utils.common import diag_indices, upper_triangular + +NOISE = 1e-2 # std deviation of distance noise + +NORMALIZE = True + + +class RangeOnlySqLifter(RangeOnlyLifter): + """Range-only localization in 2D or 3D. + + We minimize the cost function + + .. math:: f(\\theta) = \\sum_{n=0}^{N-1} \\sum_{k=0}^{K-1} w_{nk} (d_{nk}^2 - ||p_n - a_k||^2)^2 + + where + + - :math:`w_{nk}` is the weight for the nth point and kth landmark (currently assumed binary to mark missing edges). + - :math:`\\theta` is the flattened vector of positions :math:`p_n`. + - :math:`d_{nk}` is the distance measurement from point n to landmark k. + - :math:`a_k` is the kth landmark. + + Note that in the current implementation, there is no regularization term so the problem could be split into individual points. + + We experiment with two different substitutions to turn the cost function into aquadratic form: + + - level "no" uses substitution :math:`z_i=||p_i||^2=x_i^2 + y_i^2` (or equivalent 3D version). + - level "quad" uses substitution :math:`y_i=[x_i^2, x_iy_i, y_i^2]` (or equivalent 3D version). + + This example is treated in more details in `this paper `_. + """ + + TIGHTNESS = "rank" + LEVELS = ["no", "quad"] + LEVEL_NAMES = { + "no": "$z_n$", + "quad": "$\\boldsymbol{y}_n$", + } + + def __init__( + self, + n_positions, + n_landmarks, + d, + W=None, + level="no", + variable_list=None, + param_level="no", + ): + super().__init__( + n_positions=n_positions, + n_landmarks=n_landmarks, + d=d, + W=W, + level=level, + variable_list=variable_list, + param_level=param_level, + ) + + @property + def VARIABLE_LIST(self): + return [ + [self.HOM, "x_0"], + [self.HOM, "x_0", "z_0"], + ] + + def get_all_variables(self): + vars = [self.HOM] + vars += [f"x_{i}" for i in range(self.n_positions)] + vars += [f"z_{i}" for i in range(self.n_positions)] + return [vars] + + def get_A_known(self, var_dict=None, output_poly=False, add_redundant=False): + from poly_matrix.poly_matrix import PolyMatrix + + if var_dict is None: + var_dict = self.var_dict + positions = self.get_variable_indices(var_dict) + + A_list = [] + for n in positions: + if self.level == "no": + A = PolyMatrix(symmetric=True) + A[f"x_{n}", f"x_{n}"] = np.eye(self.d) + A[self.HOM, f"z_{n}"] = -0.5 + if output_poly: + A_list.append(A) + else: + A_list.append(A.get_matrix(self.var_dict)) + + elif self.level == "quad": + count = 0 + for i in range(self.d): + for j in range(i, self.d): + A = PolyMatrix(symmetric=True) + mat_x = np.zeros((self.d, self.d)) + mat_z = np.zeros((1, self.size_z)) + if i == j: + mat_x[i, i] = 1.0 + else: + mat_x[i, j] = 0.5 + mat_x[j, i] = 0.5 + mat_z[0, count] = -0.5 + A[f"x_{n}", f"x_{n}"] = mat_x + A[self.HOM, f"z_{n}"] = mat_z + count += 1 + if output_poly: + A_list.append(A) + else: + A_list.append(A.get_matrix(self.var_dict)) + return A_list + + def get_residuals(self, t, y, ad=False): + return super().get_residuals(t, y, ad=ad, squared=True) + + def get_x(self, theta=None, parameters=None, var_subset=None): + if var_subset is None: + var_subset = self.var_dict + if theta is None: + theta = self.theta + if parameters is None: + parameters = self.parameters + + positions = theta.reshape(self.n_positions, -1) + + x_data = [] + for key in var_subset: + if key == self.HOM: + x_data.append(1.0) + elif "x" in key: + n = int(key.split("_")[-1]) + x_data += list(positions[n]) + elif "z" in key: + n = int(key.split("_")[-1]) + if self.level == "no": + x_data.append(np.linalg.norm(positions[n]) ** 2) + elif self.level == "quad": + x_data += list(upper_triangular(positions[n])) + assert len(x_data) == self.get_dim_x(var_subset) + return np.array(x_data) + + def get_J_lifting(self, t): + pos = t.reshape((-1, self.d)) + ii = [] + jj = [] + data = [] + + idx = 0 + for n in range(self.n_positions): + if self.level == "no": + ii += [n] * self.d + jj += list(range(n * self.d, (n + 1) * self.d)) + data += list(2 * pos[n]) + elif self.level == "quad": + # it seemed easier to do this manually that programtically + if self.d == 3: + x, y, z = pos[n] + jj += [n * self.d + j for j in [0, 0, 1, 0, 2, 1, 1, 2, 2]] + data += [2 * x, y, x, z, x, 2 * y, z, y, 2 * z] + ii += [idx + i for i in [0, 1, 1, 2, 2, 3, 4, 4, 5]] + elif self.d == 2: + x, y = pos[n] + jj += [n * self.d + j for j in [0, 0, 1, 1]] + data += [2 * x, y, x, 2 * y] + ii += [idx + i for i in [0, 1, 1, 2]] + idx += self.size_z + J_lifting = sp.csr_array( + (data, (ii, jj)), + shape=(self.M, self.N), + ) + return J_lifting + + def get_hess_lifting(self, t): + """return list of the hessians of the M lifting functions.""" + hessians = [] + for n in range(self.n_positions): + idx = range(n * self.d, (n + 1) * self.d) + if self.level == "no": + hessian = sp.csr_array( + ([2] * self.d, (idx, idx)), + shape=(self.N, self.N), + ) + hessians.append(hessian) + elif self.level == "quad": + for h in self.fixed_hessian_list: + ii, jj = np.meshgrid(idx, idx) + hessian = sp.csr_array( + (h.flatten(), (ii.flatten(), jj.flatten())), + shape=(self.N, self.N), + ) + hessians.append(hessian) + return hessians + + def get_Q_from_y(self, y, output_poly: bool = False): + self.ls_problem = LeastSquaresProblem() + + if self.level == "quad": + diag_idx = diag_indices(self.d) + + for n, k in itertools.product(range(self.n_positions), range(self.n_landmarks)): + if self.W[n, k] > 0: + ak = self.landmarks[k] + if self.level == "no": + self.ls_problem.add_residual( + { + self.HOM: y[n, k] - np.linalg.norm(ak) ** 2, + f"x_{n}": 2 * ak.reshape((1, -1)), + f"z_{n}": -1, + } + ) + elif self.level == "quad": + mat = np.zeros((1, self.size_z)) + mat[0, diag_idx] = -1 + res_dict = { + self.HOM: y[n, k] - np.linalg.norm(ak) ** 2, + f"x_{n}": 2 * ak.reshape((1, -1)), + f"z_{n}": mat, + } + self.ls_problem.add_residual(res_dict) + if output_poly: + Q = self.ls_problem.get_Q() + else: + Q = self.ls_problem.get_Q().get_matrix(self.var_dict) + if NORMALIZE: + return Q / np.sum(self.W > 0) + return Q + + def simulate_y(self, noise: float | None = None, squared: bool = True): + # purposefully not using squared=True here: + # the noise should always be added to the non-squared distances. + return super().simulate_y(noise=noise, squared=False) + + @property + def var_dict(self): + var_dict = {self.HOM: 1} + var_dict.update({f"x_{n}": self.d for n in range(self.n_positions)}) + var_dict.update({f"z_{n}": self.size_z for n in range(self.n_positions)}) + return var_dict + + @property + def size_z(self) -> int: + if self.level == "no": + return 1 + elif self.level == "quad": + return int(self.d * (self.d + 1) / 2) + else: + raise ValueError(f"Unknown level {self.level}") + + def __repr__(self): + return f"rangeonlyloc{self.d}d_{self.level}" + + +if __name__ == "__main__": + lifter = RangeOnlySqLifter(n_positions=3, n_landmarks=4, d=2) diff --git a/popcor/solvers/common.py b/popcor/solvers/common.py index 2d992eb..b5da3f8 100644 --- a/popcor/solvers/common.py +++ b/popcor/solvers/common.py @@ -4,7 +4,7 @@ def find_local_minimum(lifter, y, delta=1.0, verbose=False, n_inits=10, plot=False): from popcor.base_lifters import StateLifter - from popcor.examples import RangeOnlyLocLifter + from popcor.examples import RangeOnlySqLifter assert isinstance(lifter, StateLifter) local_solutions = [] @@ -101,7 +101,7 @@ def find_local_minimum(lifter, y, delta=1.0, verbose=False, n_inits=10, plot=Fal ) # plot all solutions that converged to those (for RO only, for stereo it's too crowded) - if isinstance(lifter, RangeOnlyLocLifter): + if isinstance(lifter, RangeOnlySqLifter): for i in global_inds[1:]: # first one corresponds to ground truth plot_frame(ax, theta=inits[i], color="g", marker=".") for i in local_inds: diff --git a/popcor/utils/test_tools.py b/popcor/utils/test_tools.py index a61a4fd..f4804d0 100644 --- a/popcor/utils/test_tools.py +++ b/popcor/utils/test_tools.py @@ -4,7 +4,7 @@ MonoLifter, Poly4Lifter, Poly6Lifter, - RangeOnlyLocLifter, + RangeOnlySqLifter, RotationLifter, Stereo1DLifter, Stereo2DLifter, @@ -25,8 +25,8 @@ (MonoLifter, dict(n_landmarks=5, d=2, robust=False, level="no", n_outliers=0)), # not tight (WahbaLifter, dict(n_landmarks=5, d=2, robust=True, level="xwT", n_outliers=1)), # not tight (MonoLifter, dict(n_landmarks=6, d=2, robust=True, level="xwT", n_outliers=1)), # not tight - (RangeOnlyLocLifter, dict(n_positions=n_positions, n_landmarks=n_landmarks, d=d, level="no")), # ok - (RangeOnlyLocLifter, dict(n_positions=n_positions, n_landmarks=n_landmarks, d=d, level="quad")), # ok + (RangeOnlySqLifter, dict(n_positions=n_positions, n_landmarks=n_landmarks, d=d, level="no")), # ok + (RangeOnlySqLifter, dict(n_positions=n_positions, n_landmarks=n_landmarks, d=d, level="quad")), # ok (Stereo1DLifter, dict(n_landmarks=n_landmarks)), # not tight #(Stereo1DLifter, dict(n_landmarks=n_landmarks, param_level="p")), # skip #(Stereo2DLifter, dict(n_landmarks=n_landmarks)), @@ -37,7 +37,7 @@ ExampleLifters = [ (WahbaLifter, dict(n_landmarks=5, d=2, robust=False, level="no", n_outliers=1)), - (RangeOnlyLocLifter, dict(n_positions=n_poses, n_landmarks=n_landmarks, d=d, level="quad")), + (RangeOnlySqLifter, dict(n_positions=n_poses, n_landmarks=n_landmarks, d=d, level="quad")), (Stereo1DLifter, dict(n_landmarks=n_landmarks)), (Stereo2DLifter, dict(n_landmarks=n_landmarks)), ] diff --git a/tests/test_autotemplate.py b/tests/test_autotemplate.py index ef6d847..383454c 100644 --- a/tests/test_autotemplate.py +++ b/tests/test_autotemplate.py @@ -1,7 +1,7 @@ import numpy as np from popcor import AutoTemplate -from popcor.examples import RangeOnlyLocLifter, Stereo1DLifter +from popcor.examples import RangeOnlySqLifter, Stereo1DLifter # random seed, for reproducibility SEED = 3 @@ -27,7 +27,7 @@ def test_stereo_1d(): def test_range_only(): np.random.seed(SEED) for level in ["no", "quad"]: - lifter = RangeOnlyLocLifter(n_positions=4, n_landmarks=5, d=2, level=level) + lifter = RangeOnlySqLifter(n_positions=4, n_landmarks=5, d=2, level=level) learner = AutoTemplate( lifter=lifter, ) From 702b8a7f782d78708879ba4d0692f79fb6479311 Mon Sep 17 00:00:00 2001 From: Frederike Duembgen Date: Sun, 1 Jun 2025 22:50:41 +0200 Subject: [PATCH 02/12] Add static initializer and plotting functions, keep cleaning --- popcor/base_lifters/range_only_lifter.py | 195 +++++++++++----------- popcor/examples/ro_nsq_lifter.py | 203 ++++++++++++++++------- popcor/examples/ro_sq_lifter.py | 55 +++++- 3 files changed, 287 insertions(+), 166 deletions(-) diff --git a/popcor/base_lifters/range_only_lifter.py b/popcor/base_lifters/range_only_lifter.py index 503355d..16e55a3 100644 --- a/popcor/base_lifters/range_only_lifter.py +++ b/popcor/base_lifters/range_only_lifter.py @@ -1,11 +1,12 @@ from abc import abstractmethod import autograd.numpy as anp +import matplotlib.pylab as plt import numpy as np import scipy.sparse as sp from scipy.optimize import minimize -from popcor.base_lifters import StateLifter +from .state_lifter import StateLifter NOISE = 1e-2 # std deviation of distance noise @@ -20,6 +21,9 @@ "TNC": dict(gtol=1e-6, xtol=1e-10), } +# size of the region of intereist: [0, SCALE]^d +SCALE = 2.0 + class RangeOnlyLifter(StateLifter): """Range-only localization base class, in 2D or 3D.""" @@ -47,10 +51,49 @@ def __init__( if variable_list == "all": variable_list = self.get_all_variables() + super().__init__( level=level, d=d, variable_list=variable_list, param_level=param_level ) + @staticmethod + def create_bad_fixed(n_positions, n_landmarks, d=2): + assert n_positions == 1 + landmarks = np.random.rand(n_landmarks, d) + landmarks[:, 1] *= 0.1 # align landmarks along X. + theta = np.array([[0.2, 0.3]]).reshape((1, -1)) + return landmarks, theta + + @staticmethod + def create_bad(n_positions, n_landmarks, d=2): + # create landmarks that are roughly in a subspace of dimension d-1 + landmarks = np.hstack( # type: ignore + [ + np.random.rand(n_landmarks, d - 1) * SCALE, + np.random.rand(n_landmarks, 1) * 0.3 + SCALE / 2.0, + ] + ) + theta = np.hstack( + [ + np.random.rand(n_positions, d - 1) * SCALE, + np.max(landmarks[:, -1]) + np.random.rand(n_positions, 1), + ] + ) + return landmarks, theta + + @staticmethod + def create_good(n_positions, n_landmarks, d=2): + landmarks = np.random.rand(n_landmarks, d) + landmarks = (landmarks - np.min(landmarks, axis=0)) / ( + np.max(landmarks, axis=0) - np.min(landmarks, axis=0) + ) + # remove landmarks a bit from border for plotting reasons + landmarks = (landmarks + SCALE * 0.05) * SCALE * 0.9 + theta = np.random.uniform( + [np.min(landmarks, axis=0)], [np.max(landmarks, axis=0)] + ) + return landmarks, theta + @property def landmarks(self): landmarks = np.random.rand(self.n_landmarks, self.d) @@ -73,8 +116,12 @@ def VARIABLE_LIST(self): ] @abstractmethod - def get_all_variables(self): - pass + def get_all_variables(self) -> list: + return [] + + @abstractmethod + def get_cost(self, theta, y, sub_idx=None, ad=False) -> float: + return 0.0 def get_vec_around_gt(self, delta: float = 0): """Sample around ground truth. @@ -106,112 +153,29 @@ def overwrite_theta(self, theta): def sample_theta(self): return np.random.rand(self.n_positions, self.d).flatten() - def get_J_lifting(self, t): - pos = t.reshape((-1, self.d)) - ii = [] - jj = [] - data = [] - - idx = 0 - for n in range(self.n_positions): - if self.level == "no": - ii += [n] * self.d - jj += list(range(n * self.d, (n + 1) * self.d)) - data += list(2 * pos[n]) - elif self.level == "quad": - # it seemed easier to do this manually that programtically - if self.d == 3: - x, y, z = pos[n] - jj += [n * self.d + j for j in [0, 0, 1, 0, 2, 1, 1, 2, 2]] - data += [2 * x, y, x, z, x, 2 * y, z, y, 2 * z] - ii += [idx + i for i in [0, 1, 1, 2, 2, 3, 4, 4, 5]] - elif self.d == 2: - x, y = pos[n] - jj += [n * self.d + j for j in [0, 0, 1, 1]] - data += [2 * x, y, x, 2 * y] - ii += [idx + i for i in [0, 1, 1, 2]] - idx += self.size_z - J_lifting = sp.csr_array( - (data, (ii, jj)), - shape=(self.M, self.N), - ) - return J_lifting - - def get_hess_lifting(self, t): - """return list of the hessians of the M lifting functions.""" - hessians = [] - for n in range(self.n_positions): - idx = range(n * self.d, (n + 1) * self.d) - if self.level == "no": - hessian = sp.csr_array( - ([2] * self.d, (idx, idx)), - shape=(self.N, self.N), - ) - hessians.append(hessian) - elif self.level == "quad": - for h in self.fixed_hessian_list: - ii, jj = np.meshgrid(idx, idx) - hessian = sp.csr_array( - (h.flatten(), (ii.flatten(), jj.flatten())), - shape=(self.N, self.N), - ) - hessians.append(hessian) - return hessians - - @property - def fixed_hessian_list(self): - if self.d == 2: - return [ - np.array([[2, 0], [0, 0]]), - np.array([[0, 1], [1, 0]]), - np.array([[0, 0], [0, 2]]), - ] - elif self.d == 3: - return [ - np.array([[2, 0, 0], [0, 0, 0], [0, 0, 0]]), - np.array([[0, 1, 0], [1, 0, 0], [0, 0, 0]]), - np.array([[0, 0, 1], [0, 0, 0], [1, 0, 0]]), - np.array([[0, 0, 0], [0, 2, 0], [0, 0, 0]]), - np.array([[0, 0, 0], [0, 0, 1], [0, 1, 0]]), - np.array([[0, 0, 0], [0, 0, 0], [0, 0, 2]]), - ] - else: - raise ValueError(f"Unsupported dimension {self.d} for fixed hessians.") - def get_residuals(self, t, y, squared=True, ad=False): - if ad: - positions = t.reshape((-1, self.d)) - if squared: - y_current = np.sum( - (self.landmarks[None, :, :] - positions[:, None, :]) ** 2, axis=2 - ) - return self.W * (y - y_current) - else: - y_current = np.linalg.norm( - (self.landmarks[None, :, :] - positions[:, None, :]), axis=2 - ) - return self.W * (y - y_current**2) + positions = t.reshape((-1, self.d)) + sum = anp.sum if ad else np.sum # type: ignore + norm = anp.linalg.norm if ad else np.linalg.norm # type: ignore + + if squared: + y_current = sum( + (self.landmarks[None, :, :] - positions[:, None, :]) ** 2, axis=2 + ) + return self.W * (y**2 - y_current) else: - positions = t.reshape((-1, self.d)) - if squared: - y_current = anp.sum( # type: ignore - (self.landmarks[None, :, :] - positions[:, None, :]) ** 2, axis=2 - ) - return self.W * (y - y_current) - else: - y_current = anp.linalg.norm( # type:ignore - (self.landmarks[None, :, :] - positions[:, None, :]), axis=2 - ) - return self.W * (y - y_current**2) + y_current = norm( + (self.landmarks[None, :, :] - positions[:, None, :]), axis=2 + ) + return self.W * (y - y_current) - def get_cost(self, theta, y, sub_idx=None, ad=False): + def get_cost_from_res(self, residuals, sub_idx, ad=False): """ Get cost for given positions, landmarks and noise. :param t: flattened positions of length Nd :param y: N x K distance measurements """ - residuals = self.get_residuals(theta, y, ad=ad) if ad: if sub_idx is None: cost = anp.sum(residuals**2) # type: ignore @@ -393,6 +357,37 @@ def local_solver( info["cost"] = cost return that, info, cost + def plot(self, y=None, xlims=[0, 2], ylims=[0, 2], ax=None): + if ax is None: + fig, ax = plt.subplots() + fig.set_size_inches(5, 5) + else: + fig = plt.gcf() + + ax.scatter(*self.landmarks[:, :2].T, color="k", marker="+", label="landmarks") + ax.scatter(*self.theta[:, :2].T, color="C0", marker="o") + + im = None + if y is not None: + xs = np.linspace(xlims[0], xlims[1], 100) + ys = np.linspace(ylims[0], ylims[1], 100) + xx, yy = np.meshgrid(xs, ys) + zz = [ + self.get_cost(theta=np.array([xi, yi])[None, :], y=y) + for xi, yi in zip(xx.flatten(), yy.flatten()) + ] + im = ax.pcolormesh( + xx, + yy, + np.reshape(zz, xx.shape), + norm="log", + alpha=0.5, + vmin=1e-5, + vmax=1, + ) + ax.set_aspect("equal") + return fig, ax, im + @property @abstractmethod def size_z(self) -> int: diff --git a/popcor/examples/ro_nsq_lifter.py b/popcor/examples/ro_nsq_lifter.py index 0f84654..98935a9 100644 --- a/popcor/examples/ro_nsq_lifter.py +++ b/popcor/examples/ro_nsq_lifter.py @@ -1,11 +1,8 @@ -import itertools - import numpy as np import scipy.sparse as sp -from poly_matrix.least_squares_problem import LeastSquaresProblem +from poly_matrix import PolyMatrix from popcor.base_lifters import RangeOnlyLifter -from popcor.utils.common import diag_indices NOISE = 1e-2 # std deviation of distance noise @@ -33,7 +30,7 @@ class RangeOnlyNsqLifter(RangeOnlyLifter): - level "normals" uses a reformulation that introduce normal vectors, as proposed by Halstedt et al (see below). - level "simple" uses substitution :math:`z_i=||p_n - a_k||` (or equivalent 3D version). - .. math:: f(\\theta) = \\sum_{n=0}^{N-1} \\sum_{k=0}^{K-1} w_{nk} || n_{nk} - d_{nk}\\top(p_n - a_k) ||^2 + .. math:: f(\\theta) = \\sum_{n=0}^{N-1} \\sum_{k=0}^{K-1} w_{nk} || n_{nk} d_{nk} - \\top(p_n - a_k) ||^2 where all are as above, except: @@ -47,6 +44,44 @@ class RangeOnlyNsqLifter(RangeOnlyLifter): "simple": "$z_n$", } + @staticmethod + def create_good(n_positions, n_landmarks, d=2): + landmarks, theta = RangeOnlyLifter.create_good(n_positions, n_landmarks, d) + lifter = RangeOnlyNsqLifter(n_positions, n_landmarks, d) + lifter.overwrite_theta(theta) + lifter.landmarks = landmarks + return lifter + + @staticmethod + def create_bad(n_positions, n_landmarks, d=2): + landmarks, theta = RangeOnlyLifter.create_bad(n_positions, n_landmarks, d) + lifter = RangeOnlyNsqLifter(n_positions, n_landmarks, d) + lifter.overwrite_theta(theta) + lifter.landmarks = landmarks + return lifter + + @staticmethod + def create_bad_fixed(n_positions, n_landmarks, d=2): + landmarks, theta = RangeOnlyLifter.create_bad_fixed(n_positions, n_landmarks, d) + lifter = RangeOnlyNsqLifter(n_positions, n_landmarks, d) + lifter.overwrite_theta(theta) + lifter.landmarks = landmarks + return lifter + + @staticmethod + def get_vectorized(samples, normals): + samples_vec = np.hstack( + [samples, normals.reshape(normals.shape[0], -1)] + ).flatten() + # make sure samples_vec is of the form + # [x_1, n_11, ..., n_1K, x_2, n_21, ..., n_2K, ...] + np.testing.assert_allclose(samples_vec[: samples.shape[1]], samples[0, :]) + np.testing.assert_allclose( + samples_vec[samples.shape[1] : samples.shape[1] + normals.shape[2]], + normals[0, 0, :], + ) + return samples_vec + def __init__( self, n_positions, @@ -94,29 +129,43 @@ def get_A_known(self, var_dict=None, output_poly=False, add_redundant=False): positions = self.get_variable_indices(var_dict) A_list = [] - for n in positions: - if self.level == "normals": - # enforce the normal vectors are indeed unit-norm - A = PolyMatrix(symmetric=True) - - if output_poly: - A_list.append(A) - else: - A_list.append(A.get_matrix(self.var_dict)) - - elif self.level == "simple": - # enfore that y_{nk}^2 = ||p_n - a_k||^2 = ||p_n||^2 - 2a_k^T p_n + ||a_k||^2 - A = PolyMatrix(symmetric=True) + if self.level == "normals": + for i in positions: + for k in range(self.landmarks.shape[0]): + # enforce the normal vectors are indeed unit-norm + A = PolyMatrix(symmetric=True) + A[f"z_{i}_{k}", f"z_{i}_{k}"] = np.eye(self.d) + A[self.HOM, self.HOM] = -1.0 + if output_poly: + A_list.append(A) + else: + A_list.append(A.get_matrix(self.var_dict)) - if output_poly: - A_list.append(A) - else: - A_list.append(A.get_matrix(self.var_dict)) + elif self.level == "simple": + # enfore that y_{nk}^2 = ||p_n - a_k||^2 = ||p_n||^2 - 2a_k^T p_n + ||a_k||^2 + raise NotImplementedError( + "get_A_known not implemented yet for simple level" + ) return A_list def get_residuals(self, t, y, ad=False): return super().get_residuals(t, y, ad=ad, squared=False) + def get_cost(self, theta, y, sub_idx=None, ad=False): + residuals = self.get_residuals(theta, y, ad=ad) + return self.get_cost_from_res(residuals, sub_idx, ad=ad) + + def get_normals(self, theta=None): + if theta is None: + theta = self.theta + + if np.ndim(theta) < 2: + theta = theta[None, :] + # N x M x d normals. + return (self.landmarks[None, :, :] - theta[:, None, :]) / np.linalg.norm( + self.landmarks[None, :, :] - theta, axis=2 + )[:, :, None] + def get_x(self, theta=None, parameters=None, var_subset=None): if var_subset is None: var_subset = self.var_dict @@ -129,18 +178,18 @@ def get_x(self, theta=None, parameters=None, var_subset=None): normals = self.get_normals(positions, parameters) x_data = [] - for key in var_subset: - if key == self.HOM: - x_data.append(1.0) - elif "x" in key: - n = int(key.split("_")[-1]) - x_data += list(positions[n]) - elif "z" in key: - n, k = [int(k) for k in key.split("_")[-2:]] - if self.level == "simple": - x_data.append(np.linalg.norm(positions[n])) - elif self.level == "normals": - x_data += list((normals[n][k])) + for val in var_subset: + if val == "h": + x_data += [1.0] + elif val.startswith("x_"): + assert theta is not None + i = int(val.split("x_")[-1]) + x_data += list(theta[i, :]) + elif val.startswith("z_"): # z_i_k + i = int(val.split("_")[-2]) + k = int(val.split("_")[-1]) + z = normals[i, k, :] + x_data += list(z) assert len(x_data) == self.get_dim_x(var_subset) return np.array(x_data) @@ -183,38 +232,26 @@ def get_hess_lifting(self, t): return hessians def get_Q_from_y(self, y, output_poly: bool = False): - self.ls_problem = LeastSquaresProblem() - - if self.level == "quad": - diag_idx = diag_indices(self.d) - - for n, k in itertools.product(range(self.n_positions), range(self.n_landmarks)): - if self.W[n, k] > 0: - ak = self.landmarks[k] - if self.level == "no": - self.ls_problem.add_residual( - { - self.HOM: y[n, k] - np.linalg.norm(ak) ** 2, - f"x_{n}": 2 * ak.reshape((1, -1)), - f"z_{n}": -1, - } - ) - elif self.level == "quad": - mat = np.zeros((1, self.size_z)) - mat[0, diag_idx] = -1 - res_dict = { - self.HOM: y[n, k] - np.linalg.norm(ak) ** 2, - f"x_{n}": 2 * ak.reshape((1, -1)), - f"z_{n}": mat, - } - self.ls_problem.add_residual(res_dict) + Q = PolyMatrix() + for k in range(self.n_landmarks): + for i in range(self.n_positions): + d_ik = y[i, k] + # || n_ik * d_ik - (m_k - x_i) || ^2 + # = d_ik^2 - 2*d_ik*n_ik' (m_k - x_i) + ||m_k - x_i||^2 + # = d_ik^2 + ||m_k||^2 - 2m_k' x_i - 2 * d_ik * m_k' n_ik + 2 * d_ik * n_ik' x_i + ||x_i||^2 + m_k = self.landmarks[k] + b_k = d_ik**2 + np.sum(m_k**2) + + Q["h", "h"] += b_k # d_ik^2 + ||m_k||^2 + Q["h", f"x_{i}"] += -m_k[None, :] # -2m_k' x_i + Q["h", f"z_{i}_{k}"] += -d_ik * m_k[None, :] # -2 d_ik * m_k' n_ik + Q[f"x_{i}", f"z_{i}_{k}"] += d_ik * np.eye(self.d) # 2 d_ik * n_ik' x_i + Q[f"x_{i}", f"x_{i}"] += np.eye(self.d) # + ||x_i||^2 + if output_poly: - Q = self.ls_problem.get_Q() + return Q else: - Q = self.ls_problem.get_Q().get_matrix(self.var_dict) - if NORMALIZE: - return Q / np.sum(self.W > 0) - return Q + return Q.get_matrix(self.var_dict) def simulate_y(self, noise: float | None = None, squared: bool = True): return super().simulate_y(noise=noise, squared=False) @@ -241,6 +278,44 @@ def size_z(self) -> int: else: raise ValueError(f"Unknown level {self.level}") + def get_valid_samples( + self, + n_samples, + max_trials=3, + min_dist=1e-2, + radius=1.0, + center=None, + vectorized=False, + ): + # quick and dirty implementation to make sure we don't sample too close + # from a landmark (otherwise length is zero and the normal vector will have nans) + if center is None: + center = np.ones(self.landmarks.shape[1]) + samples = [] + for i in range(n_samples): + for j in range(max_trials): + sample = ( + (np.random.rand(self.landmarks.shape[1]) - 0.5) * 2 * radius + ) + center # between 0 and 1 + if np.all( + np.linalg.norm(sample[None, :] - self.landmarks, axis=1) > min_dist + ): + samples.append(sample) + break + if j == max_trials - 1: + print(f"Warning: did not find valid sample in {max_trials} trials") + + # N x K x d + samples = np.vstack(samples) + normals = self.landmarks[None, :, :] - samples[:, None, :] + # normals = np.random.rand(n_samples, *self.landmarks.shape) # N x K x d + normals /= np.linalg.norm(normals, axis=2)[:, :, None] + + if vectorized: + return self.get_vectorized(samples, normals) + + return samples, normals + def __repr__(self): return f"rangeonlyloc{self.d}d_{self.level}" diff --git a/popcor/examples/ro_sq_lifter.py b/popcor/examples/ro_sq_lifter.py index 0cadf74..91831d8 100644 --- a/popcor/examples/ro_sq_lifter.py +++ b/popcor/examples/ro_sq_lifter.py @@ -43,6 +43,30 @@ class RangeOnlySqLifter(RangeOnlyLifter): "quad": "$\\boldsymbol{y}_n$", } + @staticmethod + def create_good(n_positions, n_landmarks, d=2): + landmarks, theta = RangeOnlyLifter.create_good(n_positions, n_landmarks, d) + lifter = RangeOnlySqLifter(n_positions, n_landmarks, d) + lifter.overwrite_theta(theta) + lifter.landmarks = landmarks + return lifter + + @staticmethod + def create_bad(n_positions, n_landmarks, d=2): + landmarks, theta = RangeOnlyLifter.create_bad(n_positions, n_landmarks, d) + lifter = RangeOnlySqLifter(n_positions, n_landmarks, d) + lifter.overwrite_theta(theta) + lifter.landmarks = landmarks + return lifter + + @staticmethod + def create_bad_fixed(n_positions, n_landmarks, d=2): + landmarks, theta = RangeOnlyLifter.create_bad_fixed(n_positions, n_landmarks, d) + lifter = RangeOnlySqLifter(n_positions, n_landmarks, d) + lifter.overwrite_theta(theta) + lifter.landmarks = landmarks + return lifter + def __init__( self, n_positions, @@ -119,6 +143,10 @@ def get_A_known(self, var_dict=None, output_poly=False, add_redundant=False): def get_residuals(self, t, y, ad=False): return super().get_residuals(t, y, ad=ad, squared=True) + def get_cost(self, theta, y, sub_idx=None, ad=False): + residuals = self.get_residuals(theta, y, ad=ad) + return self.get_cost_from_res(residuals, sub_idx, ad=ad) + def get_x(self, theta=None, parameters=None, var_subset=None): if var_subset is None: var_subset = self.var_dict @@ -197,7 +225,30 @@ def get_hess_lifting(self, t): hessians.append(hessian) return hessians + @property + def fixed_hessian_list(self): + if self.d == 2: + return [ + np.array([[2, 0], [0, 0]]), + np.array([[0, 1], [1, 0]]), + np.array([[0, 0], [0, 2]]), + ] + elif self.d == 3: + return [ + np.array([[2, 0, 0], [0, 0, 0], [0, 0, 0]]), + np.array([[0, 1, 0], [1, 0, 0], [0, 0, 0]]), + np.array([[0, 0, 1], [0, 0, 0], [1, 0, 0]]), + np.array([[0, 0, 0], [0, 2, 0], [0, 0, 0]]), + np.array([[0, 0, 0], [0, 0, 1], [0, 1, 0]]), + np.array([[0, 0, 0], [0, 0, 0], [0, 0, 2]]), + ] + else: + raise ValueError(f"Unsupported dimension {self.d} for fixed hessians.") + def get_Q_from_y(self, y, output_poly: bool = False): + """ + :param y: the distance measurements, shape (n_positions, n_landmarks). IMPORTANT: these are not squared! + """ self.ls_problem = LeastSquaresProblem() if self.level == "quad": @@ -209,7 +260,7 @@ def get_Q_from_y(self, y, output_poly: bool = False): if self.level == "no": self.ls_problem.add_residual( { - self.HOM: y[n, k] - np.linalg.norm(ak) ** 2, + self.HOM: y[n, k] ** 2 - np.linalg.norm(ak) ** 2, f"x_{n}": 2 * ak.reshape((1, -1)), f"z_{n}": -1, } @@ -218,7 +269,7 @@ def get_Q_from_y(self, y, output_poly: bool = False): mat = np.zeros((1, self.size_z)) mat[0, diag_idx] = -1 res_dict = { - self.HOM: y[n, k] - np.linalg.norm(ak) ** 2, + self.HOM: y[n, k] ** 2 - np.linalg.norm(ak) ** 2, f"x_{n}": 2 * ak.reshape((1, -1)), f"z_{n}": mat, } From 9af42c989ad5f6e0ea3bd02c2e47a58c754a12d9 Mon Sep 17 00:00:00 2001 From: Frederike Duembgen Date: Sun, 1 Jun 2025 23:00:39 +0200 Subject: [PATCH 03/12] Move unused code --- popcor/base_lifters/range_only_lifter.py | 46 +---------------------- popcor/base_lifters/state_lifter.py | 4 +- popcor/examples/ro_sq_lifter.py | 47 ++++++++++++++++++++++++ 3 files changed, 50 insertions(+), 47 deletions(-) diff --git a/popcor/base_lifters/range_only_lifter.py b/popcor/base_lifters/range_only_lifter.py index 16e55a3..43f553a 100644 --- a/popcor/base_lifters/range_only_lifter.py +++ b/popcor/base_lifters/range_only_lifter.py @@ -192,40 +192,6 @@ def get_cost_from_res(self, residuals, sub_idx, ad=False): cost /= np.sum(self.W > 0) return cost - def get_grad(self, t, y, sub_idx=None): - J = self.get_J(t, y) - x = self.get_x(t) - Q = self.get_Q_from_y(y) - if sub_idx is None: - return 2 * J.T @ Q @ x - else: - sub_idx_x = self.get_sub_idx_x(sub_idx) - return 2 * J.T[:, sub_idx_x] @ Q[sub_idx_x, :][:, sub_idx_x] @ x[sub_idx_x] - - def get_J(self, t, y): - J = sp.csr_array( - (np.ones(self.N), (range(1, self.N + 1), range(self.N))), - shape=(self.N + 1, self.N), - ) - J_lift = self.get_J_lifting(t) - J = sp.vstack([J, J_lift]) - return J - - def get_hess(self, t, y): - x = self.get_x(t) - Q = self.get_Q_from_y(y) - J = self.get_J(t, y) - hess = 2 * J.T @ Q @ J - - hessians = self.get_hess_lifting(t) - B = self.ls_problem.get_B_matrix(self.var_dict) - residuals = B @ x - for m, h in enumerate(hessians): - bm_tilde = B[:, -self.M + m] - factor = float(bm_tilde.T @ residuals) - hess += 2 * factor * h - return hess - def simulate_y(self, noise: float | None = None, squared: bool = True): assert self.landmarks is not None # N x K matrix @@ -252,17 +218,6 @@ def get_Q(self, noise: float | None = None, output_poly: bool = False) -> tuple: assert abs(cost1 - cost3) < 1e-10 return Q - def get_D(self, that): - D = np.eye(1 + self.n_positions * self.d + self.size_z) - x = self.get_x(theta=that) - J = self.get_J_lifting(t=that) - - D = sp.lil_array((len(x), len(x))) - D[range(len(x)), range(len(x))] = 1.0 - D[:, 0] = x - D[-J.shape[0] :, 1 : 1 + J.shape[1]] = J # type: ignore - return D.tocsc() - def get_sub_idx_x(self, sub_idx, add_z=True): sub_idx_x = [0] for idx in sub_idx: @@ -348,6 +303,7 @@ def local_solver( cost = sol.fun info["max res"] = np.max(np.abs(residuals)) hess = self.get_hess(that, y) + assert isinstance(hess, sp.csc_matrix) eigs = np.linalg.eigvalsh(hess.toarray()) info["cond Hess"] = eigs[-1] / eigs[0] else: diff --git a/popcor/base_lifters/state_lifter.py b/popcor/base_lifters/state_lifter.py index c5995a5..6360ab6 100644 --- a/popcor/base_lifters/state_lifter.py +++ b/popcor/base_lifters/state_lifter.py @@ -141,10 +141,10 @@ def get_involved_param_dict(self, var_subset): # CAN OPTINALLY OVERWRITE THESE FOR BETTER PERFORMANCE - def get_grad(self, theta, y=None) -> float: + def get_grad(self, theta, y=None) -> np.ndarray: raise NotImplementedError("must define get_grad if you want to use it.") - def get_hess(self, theta, y=None) -> float: + def get_hess(self, theta, y=None) -> np.ndarray: raise NotImplementedError("must define get_hess if you want to use it.") def get_cost(self, theta, y: np.ndarray | None = None) -> float: diff --git a/popcor/examples/ro_sq_lifter.py b/popcor/examples/ro_sq_lifter.py index 91831d8..0c39344 100644 --- a/popcor/examples/ro_sq_lifter.py +++ b/popcor/examples/ro_sq_lifter.py @@ -306,6 +306,53 @@ def size_z(self) -> int: def __repr__(self): return f"rangeonlyloc{self.d}d_{self.level}" + # ============ below are currently not used anymore, but it is an elegant way to compute the ============= + # gradient and hessian when there are no constraints + def get_grad(self, t, y, sub_idx=None): + J = self.get_J(t, y) + x = self.get_x(t) + Q = self.get_Q_from_y(y) + if sub_idx is None: + return 2 * J.T @ Q @ x + else: + sub_idx_x = self.get_sub_idx_x(sub_idx) + return 2 * J.T[:, sub_idx_x] @ Q[sub_idx_x, :][:, sub_idx_x] @ x[sub_idx_x] # type: ignore + + def get_J(self, t, y): + J = sp.csr_array( + (np.ones(self.N), (range(1, self.N + 1), range(self.N))), + shape=(self.N + 1, self.N), + ) + J_lift = self.get_J_lifting(t) + J = sp.vstack([J, J_lift]) + return J + + def get_hess(self, t, y): + x = self.get_x(t) + Q = self.get_Q_from_y(y) + J = self.get_J(t, y) + hess = 2 * J.T @ Q @ J + + hessians = self.get_hess_lifting(t) + B = self.ls_problem.get_B_matrix(self.var_dict) + residuals = B @ x + for m, h in enumerate(hessians): + bm_tilde = B[:, -self.M + m] + factor = float(bm_tilde.T @ residuals) + hess += 2 * factor * h + return hess + + def get_D(self, that): + D = np.eye(1 + self.n_positions * self.d + self.size_z) + x = self.get_x(theta=that) + J = self.get_J_lifting(t=that) + + D = sp.lil_array((len(x), len(x))) + D[range(len(x)), range(len(x))] = 1.0 + D[:, 0] = x + D[-J.shape[0] :, 1 : 1 + J.shape[1]] = J # type: ignore + return D.tocsc() + if __name__ == "__main__": lifter = RangeOnlySqLifter(n_positions=3, n_landmarks=4, d=2) From 07b2fa643f0eb733d2351a186797e1aab59bda58 Mon Sep 17 00:00:00 2001 From: Frederike Duembgen Date: Mon, 2 Jun 2025 00:23:52 +0200 Subject: [PATCH 04/12] Improve sampling algorithms --- popcor/base_lifters/range_only_lifter.py | 4 ++++ popcor/examples/ro_nsq_lifter.py | 24 +++++++----------------- popcor/examples/ro_sq_lifter.py | 1 + 3 files changed, 12 insertions(+), 17 deletions(-) diff --git a/popcor/base_lifters/range_only_lifter.py b/popcor/base_lifters/range_only_lifter.py index 43f553a..c69e1e1 100644 --- a/popcor/base_lifters/range_only_lifter.py +++ b/popcor/base_lifters/range_only_lifter.py @@ -344,6 +344,10 @@ def plot(self, y=None, xlims=[0, 2], ylims=[0, 2], ax=None): ax.set_aspect("equal") return fig, ax, im + def get_valid_samples(self, n_samples): + samples = [self.sample_theta() for _ in range(n_samples)] + return np.vstack(samples) + @property @abstractmethod def size_z(self) -> int: diff --git a/popcor/examples/ro_nsq_lifter.py b/popcor/examples/ro_nsq_lifter.py index 98935a9..f72efeb 100644 --- a/popcor/examples/ro_nsq_lifter.py +++ b/popcor/examples/ro_nsq_lifter.py @@ -43,6 +43,7 @@ class RangeOnlyNsqLifter(RangeOnlyLifter): "normals": "$\\boldymbol{y}_n$", "simple": "$z_n$", } + MONOMIAL_DEGREE = 1 @staticmethod def create_good(n_positions, n_landmarks, d=2): @@ -70,9 +71,6 @@ def create_bad_fixed(n_positions, n_landmarks, d=2): @staticmethod def get_vectorized(samples, normals): - samples_vec = np.hstack( - [samples, normals.reshape(normals.shape[0], -1)] - ).flatten() # make sure samples_vec is of the form # [x_1, n_11, ..., n_1K, x_2, n_21, ..., n_2K, ...] np.testing.assert_allclose(samples_vec[: samples.shape[1]], samples[0, :]) @@ -122,16 +120,13 @@ def get_all_variables(self): return [vars] def get_A_known(self, var_dict=None, output_poly=False, add_redundant=False): - from poly_matrix.poly_matrix import PolyMatrix - if var_dict is None: var_dict = self.var_dict - positions = self.get_variable_indices(var_dict) A_list = [] if self.level == "normals": - for i in positions: - for k in range(self.landmarks.shape[0]): + for i in range(self.n_positions): + for k in range(self.n_landmarks): # enforce the normal vectors are indeed unit-norm A = PolyMatrix(symmetric=True) A[f"z_{i}_{k}", f"z_{i}_{k}"] = np.eye(self.d) @@ -175,7 +170,7 @@ def get_x(self, theta=None, parameters=None, var_subset=None): parameters = self.parameters positions = theta.reshape(self.n_positions, -1) - normals = self.get_normals(positions, parameters) + normals = self.get_normals(positions) x_data = [] for val in var_subset: @@ -285,7 +280,7 @@ def get_valid_samples( min_dist=1e-2, radius=1.0, center=None, - vectorized=False, + vectorized=True, ): # quick and dirty implementation to make sure we don't sample too close # from a landmark (otherwise length is zero and the normal vector will have nans) @@ -305,16 +300,11 @@ def get_valid_samples( if j == max_trials - 1: print(f"Warning: did not find valid sample in {max_trials} trials") - # N x K x d samples = np.vstack(samples) + normals = self.landmarks[None, :, :] - samples[:, None, :] - # normals = np.random.rand(n_samples, *self.landmarks.shape) # N x K x d normals /= np.linalg.norm(normals, axis=2)[:, :, None] - - if vectorized: - return self.get_vectorized(samples, normals) - - return samples, normals + return np.hstack([samples, normals.reshape(normals.shape[0], -1)]) def __repr__(self): return f"rangeonlyloc{self.d}d_{self.level}" diff --git a/popcor/examples/ro_sq_lifter.py b/popcor/examples/ro_sq_lifter.py index 0c39344..e5e4697 100644 --- a/popcor/examples/ro_sq_lifter.py +++ b/popcor/examples/ro_sq_lifter.py @@ -42,6 +42,7 @@ class RangeOnlySqLifter(RangeOnlyLifter): "no": "$z_n$", "quad": "$\\boldsymbol{y}_n$", } + MONOMIAL_DEGREE = 2 @staticmethod def create_good(n_positions, n_landmarks, d=2): From 9e85c836c77391b507441d6af4cc5af9b3653d4f Mon Sep 17 00:00:00 2001 From: Frederike Duembgen Date: Wed, 4 Jun 2025 19:00:00 +0200 Subject: [PATCH 05/12] Fix lynting errors --- popcor/__init__.py | 2 +- popcor/base_lifters/range_only_lifter.py | 4 +- popcor/examples/ro_nsq_lifter.py | 32 -------------- popcor/examples/stereo1d_lifter.py | 2 - popcor/utils/test_tools.py | 56 +++++++++++++++++------- setup.cfg | 2 +- tests/test_autotight.py | 3 +- 7 files changed, 45 insertions(+), 56 deletions(-) diff --git a/popcor/__init__.py b/popcor/__init__.py index 07aa66c..79b07d0 100644 --- a/popcor/__init__.py +++ b/popcor/__init__.py @@ -1,4 +1,4 @@ from .auto_template import AutoTemplate from .auto_tight import AutoTight -__version__ = "0.0.1" +__version__ = "0.0.2" diff --git a/popcor/base_lifters/range_only_lifter.py b/popcor/base_lifters/range_only_lifter.py index c69e1e1..dcd3425 100644 --- a/popcor/base_lifters/range_only_lifter.py +++ b/popcor/base_lifters/range_only_lifter.py @@ -265,7 +265,9 @@ def local_solver( if use_autograd: from autograd import grad # , hessian - fun = lambda x: self.get_cost(theta=x, y=y, ad=True) + def fun(x): + return self.get_cost(theta=x, y=y, ad=True) + # TODO(FD): split problem into individual points. options = solver_kwargs[method] options["disp"] = verbose diff --git a/popcor/examples/ro_nsq_lifter.py b/popcor/examples/ro_nsq_lifter.py index f72efeb..cec786e 100644 --- a/popcor/examples/ro_nsq_lifter.py +++ b/popcor/examples/ro_nsq_lifter.py @@ -69,17 +69,6 @@ def create_bad_fixed(n_positions, n_landmarks, d=2): lifter.landmarks = landmarks return lifter - @staticmethod - def get_vectorized(samples, normals): - # make sure samples_vec is of the form - # [x_1, n_11, ..., n_1K, x_2, n_21, ..., n_2K, ...] - np.testing.assert_allclose(samples_vec[: samples.shape[1]], samples[0, :]) - np.testing.assert_allclose( - samples_vec[samples.shape[1] : samples.shape[1] + normals.shape[2]], - normals[0, 0, :], - ) - return samples_vec - def __init__( self, n_positions, @@ -205,27 +194,6 @@ def get_J_lifting(self, t): ) return J_lifting - def get_hess_lifting(self, t): - """return list of the hessians of the M lifting functions.""" - hessians = [] - for n in range(self.n_positions): - idx = range(n * self.d, (n + 1) * self.d) - if self.level == "no": - hessian = sp.csr_array( - ([2] * self.d, (idx, idx)), - shape=(self.N, self.N), - ) - hessians.append(hessian) - elif self.level == "quad": - for h in self.fixed_hessian_list: - ii, jj = np.meshgrid(idx, idx) - hessian = sp.csr_array( - (h.flatten(), (ii.flatten(), jj.flatten())), - shape=(self.N, self.N), - ) - hessians.append(hessian) - return hessians - def get_Q_from_y(self, y, output_poly: bool = False): Q = PolyMatrix() for k in range(self.n_landmarks): diff --git a/popcor/examples/stereo1d_lifter.py b/popcor/examples/stereo1d_lifter.py index 3cc84ee..366c48d 100644 --- a/popcor/examples/stereo1d_lifter.py +++ b/popcor/examples/stereo1d_lifter.py @@ -1,5 +1,3 @@ -from typing import Optional - import numpy as np from poly_matrix.least_squares_problem import LeastSquaresProblem from poly_matrix.poly_matrix import PolyMatrix diff --git a/popcor/utils/test_tools.py b/popcor/utils/test_tools.py index f4804d0..c2ddfe5 100644 --- a/popcor/utils/test_tools.py +++ b/popcor/utils/test_tools.py @@ -17,31 +17,53 @@ n_landmarks = 3 n_poses = 4 n_positions = 3 -# fmt: off Lifters = [ - (Poly4Lifter, dict()), #ok - (Poly6Lifter, dict()), #ok - (WahbaLifter, dict(n_landmarks=3, d=2, robust=False, level="no", n_outliers=0)), #ok - (MonoLifter, dict(n_landmarks=5, d=2, robust=False, level="no", n_outliers=0)), # not tight - (WahbaLifter, dict(n_landmarks=5, d=2, robust=True, level="xwT", n_outliers=1)), # not tight - (MonoLifter, dict(n_landmarks=6, d=2, robust=True, level="xwT", n_outliers=1)), # not tight - (RangeOnlySqLifter, dict(n_positions=n_positions, n_landmarks=n_landmarks, d=d, level="no")), # ok - (RangeOnlySqLifter, dict(n_positions=n_positions, n_landmarks=n_landmarks, d=d, level="quad")), # ok - (Stereo1DLifter, dict(n_landmarks=n_landmarks)), # not tight - #(Stereo1DLifter, dict(n_landmarks=n_landmarks, param_level="p")), # skip - #(Stereo2DLifter, dict(n_landmarks=n_landmarks)), - #(Stereo3DLifter, dict(n_landmarks=n_landmarks)), - (RotationLifter, dict(d=2)), # ok - (RotationLifter, dict(d=3)), # ok + ( + Poly4Lifter, + dict(), # ok + ), + (Poly6Lifter, dict()), # ok + ( + WahbaLifter, + dict(n_landmarks=3, d=2, robust=False, level="no", n_outliers=0), + ), # ok + ( + MonoLifter, + dict(n_landmarks=5, d=2, robust=False, level="no", n_outliers=0), + ), # not tight + ( + WahbaLifter, + dict(n_landmarks=5, d=2, robust=True, level="xwT", n_outliers=1), + ), # not tight + ( + MonoLifter, + dict(n_landmarks=6, d=2, robust=True, level="xwT", n_outliers=1), + ), # not tight + ( + RangeOnlySqLifter, + dict(n_positions=n_positions, n_landmarks=n_landmarks, d=d, level="no"), + ), # ok + ( + RangeOnlySqLifter, + dict(n_positions=n_positions, n_landmarks=n_landmarks, d=d, level="quad"), + ), # ok + (Stereo1DLifter, dict(n_landmarks=n_landmarks)), # not tight + (Stereo1DLifter, dict(n_landmarks=n_landmarks, param_level="p")), # skip + (Stereo2DLifter, dict(n_landmarks=n_landmarks)), + (Stereo3DLifter, dict(n_landmarks=n_landmarks)), + (RotationLifter, dict(d=2)), # ok + (RotationLifter, dict(d=3)), # ok ] ExampleLifters = [ (WahbaLifter, dict(n_landmarks=5, d=2, robust=False, level="no", n_outliers=1)), - (RangeOnlySqLifter, dict(n_positions=n_poses, n_landmarks=n_landmarks, d=d, level="quad")), + ( + RangeOnlySqLifter, + dict(n_positions=n_poses, n_landmarks=n_landmarks, d=d, level="quad"), + ), (Stereo1DLifter, dict(n_landmarks=n_landmarks)), (Stereo2DLifter, dict(n_landmarks=n_landmarks)), ] -# fmt: on def constraints_test_with_tol(lifter, A_list, tol): diff --git a/setup.cfg b/setup.cfg index 9cd1405..e185b01 100644 --- a/setup.cfg +++ b/setup.cfg @@ -33,4 +33,4 @@ install_requires = [flake8] ignore = W292, W391, F541, F841, E203, E501, W503, E741 exclude = _notebooks/*, *.ipynb_checkpoints*, venv/ -max-line-length = 99 \ No newline at end of file +max-line-length = 99 diff --git a/tests/test_autotight.py b/tests/test_autotight.py index be4b080..70253da 100644 --- a/tests/test_autotight.py +++ b/tests/test_autotight.py @@ -70,8 +70,7 @@ def test_constraints_stereo(): if __name__ == "__main__": - import pytest - + # import pytest # pytest.main([__file__, "-s"]) # print("all tests passed") From 23cd51824a4f54f6a567e2b554e643f49b2498ee Mon Sep 17 00:00:00 2001 From: Frederike Duembgen Date: Wed, 4 Jun 2025 19:16:46 +0200 Subject: [PATCH 06/12] Remove build --- .gitignore | 1 + docs/build/.buildinfo | 4 - docs/build/.buildinfo.bak | 4 - docs/build/.doctrees/api.doctree | Bin 2870 -> 0 bytes docs/build/.doctrees/api/algorithms.doctree | Bin 31334 -> 0 bytes docs/build/.doctrees/api/auto_tight.doctree | Bin 33363 -> 0 bytes docs/build/.doctrees/api/lifters.doctree | Bin 69245 -> 0 bytes docs/build/.doctrees/api/utils.doctree | Bin 27507 -> 0 bytes docs/build/.doctrees/contributing.doctree | Bin 191792 -> 0 bytes docs/build/.doctrees/environment.pickle | Bin 283419 -> 0 bytes docs/build/.doctrees/examples.doctree | Bin 2939 -> 0 bytes docs/build/.doctrees/examples/a.doctree | Bin 18012 -> 0 bytes docs/build/.doctrees/examples/b.doctree | Bin 35853 -> 0 bytes docs/build/.doctrees/examples/c.doctree | Bin 19162 -> 0 bytes docs/build/.doctrees/examples/d.doctree | Bin 7767 -> 0 bytes docs/build/.doctrees/examples/robust.doctree | Bin 22343 -> 0 bytes .../build/.doctrees/examples/standard.doctree | Bin 36027 -> 0 bytes .../.doctrees/examples/templates.doctree | Bin 7863 -> 0 bytes docs/build/.doctrees/examples/toy.doctree | Bin 19266 -> 0 bytes docs/build/.doctrees/index.doctree | Bin 274652 -> 0 bytes docs/build/.doctrees/quickstart.doctree | Bin 41649 -> 0 bytes docs/build/.doctrees/whatsnew.doctree | Bin 276715 -> 0 bytes docs/build/.doctrees/whatsnew/0.0.1.doctree | Bin 2185 -> 0 bytes .../.doctrees/whatsnew/CHANGELOG.doctree | Bin 4544 -> 0 bytes docs/build/_images/overview.png | Bin 127602 -> 0 bytes docs/build/_images/overview.webp | Bin 20496 -> 0 bytes docs/build/_images/poly4_lifter_A.png | Bin 11563 -> 0 bytes docs/build/_images/poly4_lifter_B.png | Bin 10440 -> 0 bytes docs/build/_images/poly6_lifter_A.png | Bin 10319 -> 0 bytes docs/build/_images/poly6_lifter_B.png | Bin 9810 -> 0 bytes docs/build/_modules/index.html | 285 - docs/build/_modules/popcor/auto_template.html | 1508 -- docs/build/_modules/popcor/auto_tight.html | 657 - .../popcor/base_lifters/poly_lifters.html | 325 - .../base_lifters/robust_pose_lifter.html | 775 - .../popcor/base_lifters/state_lifter.html | 501 - .../popcor/base_lifters/stereo_lifter.html | 746 - .../popcor/examples/example_lifter.html | 324 - .../_modules/popcor/examples/mono_lifter.html | 526 - .../popcor/examples/poly4_lifter.html | 361 - .../popcor/examples/poly6_lifter.html | 372 - .../popcor/examples/range_only_lifters.html | 763 - .../popcor/examples/rotation_lifter.html | 484 - .../popcor/examples/stereo1d_lifter.html | 471 - .../popcor/examples/stereo2d_lifter.html | 365 - .../popcor/examples/stereo3d_lifter.html | 438 - .../popcor/examples/wahba_lifter.html | 496 - docs/build/_modules/popcor/utils/common.html | 456 - .../_modules/popcor/utils/constraint.html | 550 - docs/build/_modules/popr/auto_template.html | 1354 -- docs/build/_modules/popr/auto_tight.html | 521 - .../popr/base_lifters/_base_class.html | 884 - .../popr/base_lifters/poly_lifters.html | 171 - .../popr/base_lifters/robust_pose_lifter.html | 639 - .../popr/base_lifters/state_lifter.html | 365 - .../popr/base_lifters/stereo_lifter.html | 610 - .../popr/examples/example_lifter.html | 170 - .../_modules/popr/examples/mono_lifter.html | 390 - .../_modules/popr/examples/poly4_lifter.html | 225 - .../_modules/popr/examples/poly6_lifter.html | 218 - .../popr/examples/range_only_lifters.html | 609 - .../popr/examples/range_only_slam1.html | 533 - .../popr/examples/range_only_slam2.html | 231 - .../popr/examples/rotation_lifter.html | 330 - .../popr/examples/stereo1d_lifter.html | 317 - .../popr/examples/stereo2d_lifter.html | 211 - .../popr/examples/stereo3d_lifter.html | 284 - .../_modules/popr/examples/wahba_lifter.html | 342 - .../popr/lifters/range_only_lifters.html | 463 - .../popr/lifters/robust_pose_lifter.html | 633 - .../_modules/popr/lifters/state_lifter.html | 318 - .../_modules/popr/lifters/stereo_lifter.html | 613 - docs/build/_modules/popr/utils/common.html | 302 - .../build/_modules/popr/utils/constraint.html | 414 - docs/build/_sources/api.rst.txt | 10 - docs/build/_sources/api/algorithms.rst.txt | 19 - docs/build/_sources/api/auto_tight.rst.txt | 20 - docs/build/_sources/api/lifters.rst.txt | 59 - docs/build/_sources/api/utils.rst.txt | 29 - docs/build/_sources/contributing.rst.txt | 7 - docs/build/_sources/examples.rst.txt | 12 - docs/build/_sources/examples/a.rst.txt | 48 - docs/build/_sources/examples/b.rst.txt | 26 - docs/build/_sources/examples/c.rst.txt | 13 - docs/build/_sources/examples/d.rst.txt | 16 - docs/build/_sources/examples/robust.rst.txt | 13 - docs/build/_sources/examples/standard.rst.txt | 26 - .../build/_sources/examples/templates.rst.txt | 16 - docs/build/_sources/examples/toy.rst.txt | 48 - docs/build/_sources/index.rst.txt | 38 - docs/build/_sources/quickstart.rst.txt | 148 - docs/build/_sources/whatsnew.rst.txt | 7 - docs/build/_sources/whatsnew/0.0.1.rst.txt | 0 docs/build/_sources/whatsnew/CHANGELOG.md.txt | 4 - .../_sphinx_javascript_frameworks_compat.js | 123 - docs/build/_static/api.rst | 10 - docs/build/_static/api/algorithms.rst | 20 - docs/build/_static/api/lifters.rst | 59 - docs/build/_static/api/utils.rst | 30 - docs/build/_static/basic.css | 914 - docs/build/_static/check-solid.svg | 4 - docs/build/_static/clipboard.min.js | 7 - docs/build/_static/conf.py | 110 - docs/build/_static/contributing.rst | 25 - docs/build/_static/copy-button.svg | 5 - docs/build/_static/copybutton.css | 94 - docs/build/_static/copybutton.js | 248 - docs/build/_static/copybutton_funcs.js | 73 - docs/build/_static/css/badge_only.css | 1 - .../_static/css/fonts/Roboto-Slab-Bold.woff | Bin 87624 -> 0 bytes .../_static/css/fonts/Roboto-Slab-Bold.woff2 | Bin 67312 -> 0 bytes .../css/fonts/Roboto-Slab-Regular.woff | Bin 86288 -> 0 bytes .../css/fonts/Roboto-Slab-Regular.woff2 | Bin 66444 -> 0 bytes .../_static/css/fonts/fontawesome-webfont.eot | Bin 165742 -> 0 bytes .../_static/css/fonts/fontawesome-webfont.svg | 2671 --- .../_static/css/fonts/fontawesome-webfont.ttf | Bin 165548 -> 0 bytes .../css/fonts/fontawesome-webfont.woff | Bin 98024 -> 0 bytes .../css/fonts/fontawesome-webfont.woff2 | Bin 77160 -> 0 bytes .../_static/css/fonts/lato-bold-italic.woff | Bin 323344 -> 0 bytes .../_static/css/fonts/lato-bold-italic.woff2 | Bin 193308 -> 0 bytes docs/build/_static/css/fonts/lato-bold.woff | Bin 309728 -> 0 bytes docs/build/_static/css/fonts/lato-bold.woff2 | Bin 184912 -> 0 bytes .../_static/css/fonts/lato-normal-italic.woff | Bin 328412 -> 0 bytes .../css/fonts/lato-normal-italic.woff2 | Bin 195704 -> 0 bytes docs/build/_static/css/fonts/lato-normal.woff | Bin 309192 -> 0 bytes .../build/_static/css/fonts/lato-normal.woff2 | Bin 182708 -> 0 bytes docs/build/_static/css/theme.css | 4 - docs/build/_static/custom.css | 8 - docs/build/_static/doctools.js | 149 - docs/build/_static/documentation_options.js | 13 - docs/build/_static/examples.rst | 12 - docs/build/_static/examples/a.rst | 12 - docs/build/_static/examples/b.rst | 21 - docs/build/_static/examples/c.rst | 13 - docs/build/_static/examples/d.rst | 4 - docs/build/_static/file.png | Bin 286 -> 0 bytes docs/build/_static/fonts/Lato/lato-bold.eot | Bin 256056 -> 0 bytes docs/build/_static/fonts/Lato/lato-bold.ttf | Bin 600856 -> 0 bytes docs/build/_static/fonts/Lato/lato-bold.woff | Bin 309728 -> 0 bytes docs/build/_static/fonts/Lato/lato-bold.woff2 | Bin 184912 -> 0 bytes .../_static/fonts/Lato/lato-bolditalic.eot | Bin 266158 -> 0 bytes .../_static/fonts/Lato/lato-bolditalic.ttf | Bin 622572 -> 0 bytes .../_static/fonts/Lato/lato-bolditalic.woff | Bin 323344 -> 0 bytes .../_static/fonts/Lato/lato-bolditalic.woff2 | Bin 193308 -> 0 bytes docs/build/_static/fonts/Lato/lato-italic.eot | Bin 268604 -> 0 bytes docs/build/_static/fonts/Lato/lato-italic.ttf | Bin 639388 -> 0 bytes .../build/_static/fonts/Lato/lato-italic.woff | Bin 328412 -> 0 bytes .../_static/fonts/Lato/lato-italic.woff2 | Bin 195704 -> 0 bytes .../build/_static/fonts/Lato/lato-regular.eot | Bin 253461 -> 0 bytes .../build/_static/fonts/Lato/lato-regular.ttf | Bin 607720 -> 0 bytes .../_static/fonts/Lato/lato-regular.woff | Bin 309192 -> 0 bytes .../_static/fonts/Lato/lato-regular.woff2 | Bin 182708 -> 0 bytes .../fonts/RobotoSlab/roboto-slab-v7-bold.eot | Bin 79520 -> 0 bytes .../fonts/RobotoSlab/roboto-slab-v7-bold.ttf | Bin 170616 -> 0 bytes .../fonts/RobotoSlab/roboto-slab-v7-bold.woff | Bin 87624 -> 0 bytes .../RobotoSlab/roboto-slab-v7-bold.woff2 | Bin 67312 -> 0 bytes .../RobotoSlab/roboto-slab-v7-regular.eot | Bin 78331 -> 0 bytes .../RobotoSlab/roboto-slab-v7-regular.ttf | Bin 169064 -> 0 bytes .../RobotoSlab/roboto-slab-v7-regular.woff | Bin 86288 -> 0 bytes .../RobotoSlab/roboto-slab-v7-regular.woff2 | Bin 66444 -> 0 bytes docs/build/_static/index.rst | 24 - docs/build/_static/jquery.js | 2 - docs/build/_static/js/badge_only.js | 1 - docs/build/_static/js/theme.js | 1 - docs/build/_static/js/versions.js | 228 - docs/build/_static/language_data.js | 192 - docs/build/_static/logo.png | Bin 52103 -> 0 bytes docs/build/_static/logo.svg | 468 - docs/build/_static/logo1.png | Bin 60019 -> 0 bytes docs/build/_static/logo2.png | Bin 19819 -> 0 bytes docs/build/_static/minus.png | Bin 90 -> 0 bytes docs/build/_static/overview.png | Bin 127602 -> 0 bytes docs/build/_static/overview.svg | 16503 ---------------- docs/build/_static/overview.webp | Bin 20496 -> 0 bytes docs/build/_static/plus.png | Bin 90 -> 0 bytes docs/build/_static/poly4_lifter_A.png | Bin 11563 -> 0 bytes docs/build/_static/poly4_lifter_B.png | Bin 10440 -> 0 bytes docs/build/_static/poly6_lifter_A.png | Bin 10319 -> 0 bytes docs/build/_static/poly6_lifter_B.png | Bin 9810 -> 0 bytes docs/build/_static/pygments.css | 75 - docs/build/_static/quickstart.rst | 145 - docs/build/_static/searchtools.js | 632 - docs/build/_static/sphinx_highlight.js | 154 - docs/build/_static/whatsnew.rst | 5 - docs/build/api.html | 300 - docs/build/api/algorithms.html | 345 - docs/build/api/auto_tight.html | 205 - docs/build/api/lifters.html | 449 - docs/build/api/utils.html | 335 - docs/build/contributing.html | 354 - docs/build/examples.html | 301 - docs/build/examples/a.html | 200 - docs/build/examples/b.html | 224 - docs/build/examples/c.html | 164 - docs/build/examples/d.html | 151 - docs/build/examples/robust.html | 317 - docs/build/examples/standard.html | 365 - docs/build/examples/templates.html | 296 - docs/build/examples/toy.html | 344 - docs/build/genindex.html | 458 - docs/build/index.html | 321 - docs/build/objects.inv | Bin 2252 -> 0 bytes docs/build/py-modindex.html | 292 - docs/build/quickstart.html | 497 - docs/build/search.html | 287 - docs/build/searchindex.js | 1 - docs/build/whatsnew.html | 298 - docs/build/whatsnew/0.0.1.html | 108 - docs/build/whatsnew/CHANGELOG.html | 111 - docs/source/examples/standard.rst | 10 +- 210 files changed, 9 insertions(+), 51902 deletions(-) delete mode 100644 docs/build/.buildinfo delete mode 100644 docs/build/.buildinfo.bak delete mode 100644 docs/build/.doctrees/api.doctree delete mode 100644 docs/build/.doctrees/api/algorithms.doctree delete mode 100644 docs/build/.doctrees/api/auto_tight.doctree delete mode 100644 docs/build/.doctrees/api/lifters.doctree delete mode 100644 docs/build/.doctrees/api/utils.doctree delete mode 100644 docs/build/.doctrees/contributing.doctree delete mode 100644 docs/build/.doctrees/environment.pickle delete mode 100644 docs/build/.doctrees/examples.doctree delete mode 100644 docs/build/.doctrees/examples/a.doctree delete mode 100644 docs/build/.doctrees/examples/b.doctree delete mode 100644 docs/build/.doctrees/examples/c.doctree delete mode 100644 docs/build/.doctrees/examples/d.doctree delete mode 100644 docs/build/.doctrees/examples/robust.doctree delete mode 100644 docs/build/.doctrees/examples/standard.doctree delete mode 100644 docs/build/.doctrees/examples/templates.doctree delete mode 100644 docs/build/.doctrees/examples/toy.doctree delete mode 100644 docs/build/.doctrees/index.doctree delete mode 100644 docs/build/.doctrees/quickstart.doctree delete mode 100644 docs/build/.doctrees/whatsnew.doctree delete mode 100644 docs/build/.doctrees/whatsnew/0.0.1.doctree delete mode 100644 docs/build/.doctrees/whatsnew/CHANGELOG.doctree delete mode 100644 docs/build/_images/overview.png delete mode 100644 docs/build/_images/overview.webp delete mode 100644 docs/build/_images/poly4_lifter_A.png delete mode 100644 docs/build/_images/poly4_lifter_B.png delete mode 100644 docs/build/_images/poly6_lifter_A.png delete mode 100644 docs/build/_images/poly6_lifter_B.png delete mode 100644 docs/build/_modules/index.html delete mode 100644 docs/build/_modules/popcor/auto_template.html delete mode 100644 docs/build/_modules/popcor/auto_tight.html delete mode 100644 docs/build/_modules/popcor/base_lifters/poly_lifters.html delete mode 100644 docs/build/_modules/popcor/base_lifters/robust_pose_lifter.html delete mode 100644 docs/build/_modules/popcor/base_lifters/state_lifter.html delete mode 100644 docs/build/_modules/popcor/base_lifters/stereo_lifter.html delete mode 100644 docs/build/_modules/popcor/examples/example_lifter.html delete mode 100644 docs/build/_modules/popcor/examples/mono_lifter.html delete mode 100644 docs/build/_modules/popcor/examples/poly4_lifter.html delete mode 100644 docs/build/_modules/popcor/examples/poly6_lifter.html delete mode 100644 docs/build/_modules/popcor/examples/range_only_lifters.html delete mode 100644 docs/build/_modules/popcor/examples/rotation_lifter.html delete mode 100644 docs/build/_modules/popcor/examples/stereo1d_lifter.html delete mode 100644 docs/build/_modules/popcor/examples/stereo2d_lifter.html delete mode 100644 docs/build/_modules/popcor/examples/stereo3d_lifter.html delete mode 100644 docs/build/_modules/popcor/examples/wahba_lifter.html delete mode 100644 docs/build/_modules/popcor/utils/common.html delete mode 100644 docs/build/_modules/popcor/utils/constraint.html delete mode 100644 docs/build/_modules/popr/auto_template.html delete mode 100644 docs/build/_modules/popr/auto_tight.html delete mode 100644 docs/build/_modules/popr/base_lifters/_base_class.html delete mode 100644 docs/build/_modules/popr/base_lifters/poly_lifters.html delete mode 100644 docs/build/_modules/popr/base_lifters/robust_pose_lifter.html delete mode 100644 docs/build/_modules/popr/base_lifters/state_lifter.html delete mode 100644 docs/build/_modules/popr/base_lifters/stereo_lifter.html delete mode 100644 docs/build/_modules/popr/examples/example_lifter.html delete mode 100644 docs/build/_modules/popr/examples/mono_lifter.html delete mode 100644 docs/build/_modules/popr/examples/poly4_lifter.html delete mode 100644 docs/build/_modules/popr/examples/poly6_lifter.html delete mode 100644 docs/build/_modules/popr/examples/range_only_lifters.html delete mode 100644 docs/build/_modules/popr/examples/range_only_slam1.html delete mode 100644 docs/build/_modules/popr/examples/range_only_slam2.html delete mode 100644 docs/build/_modules/popr/examples/rotation_lifter.html delete mode 100644 docs/build/_modules/popr/examples/stereo1d_lifter.html delete mode 100644 docs/build/_modules/popr/examples/stereo2d_lifter.html delete mode 100644 docs/build/_modules/popr/examples/stereo3d_lifter.html delete mode 100644 docs/build/_modules/popr/examples/wahba_lifter.html delete mode 100644 docs/build/_modules/popr/lifters/range_only_lifters.html delete mode 100644 docs/build/_modules/popr/lifters/robust_pose_lifter.html delete mode 100644 docs/build/_modules/popr/lifters/state_lifter.html delete mode 100644 docs/build/_modules/popr/lifters/stereo_lifter.html delete mode 100644 docs/build/_modules/popr/utils/common.html delete mode 100644 docs/build/_modules/popr/utils/constraint.html delete mode 100644 docs/build/_sources/api.rst.txt delete mode 100644 docs/build/_sources/api/algorithms.rst.txt delete mode 100644 docs/build/_sources/api/auto_tight.rst.txt delete mode 100644 docs/build/_sources/api/lifters.rst.txt delete mode 100644 docs/build/_sources/api/utils.rst.txt delete mode 100644 docs/build/_sources/contributing.rst.txt delete mode 100644 docs/build/_sources/examples.rst.txt delete mode 100644 docs/build/_sources/examples/a.rst.txt delete mode 100644 docs/build/_sources/examples/b.rst.txt delete mode 100644 docs/build/_sources/examples/c.rst.txt delete mode 100644 docs/build/_sources/examples/d.rst.txt delete mode 100644 docs/build/_sources/examples/robust.rst.txt delete mode 100644 docs/build/_sources/examples/standard.rst.txt delete mode 100644 docs/build/_sources/examples/templates.rst.txt delete mode 100644 docs/build/_sources/examples/toy.rst.txt delete mode 100644 docs/build/_sources/index.rst.txt delete mode 100644 docs/build/_sources/quickstart.rst.txt delete mode 100644 docs/build/_sources/whatsnew.rst.txt delete mode 100644 docs/build/_sources/whatsnew/0.0.1.rst.txt delete mode 100644 docs/build/_sources/whatsnew/CHANGELOG.md.txt delete mode 100644 docs/build/_static/_sphinx_javascript_frameworks_compat.js delete mode 100644 docs/build/_static/api.rst delete mode 100644 docs/build/_static/api/algorithms.rst delete mode 100644 docs/build/_static/api/lifters.rst delete mode 100644 docs/build/_static/api/utils.rst delete mode 100644 docs/build/_static/basic.css delete mode 100644 docs/build/_static/check-solid.svg delete mode 100644 docs/build/_static/clipboard.min.js delete mode 100644 docs/build/_static/conf.py delete mode 100644 docs/build/_static/contributing.rst delete mode 100644 docs/build/_static/copy-button.svg delete mode 100644 docs/build/_static/copybutton.css delete mode 100644 docs/build/_static/copybutton.js delete mode 100644 docs/build/_static/copybutton_funcs.js delete mode 100644 docs/build/_static/css/badge_only.css delete mode 100644 docs/build/_static/css/fonts/Roboto-Slab-Bold.woff delete mode 100644 docs/build/_static/css/fonts/Roboto-Slab-Bold.woff2 delete mode 100644 docs/build/_static/css/fonts/Roboto-Slab-Regular.woff delete mode 100644 docs/build/_static/css/fonts/Roboto-Slab-Regular.woff2 delete mode 100644 docs/build/_static/css/fonts/fontawesome-webfont.eot delete mode 100644 docs/build/_static/css/fonts/fontawesome-webfont.svg delete mode 100644 docs/build/_static/css/fonts/fontawesome-webfont.ttf delete mode 100644 docs/build/_static/css/fonts/fontawesome-webfont.woff delete mode 100644 docs/build/_static/css/fonts/fontawesome-webfont.woff2 delete mode 100644 docs/build/_static/css/fonts/lato-bold-italic.woff delete mode 100644 docs/build/_static/css/fonts/lato-bold-italic.woff2 delete mode 100644 docs/build/_static/css/fonts/lato-bold.woff delete mode 100644 docs/build/_static/css/fonts/lato-bold.woff2 delete mode 100644 docs/build/_static/css/fonts/lato-normal-italic.woff delete mode 100644 docs/build/_static/css/fonts/lato-normal-italic.woff2 delete mode 100644 docs/build/_static/css/fonts/lato-normal.woff delete mode 100644 docs/build/_static/css/fonts/lato-normal.woff2 delete mode 100644 docs/build/_static/css/theme.css delete mode 100644 docs/build/_static/custom.css delete mode 100644 docs/build/_static/doctools.js delete mode 100644 docs/build/_static/documentation_options.js delete mode 100644 docs/build/_static/examples.rst delete mode 100644 docs/build/_static/examples/a.rst delete mode 100644 docs/build/_static/examples/b.rst delete mode 100644 docs/build/_static/examples/c.rst delete mode 100644 docs/build/_static/examples/d.rst delete mode 100644 docs/build/_static/file.png delete mode 100644 docs/build/_static/fonts/Lato/lato-bold.eot delete mode 100644 docs/build/_static/fonts/Lato/lato-bold.ttf delete mode 100644 docs/build/_static/fonts/Lato/lato-bold.woff delete mode 100644 docs/build/_static/fonts/Lato/lato-bold.woff2 delete mode 100644 docs/build/_static/fonts/Lato/lato-bolditalic.eot delete mode 100644 docs/build/_static/fonts/Lato/lato-bolditalic.ttf delete mode 100644 docs/build/_static/fonts/Lato/lato-bolditalic.woff delete mode 100644 docs/build/_static/fonts/Lato/lato-bolditalic.woff2 delete mode 100644 docs/build/_static/fonts/Lato/lato-italic.eot delete mode 100644 docs/build/_static/fonts/Lato/lato-italic.ttf delete mode 100644 docs/build/_static/fonts/Lato/lato-italic.woff delete mode 100644 docs/build/_static/fonts/Lato/lato-italic.woff2 delete mode 100644 docs/build/_static/fonts/Lato/lato-regular.eot delete mode 100644 docs/build/_static/fonts/Lato/lato-regular.ttf delete mode 100644 docs/build/_static/fonts/Lato/lato-regular.woff delete mode 100644 docs/build/_static/fonts/Lato/lato-regular.woff2 delete mode 100644 docs/build/_static/fonts/RobotoSlab/roboto-slab-v7-bold.eot delete mode 100644 docs/build/_static/fonts/RobotoSlab/roboto-slab-v7-bold.ttf delete mode 100644 docs/build/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff delete mode 100644 docs/build/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff2 delete mode 100644 docs/build/_static/fonts/RobotoSlab/roboto-slab-v7-regular.eot delete mode 100644 docs/build/_static/fonts/RobotoSlab/roboto-slab-v7-regular.ttf delete mode 100644 docs/build/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff delete mode 100644 docs/build/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff2 delete mode 100644 docs/build/_static/index.rst delete mode 100644 docs/build/_static/jquery.js delete mode 100644 docs/build/_static/js/badge_only.js delete mode 100644 docs/build/_static/js/theme.js delete mode 100644 docs/build/_static/js/versions.js delete mode 100644 docs/build/_static/language_data.js delete mode 100644 docs/build/_static/logo.png delete mode 100644 docs/build/_static/logo.svg delete mode 100644 docs/build/_static/logo1.png delete mode 100644 docs/build/_static/logo2.png delete mode 100644 docs/build/_static/minus.png delete mode 100644 docs/build/_static/overview.png delete mode 100644 docs/build/_static/overview.svg delete mode 100644 docs/build/_static/overview.webp delete mode 100644 docs/build/_static/plus.png delete mode 100644 docs/build/_static/poly4_lifter_A.png delete mode 100644 docs/build/_static/poly4_lifter_B.png delete mode 100644 docs/build/_static/poly6_lifter_A.png delete mode 100644 docs/build/_static/poly6_lifter_B.png delete mode 100644 docs/build/_static/pygments.css delete mode 100644 docs/build/_static/quickstart.rst delete mode 100644 docs/build/_static/searchtools.js delete mode 100644 docs/build/_static/sphinx_highlight.js delete mode 100644 docs/build/_static/whatsnew.rst delete mode 100644 docs/build/api.html delete mode 100644 docs/build/api/algorithms.html delete mode 100644 docs/build/api/auto_tight.html delete mode 100644 docs/build/api/lifters.html delete mode 100644 docs/build/api/utils.html delete mode 100644 docs/build/contributing.html delete mode 100644 docs/build/examples.html delete mode 100644 docs/build/examples/a.html delete mode 100644 docs/build/examples/b.html delete mode 100644 docs/build/examples/c.html delete mode 100644 docs/build/examples/d.html delete mode 100644 docs/build/examples/robust.html delete mode 100644 docs/build/examples/standard.html delete mode 100644 docs/build/examples/templates.html delete mode 100644 docs/build/examples/toy.html delete mode 100644 docs/build/genindex.html delete mode 100644 docs/build/index.html delete mode 100644 docs/build/objects.inv delete mode 100644 docs/build/py-modindex.html delete mode 100644 docs/build/quickstart.html delete mode 100644 docs/build/search.html delete mode 100644 docs/build/searchindex.js delete mode 100644 docs/build/whatsnew.html delete mode 100644 docs/build/whatsnew/0.0.1.html delete mode 100644 docs/build/whatsnew/CHANGELOG.html diff --git a/.gitignore b/.gitignore index 47530eb..26a192e 100644 --- a/.gitignore +++ b/.gitignore @@ -20,3 +20,4 @@ mosek_output.tmp *.ptf bin/act docs/build/doctest +docs/build/ diff --git a/docs/build/.buildinfo b/docs/build/.buildinfo deleted file mode 100644 index 5f839cd..0000000 --- a/docs/build/.buildinfo +++ /dev/null @@ -1,4 +0,0 @@ -# Sphinx build info version 1 -# This file records the configuration used when building these files. When it is not found, a full rebuild will be done. -config: f1a2f84a0c1211555f287d37db8023c9 -tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/docs/build/.buildinfo.bak b/docs/build/.buildinfo.bak deleted file mode 100644 index 4b8e038..0000000 --- a/docs/build/.buildinfo.bak +++ /dev/null @@ -1,4 +0,0 @@ -# Sphinx build info version 1 -# This file records the configuration used when building these files. When it is not found, a full rebuild will be done. -config: c20782f7044a50dd9aea291fbf376105 -tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/docs/build/.doctrees/api.doctree b/docs/build/.doctrees/api.doctree deleted file mode 100644 index a80678f28153336299762ad91d3abf017f578ede..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2870 zcmZWr!EPHj5Or)zmTbwgounv`xJ^)`Ns!noiXMub+9sFOs8AF|PYDQWNr{BHd z@*zNbND%|Ph5g???ylC7Ye4XFI2;b&yf@@uoqwP0ZB&0@I`4dX6`9y3{) zbM51&`1J4iK0XP3OD~)$ZN_8RfJY{zVwUUpHirG=?xk|4&H5e3GcS#9my3?*ik-Ld ziRg!pmtOIesWAHS*VhlIW)E`1N`(ZHD?GP<=ZloW{~bQWI;(C$k%N!oF!V{AwAc#W zCf7;WR#NjgDW^2-Qtz#tmL6NAGi^!cQvN%cqRzpH?~bN<{ncY-aXpyQ?A-EM@+rfP zr}H!w#Yo%}194w$iR18cEKJVFGgju)IoIP?4Tx_1T3boSGszVr^HMTCE=*y^NZ5_* zM8~v{r`F*lUz}~0QyjjRnY=KiW-Cb5Ac_qnU@~v{DvHhAmpGVs2>8Cj?-72F@q3Ej zy|9Hna9H4FWp%_Slduoln5wz4(u>^1f8r$UC7Y5n&uwk!Cqq?W%=0jiI#VU%Gns0Y ziu!~2Nxb5rm(vB~g%|N`6QI(f;y~!XG}>cV_acVvxiZsu6}mz)2KHQqVH2%2^fd6} zma}-a5q2xGIHT1ie0M>@>-4MPau@M)DV~XM#j$t}2)9v|F-k60;RvG!wUY}=i-Oxo zR}o6MJ#x>b{;$_@oy&ule~mb&73 zxZ^F=PSJ!TDXf`W?rQ3Gyzx}k2sJ(xU}f6xR@l!Wu|m`iw$Qp5{g3jy1+3Rghy5!>w@) zdvyu~`<}yLw;7gJVKhWVNRn2XMJktQ-Q~t1Vpd%0ezcYqFF#_G=b2dY^=W<%O}HDE^KE&dsnZsA`9uaL5-DD0=Ek zw{+@+4&&2uj_vj@sMSCb9+uM_mOe_B@pPn=pVYvNaGe@n?2w}etdY!;>>HYPI8!N*>Isl001n^Nf zPz*yw^}M8W4!9Y{n^14KZFy!aBTzlp&~ug=%OrF&qh~lH;E-&|2GK>gDZL@rrm!i& zwILd2L0Ucn)yg2zG_0m71sqkDN)4&>*QUbpk{Pnd6PphBqA-q=)s+=RGEd$~Cu_cr z2$POZRXRwM<<3$k(A)rraZpAjIs_dyZe-c+!e{9Vn>cPOVRD_KG1Pkx{RwrdhiA9K zVGU zLr!;-XO#dviRU@W<57+t>?e=D`3`vQ+gWxae6n1J|9Tl7%B6{~=iHu3?q}5==mulq zbA`?No=zblmO6Sb9D|TKX_eU?fVd(t*F&OAM(dj-9A|M zDr|B6E; zo#v{g_CxZhZ9X-sEq~>D=Z3NM?yp7cFL$jL9j(PjYqdT?D|c_kYG&{TK*PxJ5&|o5 zon%HS0E;u=zSw!$*gxU$AL4HyKVF285#DeP^{zK;`^K7iuQgXC+iTt-pvXK`YnP?g N)^ve%d6(1E{{VqCcS-;N diff --git a/docs/build/.doctrees/api/algorithms.doctree b/docs/build/.doctrees/api/algorithms.doctree deleted file mode 100644 index fc3673f1d2f693fe75bde6388322b93cd3dd557e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31334 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 A>Hq)$ diff --git a/docs/build/.doctrees/api/auto_tight.doctree b/docs/build/.doctrees/api/auto_tight.doctree deleted file mode 100644 index e555c1245043f9e08927cd428e167bb9ef86924f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33363 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 diff --git a/docs/build/.doctrees/api/utils.doctree b/docs/build/.doctrees/api/utils.doctree deleted file mode 100644 index c8d6c79dd470a00f5e25735928af2e2f261df75d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27507 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 YjaIiw<86(m%;_fS2|1+-H{Qbk0!uQg&Hw-a diff --git a/docs/build/.doctrees/contributing.doctree b/docs/build/.doctrees/contributing.doctree deleted file mode 100644 index cd51827e1efe03a0a33f501c1f5a1733004a4bb1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 191792 zcmeFa37nkQRVV6IOKX?+{c|g^s_pJ-$#E7GcjC4rFGy<1YB{lyl}dHh*IiYrt}53e zbz2q$G6X4n42Cped4UWJ5GD{Xk9jL zSyO&vD=xIl^_nYQy0NsOwDHVZrnEV^v0ZLg`dZPiv(erMpU7OLv#9FWr+Ioi5dv zXL(^Mu1y~@N zWOlh2EtacsR!Mqm@)}ASa-*%&+Sa+!y`*UAK9I3=KRC4q|Gydk@5TQUAW`X|(p2f5 z(j;1OgC!AKvqj~|3&KvDklgVUn$xaFju0{5P8>gR(jvZ24v*ktKyY*ES}U=(rqaw{ zWSy`iJGuxb?YK7CUg$I_W;r8NrTJv5O%mxka!se^?EzkfaH}|){<+d z*OD!YL=F|7MTRl++G$qtwyj++&@l0OUd>Y`bQ&Is4uhIw*c@iO^K_qq~y+*+ohcCE~w8GF#TsP+1iX7^=3O)jnBo^ zwIkOhW2Jo6z22DYidV{@V>{pOv}~pulN*ciLT3rpZ9kuH)<8w%XvXXqJm>g?f=nBH7$&FHXHh*B%ru0TBkw&>mI4_zgbooql0R4Rc!RWxWV*;dWhmOA;R800SE{W@sT z^r=OV z2-GYWtuU1~B-`_yc0K2llIzM4)osvUjhqu_Fhvr|kmP19U!_#+kQ8vH)}rM2q(&?5 z6zjQ_WeVfYc%@Nq#ksJgNLZnrJ6CR%Ror*vise>*p-MU!EH}E2HkoV%En4VUc^OF{ zaVA@itrLxXE1ytFD{e9m_)2I+h|3m?R_^u4waG4aR!CiK2|`>gFPGbE$9C>bwm0HN z4m~VJA1?qVq?joSdEm}&mE2xxw;Qbk)6+<9WgDyQQoWX~HGZ(&YB06BB*cp2Pn zgPWU>KK15(kAR-rn~Q}m@J#XGAF$xj@$(e-vvD(9j@ye;2b9Tlsl8l9Wt-di1@ypT zyR>#>Q*saFc{%4gwrfDH)u4b~PIk6dYwi3>u2fzsRq;P$|AuOv-DYcRIgd{IVh0+b z1w!2<@A{gn)(d$<+ItEmj6DS~Ui&JjEF?tfvz-R2;FvE1xltjPAwBg%xwZ%yFgj&7 zl}xL%(3P#cOwq5_^V*R)N}pYW$Sg0!MfCnvU{H$VHtM*gfLv#D@p8Ug&A~cp#xho4 zN_H9h0*aw>q*?}JlScZOR?O^Z+8#w&q z52~Y*ULam5mo?S5*4k?)sj->`Vp94s)KmKL(x*#5QToZ!PnCYU^fRS{a* ztstdPKZl`g2_$h$0Dxr>tdhqN7G^CkTC~H|bLIHFs>Cq0mT%OnF^tI+UTi_DvkZB} zAa_@Qg?v!+vzlMPP?T(0UTt9{%{QSZFh*-$D3iu2EY3Cn$H^wElGjQvCtI{1Ksz-> z&1|&&A`b$H3G7FZ(u>K~8pNiBzDFY(qO`HmtXF^l*a#cu;BoR3NR=?eCpT$I1YW5< zT1OShE>l8qYHEMItaIzD{+s#g)4P1+?do8&hW-U4$6;ZK%z6P5dqfMdODaP!n9I1q9JIl4+ z#Ooe>a4nx~Eyj!a4s4Sq%Q$!?lj z^#$@6f&e~B&ii^(bFC8SqyWL@4aGV%8Tj<=m!XIGNyVZ?b=p{6QaejDAh6o)l(%CN z<|_tu$c+D7Zz%P_qV0AZYLOTvPHV>8*wjMXci0TMg=V>kzKU`6Y>bi2m|w(YSF6*2 z-3h+AM8MfC7+Wi?z1omg-wN6Y7a_aL%NT==!ODs;m&wJAa=u*9k zc`t=^YuxB8ut}lc1SYj=CyVigEiFj#!l^Q zjmjn2BHvmCfm1mOk4dsgk}#KF(|4^&2EVllQ?E?*@wQ#^qEC3ERcnKJ-1cePY3Ah$ z=yA@rRa~uRbIIETAXJT!&+83_Oo3g7nVrqh!XOc^RW=i4trNO6C&m})cC+Mz;AxUI zF0U~tOJ|2+OYv6I56VTbgpj}(q~3;h6d*9u3z$5LNGM4(9YeewS@RgG$D|6wwVh_9Znld#leEKscM5KIkmk9XNp33CtJOT_B~aYw%1b(p zxSVW;2CC=kwJLf*$5d!_?q&hS3{bE#S1lK&`TB6SA=a~eUj#U`jjB`LD*@YfN(yJW z<$}d9lVDmSDQn3>m#1jCTqCSv{w>q6SX=ZCVH%i2kE&LuVRcUHoZ~Io{rjddZ;Gd2 z;h&}6o9;1Vrfns0qGW=`Z00Qz$t~J848OTfgN_D_d14CO(fffs?z9UK6K!D&onry^ z6SSX!gJBU&tYcP)3V;s3+$4ZhcT+^loKjsf$TVW;DD_QTN^X{%J}D>kOs@Z<4}LlH zy?ksns&E&mpkYEIX*7H61knN!K~?)fCK8vETeZ9xYD~%*vjR3nn+AlU$tI$MVD6Z2 z7D}{_v<{iknG%@D3ak*yoGCB$dOPeAr;6yqijKfUy=tDKp9J63OuUqAl{EGdnl-d} zZY4N1NohJQH`*Aw@eR1$)%&U3(ou|)vHOG1lx#61Eev2Ue7GaX)Qp#5teYHUQdj}= zQQ@{%Ikl3q4+LeIh649iDhWA6ft>-Zg#SunXj1NTvZ0zFL*z|)BjztefCxyzb$Y}9mM0Q4S z4KBlVI|uETMJ{H1jE>&r=mOI&M(unPmbPS|BNP$|tCm?^K1KVY1solmpN}lT=m{1# zJj$gh*7mkp z6%<`DD%T?Qa0YA?qwydRRaT<(K`NtKds5I>>`#auVvb2P1YHT9J@9l9-oSV=qOKtX z&2^N@f(!?LCk5Bv}DChb&^p zH3HRqUjF>N7XOrKoT)w6V#{9>ndOKi%2w>`?CwTBpYb5cWthZGb zgE}b^8K1>=BJvpBAS)(FX73BNy%Qm&MaBSyQ0d)*`cUF4B}qIoNwdBDaug!2uLji+ zC`+ZAuQ0Rp$YofSht9mICS@C)Rw)w{Pv<2zs?(GLt>}RV!pgewApC$y3SF9W`r$Ka z&^= zS1%VM`g^CEotmgg8GbRia(?OX3@Xk#nHqngHlFI%K`x*dyk%P$z2nTj$!Kc7N`J~C z2y((0fRn*%#GEl%;0MYQ=~|uM9-aJX`@JJMvFnLCorO0IGd(Py!cRo|TxW0Uo1zoQ z&S|d8MsUFB^g?GH*5!ifsm^qCh7&qGvg+~bUJ7)&>JO8R2Zg!TCl*zl8@x*1He1{H_U+b0iCBN z@3bpog<>sRX>s0gu9>aH?de)$dD`TC43p*7Tc<(!spaMBRDmFo8S4`knD+xD+ijY0 zV{j?tx)(B7c70(2-X~WCYmu<1R>cW*-3zDr{S3al;ut6BRWr^wVEh(Nf=rV2j2pIr zWIJsV7Z1cW0y5gP4!uX0lil{6GMv-3pi9Y}F4fPm)zB8l_HFhv)|4?pM4C!d{t5=D+4 zeXLsM!XvV8;acX3^}1|;Pp%{G8BG=k2`0z-h6OaRS0?*#sNSWCoL=kGGCb{=-d8)z zH8lASO>Ea25+^`!D~W^d3d-KBAA3Crnl5u|^+{b<_$ ziwztvOdY12$wH5{IPNEsyL}#n!9ZxZIG?j9J^5Jkr^TTg<`c5yIyGHADZdo6FYO87 zXdsG#(aPmpSnQ~uMU(~nSrBD)(ug2kPVQvFa{g>=MUl&X;(6dw!fx~eS<_An`A(ah z5;B|EBfq=smq3Cy+2womP5Zf4hohv8fetG{9n^li{ZMGu;Tv}A{3JhNBAiCM4`(ru z)Qu0$OnvG2L+{6mntU~5CBEFysWFP^CQ0U!mK#ZAaIvt=3PWme8AC`1S9RKLE*b17 zFlr=-ri1wHrl%7szAJfW0plM%kZ0pn2$KZd!4(Q8AQm}@tvuBifgL&QWga641UpUbN!eJI#F=mA2gj$1Es zQAPlCzxs@G)WMzFi_qL$)_@NkYj$Q4^K$YglWAB3#!WsmJhJaF$cv*le80L3h{ZGX zk7`_ss|cRK?2S=5MJjZkT#V1rUn$E*h)tX7Kmu;}pG_&dj+0!ArR(kfv-pQG;`o%a z3ufgnsDqOns1VvHbIEN!uP#tp)rCRGe}exVPS)nKi48)zTm45V2V+b0d9q`=(`rsH zlxx$aG9yFQ!Ya79M{bzByIfxT0n6teu#I~{|B%S4TpJxgR%K|)2pQ9UXtD4loodcn ze;~+<7;!*!S(=vMA6Qr>O~xXuv(@0GM_|m&VRATh?V|M|fqmlD+ss_Ss#wH0n{mrWb1{ z9FGF+%( zxA#K9*aedkjgzhb-Ib=(Y&)!(t)qcvp@2P(buZ zO+VdY%UGW2D*cg(TzN?N_p~s?j1+a)&GF76>_KG<7jv5I$BFz8>^2 z_#%Eo1k-<$sgxLeAVLhm!U~LmCgUY0!-WAm z#N}ZNO&kPye}|0?%PrOGOBi*4r|J+i;&%5DW(`)f!f*GwZ&sY(W`(%G+r)eTeSc35 z1gD&%g}QF0RwFKy(ZhmFZ*q`0Am@vSl98oTF@ob2M0+#lGOV#rK1Oge(*x@P3k*aA zh@^4?bT)H1EQ$gaA>o1=Yi#>K_KW{65*&3SPYEQ@CMFy82PxgxNH+{ zl?2-ZeSGNGVs0RxtYxAB#GG8-Cg~U@>Et=vqD?P03#92T`IJu1VbX!Ym0f$Me1rpWo<)j=TH*a53OovNtc%A;0hu&#q+g{ zX&R+wwf4))w zd=vguzL`HCP+dgrQa^S z`k}Sbe<*!U{{BaV>O%IhKLUxrQ~G@6Gos5%zl)u5%=dex-5`;f=bo;2PdDJHawC4E^tVf`l?`~;r;T`;GcBuZVqV6d z3A8c3ZLx1#`L>NeN`}e~JiC%R@uC2CG0SfJ2#lNXpt#-4^jr92%HN7-ZNP2r>2^G6 z_B)vKPW%Ykzcp9dfHvR7#Jicuw|nrQ0Pe-pWl6h_IU<|me!h*{w>@}J9N&beBi9Oo zZ)TPUn1w{m;z2=9<4H5`b7}kWq}V--r^;LKBc&d3>2Jl8mVcXjdb|7j4m?%92tQKl z0N>te-wxwJ>ND|xblppIH-wUneFEQItYqaWydm*P{E=sy@H7*?*rswUmiRqUrfa3& zHrY%BBE~0%xR*X>lQk02Ek~4IwjWGTB-BS4J3Yc8rkkM`+URzR$`NA0@JpL;tUF=O zCI~r><84BoPPnIMnBydVBz>N5r|jF$pfgr}mOq9V@8##`?C0n4aO8R^_a%5#ww-1c zC*LpNO<8<~nYEJlF$-5i(ru@Kr=e|^Y<+oV3LCi4olsyx(Zj05d|u>_=>toAE(Hl? zK39B#jjxmqxXGPnbAjv>h^(!lixmc>k6eS(NBKTVvC1;)biKJo1nM4(N+bOGEI+&_ z`1&HBn?XX0&+Q=LJfByBgjGDd>R!UjWlNF^%=L1R^&+3YG)VX|JYTZeKM=lrIdgqQ zkoEoH*AL>wRrB}4FJBpc`4C5`F~F7GJk`_pn=v zvygu@$X59=yj-gMl8m>N9}izXjhD;z%TMr&^zom>Q{|`dBX2*=x1ZsU0r9hZ{wF>m z*=m-YYH(U3I&o8@2xkc_9JpAZHFxM&+rebUQ~E+Orm?<=@PNnLZ58UfL#Xo4P+5B| zFO2v(JnI1V&xyik@FVFzj|UmHY=zV^SiLC1Cn6dCg)8_k@pMVjegRLFe}x};`@is@ zd4G}V|F=#5fB5!G_U)JX_OI>RKjjgVyO zZT=lRRel#glK%U6n2@JGz>`~Wl9WG0iqhkc>{GIt3q~6AjF~I=xIy{2mTV36DW*=P z&*hI?Yq|EHEP%=%+b8UZ!`uUIa~Os2d72RGP+Q3=kE}m+3y-Z7wU)& z6#>IPjsiC)Lz-Yw>vptl$I7ijjF|Wumit=RX{hq_C%~ujr}&X3e}Qj*X5aoC4@$KE z%=G_a)BgewN|^uO<@m46@t4d&+vmUW?Z4Z%|A7bXTGw!ly%s-`>pDDW`t?k|!KUBH zw+;4fBi}aJw_SKp<+7XUH`(-?`F4wayOnRZ*|*#Apk?mBlVX0Sd%DYgy<5_V|2^*M zUibAro0i<-efehP!dO?yX7>eVc_m`m%BR5}yxfnM$~b>a!X7@qDM)xTo^5t`B;1+` z7CXSjBKE;KDVx&$eHPRMLCMPA@Fjzn%Qo9Y@FiTdfk&pHYjiNv6uWS-MK?fVZ>0UU z!{cVGf-Oe)pTcs)n$32X&t}&_urS1ZHdst_4GoroTrPDspRtfC4+8PZL;Nwco85tj;S-w4P-wyKakbOJMwuxI%}b@O}hs6*O&ndLc~@556ihabV>{d~*Yw*|fx>|2pP^}jkxTdYVN6y zC)F+u_w*v3v~f+B*20rQX-gXE(UCMhopVp;-PaZOwCbK-a!(iB)64GZqI>#MJSlU( z%sqX;J$<>$_Z4_jE%`w_RsJ4+gi{~JgO>klrYAQ2Yxwr}`D4WUYw@fZUy&zBMcV7S z94_K{sr@>__!|@Eh=?sD0F>eWQE&COlQX89##VxA5(Mvu_{6gTnY$ z_w;Sd@o}5uJMo~fzl-VLZPP!&x9_oU{|FBX=aYCc^SkfGqZa)>JXJo0A3@>!@t}nG z0r&JOo{oG*KK~#dEB`xwXfHbTgoTLM+Xv4vs9@rcrgWnGIITk?XiEh;eo%MT1J9p_2_bX-3YfDSZ~_*XU^o z&e+*_!k9hwJcQEE4L(ib&r1Kf^cRrTo3a0ryOwpG%PzB*{<9p2C2Q<(H{&d`_YSwn9+jYjVoW~xI7QEwFIo7#9102fJ`RWqlYuhC(>+y^n zT@ISY${jWZHnDb&11idxL%1)^`T`bE;Cgl`c1t$^Y#~I1d%#7Hx3L#H*mnX@@Jhdu z?3CC9E(BtP6LW>`_>FXN%JCMPPt;rGl@oZy`4))IX_RFT{#W9-iOSLqU|$12Tt@Yc z^cnIlgKM_`_3K0h zRpoS+jgT5&egPk`Fk)FpE{bm&EL7&SSX#Jnj!#1JRXz!cU*?lg^UL@or27g!34K1q zCn3aTK1rJsK1sV?;gjJ15k3i;ALSEqs(dqk&}~b==y^aCmKUTldGZuH*5WJw?P7#7QkjHoMbVY_fJHHA8bx?KAHOQmlveM{+^=1SjI`grME=SmGY z@W1DB>64dBKXAEp7WUIOTq=E6>AOp>mi{r$l_*`na=~|EU-Kp|*rA`xnwv<-hc`a- zuXb*H=xrN>=O5nq;zxGN8~Og>jrV=Y&GJUxe|Y0>{*Jy;o<6+s7q{KQZyg?-5gtyp zg&VBxDsHmH#EBphSdQ(JZT*PDhaS3~%>Kw4HAzNlrxLvb<-VGfrFOT zk~{l+=g}zq_=-p?p-iN5(H_S#rKmruP>Cnyn?TGA&Z}oKiCaRl5;Oc~kV}EpzMqrx zt+XmB@!;SRJn$s08@wd*I#}bZ8*aOmCNS?S(jD2NvU}yG2OM=6RJNl}Wq_<6f-6yS&6kDIs(%agMVu0IG|ak7%i zpFr;;agGCzH|ye_a70Hql2AuD zHd{wHVyq)3Yw096APO>I{pMuLLI?Uy_u#mL_S~_OIG&T6b0p@e=WC{PO|r}G;bBBe z_bHx6o&dxJ?eqXySK9Uup$vPn3DmfhY(OO)tWnEAfWuHFh+jQc8*pG}Wg5UB!IPxJ z`Vw4uP_yoptd;xm$DZS9nsg1$NY!ra8^jY`c>?T1l`m%TL1%{o1sa;kMws=oPvOj3 z24NRnR`Q1s4U)2RnGl%dj1Sss)R^7ok*T~F6<40;&uRSN)EO5(gCTt*_ugWRhN?KI zn?G9z5CqGhNQ~4QO64M)R(RTGz`BG@8gzmfS457Csr;EJ#4#K}=-UCCF@N6HQpp2_ zjvSDBPjc`|6)Hz{dv>ff(m}Z=33CYZBIH307P0w zGL?sV(klCUk|_TJmEwnxeLZd4U;e3k2h0Bl0dp7$jr@N=vi50i=5@7q^DOM3Q*r{F z(}CZ0by}K??V*v?7T`gr|Blfc{qaGKejRPzoNP3k3B0;6hed<`{pj&8hR}m;`wa3x z(Er(xwv8wx$*w(W31&Te0t)`@uv%_vF^bj%_?hrk96kg*jWqp~Kp0V)M(aG4p9joz zw*x)za1F>JcqliEZ4WqhH!fx-{7C)<6kM-o1@!&nVJ+`F2=#Qrc9`|E8g>8D2nZOcs@z6`s_K6ItOn`_WMo)BtHJf+h(i-5 zUgEj$or(7m+7Z<-48;LXqenKbFP!})jtCB(b?pbt^{f|)g&A_PlC{r}^V*do+PdjD zT=Cpu<_FsOtJBV8^B(RL64-2p@w1#5y~W2y$Z90!i8zW>LMugEtf6F`<4%A=jN%75Bi4CL6=+M~5_OM17G&c7zI-VzMEl0?GQ}VU-RYseWh> zfnU3x=}+K0f+mF$Z*Uv61B}KIgKNl*fWHdTHlFW_-)&%=pG3jTx00501nP z!8GK?+OX<}a^vfUKzO6M(W9SMLQeei(K+!?hcskVPK>6XRzfcP%&@A5a^WY3KzO6M zaA(*jWWNHUIIEa^h0OTE=*;-zA?+EJ8B;^MMTl(3lRq4W!BC$3-Vg|HG*9jedD4=| zRzxl0r2ClhsUc(T-#qdtelN0K4U6jGp^WLlIONVM^FRJp;+y z=!`isq&-)!$Arj+Jb7vu219vrcnE|Zo~-Z7Gj2bfPOhKT%xPX7VftgBsuy4+r~_R? zqkBcR&PxR_m8v1cyyB_~WmFX>DN_DkY zn%_MFHH@Z#E zlajSh7wWe%F}ihk2g07sMiRXU$?Z?`D`3BPby}X>xySEXX-#39>7lltqG9@$Cu*zr*}D|&Kf0|Wz7{{FCfhw7H!83G~D zEuR}9tI-0=w~@5K&k58%{2X1zGf&}Y3iuu5CNS*&YnE4JBhNW(VZ%jGxC{~(5Xh;E zF7!IH<*Ib{9b|V>5_3*Hohl>B>Lm&j=|8B|JM^Il654IP} zd7Q4Sx2%NpUqNl_jYa|eJ44zqD*fG*Ge!Rp!I1XNVYLpWeSHXoH=6dF87L1O5t9A8 zMko7s3_*WXvftgU^JQ13!7Zft$A?uol;R&70^yCO`0dU7xwx8>i-Yu-L|k)J?t~2Z zrO_Gii$hv7Dgz$s%Ygo!)euzx<7Zf5mc;4F{fq}-{eNnPr?Y7?WRQMlzwQmVVQfLMPq0tF1Q{(OY2!-zGy*4=zE);0glnyUx3> zQj0h3;ayk+9q|6q(cAk)BV;waf18r#b?B7w`M6D7qfR4Q#)9EloZ?%EYdEu|UW?>n zu%@Tb!d0Tso;^5|iM3938dFj$6pYk5Rj*B%S_9(cMxclhmKR3Idew+`uaTkXNgScq zS%`3FGF^C)1XbZSFgJ320CoH8{|*%||)eZ>frFhu*Z5wfO;w!SH8 ztWNE>>t{{ru=TSVsA_ktpVdJ9nh}(!fvOhXNKk7dLhUSck{vjVhDR>orfpbV(17;D zyd&4j(LhHw%l^3|H_PhLkukBUk8JKF+gUKUCKcyMNfJ(?)I(ngD%okyx`CgfQ0?I4 zZ6wMeHaNPb`^=eEvQy5Z(Yx66x@Tg;qiJv|mlS(N&ZzNkJgmmOb&_p7k_P4Fm@GLw zYnMHNCY3s-r`*ZmSg0bow!n5LTjW|8cybqb-)hgnd|5hq<qX zQCpf_z@9c7xntiSk8y1q-fxtXoq0G$747jN* zS16UMMcyF0uqszslCn3aQY{Q}0k<{PYwjyf5W}gV8|@8yIEw3ckKi1e{s1jPryFjJkDFNw%fI@6O4=GMORyG%4~B9@0H(^qQB2y(690bc(|Nw z_RT+odvS##2MrN%@;uICe6wk2=?kWPm1iMJ#GXei;b3i^!f|FTlfhwyU}_cD7Wi{1 zqKufCQMnfBip2yZz2^v&(uTP<;O*WHYV7MeP9(~7XOCJu*|88|5usEs0^q&fIl9jL z2*E#0@WDA0nTZi9Fu40eTcm;j3J#I=Ex0$_l--X2H--4xz5gMEH1r^!e zHi+OtM%f4xw&)SoWkP*c)*LHH}0+-m>Dm@!P|2`YWnza#*uM z$f-IX?THk>qKfwqtGEYzs`j^s;m}u9@z55BkW+O&6h;FNRV7vtcS&auq#AN?x;xNs zDEv3|BVad_6#f%F2x};GJ5Hsr_vICCEaszEwNpM4qqhRPUSUISpl!!Z6S_Zz5gkgT zt@exlX`ANbHBZ7tSd_81}VzKiELl(mSlOcLhGICL68~ zk5Wayno~g1?4%--HQM3G-_=Fw)H-U2^E(DDdJV7R!G3l02bXHcfkBH`qmaz@<`h>3 z0Zdit!);E=k|JEHk&u9f2cvJ$fiOncQ$hj6694anQlv$(G|dqqopL zjQQd!&Lq?mt1CCt%Dqv&ub106^Ea`Al$WEccG;gQArcykC-XR-d@cU3PC+ z^fuPIK~3g0t=9I8bn(!t4FTNQ3!twZ8uEFaV zykV)R7uA90ZCGwkZ@Hnit0^xh=j`oiuI))FjnCDbA39Ch@RK^Se<;|>XB=KuVW;p448RbhBRv@P z?YE8al>c==ResT7F^Yv~Fp)U;<2{&I#UC07mb+49o<%n3kZeX9%agE7uc;T-`yK+> zWY^%j2CWpB&?Zdb@q9lJcDPM}Fm_+6^b7q;Ux`H)wkFpPnC*ZmR0djFA-IKp;QG?I z$C3)c#C^bYDrb=j@AI$XPo={gTaMw*z-sI*8OLRu#lAtziI$pO*Yj=@Z!eid-fV)z zWD9OpTB^$l>9o|W@wUNSCeJLJu%53Mu~cr@fwPx4B-@OCRCFc0i@S2Cn)zA_cYtDn z2A4Cf(73_@#g$LMoa0^Q5_N#fk)EyP0mp^XTID9es!ypc^O7Svkza~Ut*NRiw`+TDIA5)q?b}h{r4Rn%B6Z7Z@>G!Adk{JbZ>Bk>=Xr}Y943S( zXCv!Y$?9x1Ie|HymZVQvWf|%_tVPOIBx_=6Ynll~K$Fs^1ft9)cif%k_wT_ed&su| zuz4Pw=CW_@06OH@BKDTqZl>8%NlEH#GNP-4PO3yYElKa&MVXyCG6dT+wWi+mq<4oT z%Hs-OwE*LzQgb1=-z`P6P#3ru6;AfIvaQZI#U{T z>x0x(k%3_J{Sv4lefOD6#k$gxbYK}9jDV=#=qn81%{2wU3d19;;|VulmEada?4 z1m5oA8~qcNyYYmC`rN# zbuyNQ4L;ya`J7q{6{2HhltjQE>$B=48_LTt4lv%?tKX=|v$!i##`T>~;4c@rpRJW& zJfycz!7%ySHLOY(tD33uaUhm#J5)bktJd>HmT0N@lkCRrkGM8IU(HD^Io{I)&)8-z z1Lw>FJ{IodMcy8V`_pNsVR2mT8oNEB+$KPLxGnvGwG%b@c1!x(GL|c`^2<_prN78M zHo4&Y?dk8lTh86J)LmH2wIJF8*L$UK#X^01wV@dGesahnYC!G~#ESSXxyeY)Nq;ri zEn#Z8#;ZW=mQE9Q#p8A~ga$_|Mnn3*drPcRK7G%IA zMKkF0*kZH392Mdw7MAOE+@z|>`VyH67oj7-JH1Pit*&;KYpuzMv-ukCToYc5DJavl zaH?&=n8|SUjgAZEGnJ;BKi_BwEYL8?< zpinbnbPhN8MCbC=P8_`yH|r7X6q?SZa!Ya_J~5x0f6t+4CfXlQz12eC6bpRrG+UiA zWI)1hCZj^WhT^7@sp!S#0sJ2!Agc~p(S8_wZ1jGO&Li$ILJwW;FrWwRh%zcD&56kf zss*|+#uUEjz_iX44@CHpgky(KJ$0O@j=$J!xYpL{&1E5OWG*C%X3G&aWkY31sk!4P zkIf!^`b!R@;1l_3E4Gc~6k@qkC~+Raxu?25qs+TNiwP05gNTc&H5MM_5Xdz#W6b3j(QRWED4usv}ib?L^(ZjQIPtQG>n?D7@6L1vmiO!>! zyv4%D-E!sS&T{1Ip^`GxLapKxiCS_#p+G%){NU`-+_Bl`o<4P0aNW1h!eVC;|AN7g zswdy9u7YQ#0|mmQ@^JF-p=S>s&K){@;_%#|!*i$7M8iF;Q4Tt++|K1PIG_RibnE+bcY+{r^?X^ZWztHlf zqQ|1=v!^CVx4DIAC90YK=a^Yi=Cmcmsk|uVtJREw_bA1D|GuCiWtWR|e+(Du6;#pk*cxhC60OH`&cbr@xdL?8 z;$mhVDx{7f`|M;CH(EJ#>zTQFEe@Cg@|iCY^bbF#DQQ2>L{4R9jRteX1PrYudRMeR zT^y^j=>#E63uan7qL9s>#tthYcxED+c9^KlP~a##kxG!Ojv)9C(%%Cnnu_+PKmntD z7SR4afZ~-x+-OI$0t@=_Fnd8S%8e$>)Xd^I0;S*rT;`|^#SC8qoUJf2mQ~N}ttHtPoA>qXX#5-QG#R->ZPR*8=h&*9Ty=ZK(Mla`lNgSg zu&-Ke^nHe|n&(+PEq&(nnNTM<97I+G6a>bBd>*~Z%YqpX zKD`g*G9YGpKzUn%sw_}&ix?rxlhFd>bYqM)9AaYCvO#|&(E<<*HO2Vs8Orbc=S`%n z3=SOratporn72IX$jDdwZ=ruOhR+;%#H*P-v-(0{R^^*y4p`VXJKBXopSC7e_o}PS z`gt9M`r{$tse>|j*0DAIt?y_+jA zi(Ba?h?T&m%cRU2PiUUKhNIYIZjG}rA!CS9_cbu(&=2f5?s z0>+xKi%djQ?}99~0&@tnlqYr0!sVe>n|8D{+k+NG3#)2MV*-Q0%Pu8lz4#vxUK&X~ z5Cstyk;Q?2z^ysj6fzyld7sJ~#i2<~VUCb6!QMbS&j}FW+kyqv(AcamfJJ3*qrq~Od z2a!$X8mdR9MT-J9skC~k_hGiLjdNJ`82&T!eNM7Gxb}W%Cnjb26IjrL%m6n4ll;Mu zPts3Deq{F@5G};8Kv7QHUDoDuLh*c*x$wM>!51eEL>B_IU?a8nA9y7D$YQ8x1|t7D zYzWgC_0N?w0tTbZ@iQ0XuWiTcYlu@c;F33DEX8!t!%kwy6w`3qHDr7zXRfRvGL`}? z_yLb~#vw5=8e5D$b;U;3rnwem6oZTt*}q1mI!{!}i{-dT>80bCnw6HgYnSS;VjYCy zSVe6sP9jmHa;m=gkhJ$*t^Q|eWJn{H|KM);)+=GWc)sH3>UBf(e3c&=8M>@s5mlX_ zK)5kMH&&ZtzNOpgo)mte>!6iyHuI|)<9f`@mc_tQOHeE<5&giKU_tUPRXhAzum{aR z*0&lCU?!Y>5O}J3Ype9Y@D32xIgvf(a$t3{OChEy!okaBHvM|gq{!uCB~~&pLkb}3 z3`glbX-2sj)pD-%l?cmUr@HIz1BN<(leC`pHO{J4u>hs0!(kT};RcP1UGp;7gz)^j zHiR*?fz3i#oB}E_MH#GQr09(N8t;gxW^sO~<0Md@-Q*y|=d`hPoDtN_tV~8Lo(}x{ z{AuDVGt3#ME1vUt%xL)h`lFzi2aF!A*bV5RJm_RgQMA%AqaJm7L%Usn;xX?Nfol!H zz{2Z?jWyEY|+b;a*E(`AHw#=)yw$*E{fOdJ5!&Quy=%^s9%@V0FUF5i^h6$vvH3 zYgbR9zsJpBThZzL4?-E_LnJaRGubVg(8LE| zP1}zd-5yKM>aLnw(vj(abKoj63xenR!kzWg4wCcVP`JRhtPVwvCFPnR2ndOut|Y@gD3vfTmIANyMt5~aqsqYs%U0VdwY1(%-Vq_wE z)XuLYPT<7s$@#-jQ&@xYtGUMd2=F*PE)i3$@iW>h`$x3&I5zF{*df%dnzRb{*@Z66 zxF993pL79xM%?YLL>mY66tHAjosl>epWAs81}P#3;z_%z;rpE`A-Ygy7KZ*8VL23i zOL{FrkxX2j@foYjs=wR5C&U5=bBUuF^ITZl^6aI<#5)|8um?CT)3&=WD#hG-x7U;q z_+aj5X)q~kJb@mj5ZaI6y^(Y=M9tE&_rH1IZ{&>BaRcsIE`#;1&4*qHrCORe`7#R0 zhtuVB=YyLt)kd%@lgC=W5h(q`1=uEoc~!t1dDJ>~=#g>=v~nSK6b)s6Dhv4FWLai# z^e}2gX{;3?ttf-Fmn6*}(MPJFHFz{jwBTyR ztYzk52^wPnxlz{MVad{>KGUrj)B>%f1&=#pSbZJ!W^ra5V$-#_yeFE6UED%!vCu~P zFoyna3J$IhS*Io4zFM|#wrn*cNDZ~w?^)19M$^Rtj+y zU>g|%(C({ItD518^yuIv6%lx^^&GqY_9)Q560P&MNK5xqpduwWe6iRmz@7UVb!#w6 z7)ZH%W}&Pr6VSOSH-jBroR;OV?Yjc|UkWMPU-ChJNo4@mEob$mz68!Cs9nFz+8w!@ zR=kYXEEnmC>K{RG0&Go7v!_Bs3#P`~d|P@QVjeaE%v|@UJ6#s6)Yq13gB!}R-n^bB zbWE9RRf7@Z2gk0z21?xQH&Z*$|21@*$*|^CI^?h7E6-WVhEK zHnM*$xgG)gYe)7T$zUt(E}y}K@UK<=6k8IHJb2`7_LcHey#8ET!b7!mDuSJgWFo%I5 zRyC$zsa71j``TkqutdLh*b)l+*i+XY`%-4TBLtojACvI|*B<){X58#D;(P%;o$Sa~ z`P89c1fTVYh=9{w%#kx8)~lBpuoqUB_tx5=Vrtu&JzOI5T<1sJ&NGSp5^JbX#~w4V zjQi1waophhnB8s$DlncE8`OGJvW<%%`Fy+XgTiW zvB@EN*t`$e zcBo$^2wW6#@NPE@BIF($1`XU6uGC{N^cXBp0Ea>3YeG1~*dAR%=gI~>M)QYG*zIYj zjvqyC@l=hC%^iPw{%~&o@L}%Y!%oB5Ltp&t{HfeCc%!jQI}k43LLPy!&sZPBiIY!b z?;di<_Aq9lD;4fo?D%60D~~RuD-!qpN#LoeKO3F&dkN`pmEsT#acio5Ud|EZHtA3V&UC*9C=t)eUfVP`~c={6Qb-sk1Kv=JMG*x_TOe48-bI%?nrDboW zr8Gi>N#++D;_u}?PsA>_7+hGZqLb9=(?5@n#|R(nfW%%=IO-8$JT?Yz>(fV%vnfFC z5yD$6uV6BU`mx8YCh%-;n*yfGIE@Hoh47?z#hRg^XJf2PGjw+>D2p2uu*DH>Yxvh! zi41o0fvu5oW(#4kSsc5jB6~!BE9zkC0IG2RW}dr1X;I+Ds+Kx7xdHhfbKKby`+>^5>3-Py$*6qHf_;d?&-OwPlhQ4>M`uqRp3j{+o;!Z(slz9kg!6^5@L1LKq>u%(+vLIJ)$Xbpq_ca~vwi`;61SL~7^S+oG7 zarb@P`lZ?N{giM|l*z!)hYrOJL#>I)=+W{Nwi_E05^=F|S2GC+xR6UH;dGOcP?Aj$W4E_J#Mu#4;GsCGat$h^tjpqxrJIX}hVyzsTKPjreYR0h zPhbRw>VTHOPa*be1!>SOpmsn7M6=L=pSsotq-I==&*jmFd+Hp3xq@eOinf6ik74@!uXZZknY|9}_9~s;wllZA8x%l<&nwY~43e!5)^MSxiuKxF#*ho6z3S}SXpHKZ%Qrq%?(+n8;!Cr{ zlv10?cLZkRBzGy_$dy~Nz|~DyxY|>@3*}@D-4c8On|xd!e50v;^3apuP$p9#2;J z?7NEZCIc8NL%HGVI{d`io1Kf=U}e_|5Yv6^KR)}d6@fyV*G;ctPIMtlQ?pS19J%D z^!@{9&e*9}F<$5_;T*&znQ-_@AGg+?RALp@>entNri!paC-bX>6g#3d8rr=hpiNGioRtRli7mPY7Pcrfs#38|JwZW z#ah(?_JNXkQBdhcv7b%iie>d^I}!A3(6XQkh;fK*e@T{V*~eWA;Y-s182J=%lv}@W zKUh}?kyX?#MpKc2^@+1Bi+V~9&hTpCgifdcL1^!CYiaM9P)Sp7AWkVKCrELVVzHlC z$=X+7HF6uWoN%KDPtA-AE`jbRSTo=pGe>?&)&t}8VVLT?Mqzf-=hDWQge?g<#Iy^n z(~!V{kwi%AP*(BA=;7Ds*N-;RMmX6dc>e3QUt~z-afQ}qdFJ3VCooLT7`pTOUaN3l zoVg$<2EucCuah~G%`0BkmnPK!q{g3Z!IpyYB+lMt97skd6MUBH3U;xjaK>Psi&F^U zYr{zZa$bVugG0gwF)xF?m=jYoiJQVZVY*^^N5kxC*ygb0Br=$YDPD95qCyF$%X5o2 zl$>$>ncz$~Q44UARDq^-6v0~V05*>42HWDA|}ss;dq$JK(8VKEM$~o zzfTXAK{Y|RYF8*D9qnCT5dqX{KtbcEptKP62goL@A04UGpNW_=dkRPC0q4i$Elm@` zm%L^-DcxW=zefu6ViJ-V&lxQ_P>m5d^gpMFl9SUzaJrXd%s8MU^ArCqjz8hoNsVx^ z+fvcoAFa%;z-p5-)YPtf^ts8|cbTN;x~w+^sK4npDh`X|$BdrtE6-3>;>(9bM;9DL zIFL9&=_^Ij`i*awhLeW6jje-yr7@bLCi%5*>dApdX8Z z4ZnsHLHViF(9GFwxFnq33f6bu5Q|IxqT9^)z%Jf^iaDCO%lGt;i&0CU)G zJ@48~n_XLL0&$T5gT7VDJU4Orz=5e?-qSnav2ef}kU{bon?f&lNVjnX)-g}V3iB1C zhtls4KKL+__B$LYPv;p#_T1@x*o;jO2M)*|KPh7#CE&PUzG+lD+}wiG{c3!`!W1>- z`EpiPgffr7)Nz$q{oO(};%?=Tr^k^dKY&24r=p^+D1jDD-iSG>!~`Ku?Cp z$kpDr02?L!J7`_ErLR;LHRJ=ro^v3os1a?kPtB`&1x#TEc4OKwy2h4JYq5V=#5J zpUsTTmvbWG=l)^WuyK2gP{Pow`*!_G2l4a^i*)LNhHYVRvG=UJvn$(cV7x1XGZ|>UMY$-#>qk+u0fC7oVj-TuzB5Kw z39lRm9H4?|t8n8e%RwzLw$X}1jTC%sHMR`Q}%Q( z@kpAjR zn(1~ar3X8f<3BH(`X2ek2hb%PlzXbS^n-E9)dV*PIWJOA2{6xn?61@<64pL8$FGIF zz6jDvbfenl?~dSJS>M%SfqH~Fe#?Lfvvv_%5kp3aKB4pHxeR!Q47Gf%mr8``;rWqH zp!O$qx`-d!hZI>yHYvF#cr{~@>5r;WJc?KkU%bPopQ+|p*42eAS=Z+kNi!u%smoJk zi(ACi&8P;LkfdknmL>Z4Kz>;t4Z1r#D)j4LDLMma*LMa+e8PVwlNfJ-MI9Q^-t@Kw zDWu>qByi|l#1`?ibP~>o9)?@%J~VKd@ilRnk~|`ZyM+D}zwFeGD}IoBI`7$_H(P@18b6mER(7O}LCQ_m0WTT_3%Vd*C; z!&v1)7%JqXdy(tF{(a)#P639DIa_4VM1xH1S35mH%3ExI%6y9QY*bd zHl(%G5yZlyka(DawK8VAVs*t(T*j0lwoU`Nd71)a+$0Rv8}yDmtR;s{_4#FPl>ntV zqQg4nJ_B#?G8g~#2sM39-h$OkfgJ=E_kQgKqORTEoXUS|K&5bIRRQm2g6Cd1JW~Px z_kPG1D;?P3RDZo6wLfn}8_1AOd= z4Fc!6uZ;hZs6};PBGBH7)ct+NR|9E2@HWB)l}3mS9ianSdf2~1?B=ldTMM~+g3?1w z%14gdbaH^6gOtj!gXVMFO$KR=8FQ0TD$B5^3;kc>rYHjd;ckzU+Ti|Uj6KWU@964$RX6r zY}y^5S06LSVdMAM_7=BP!3+?PsB@n3BoUjYw~QGwDDEky8(51HAP={1xoA2EWHgl# zJ2yD@7KO+C&DijT7-FyIT0CvuYr<4nm)~rjM#B+y#f#|dxfR+WPY1f?z?q3|_cK|+ zLcC5;Hemx!GbiUUKumGcXiyyUnBWc0u#Bh3<}QE0`^wpMV@iAJmcDk%g-3` zBZ&dpuCbIK-!pof9{6DXig0nLfo@_sg1?Po_7Ge&PvAy)_ur@;79h!HXrcZ}#(p%j2eU)Ui4nE5gemAr&wdA^ z=LfehiU0*Ok7oi4eYNZRYR*BIcos&LOhzuW#f6~-cE3=nvz+eOL7kJ)>I^pHS!2`u z_2e>*)Lp1Eq?1Fzw?p6s77!&AH!)jYHyx|<^m3v*vcwZNUFv573exNNuX zVapF@@?D2G4QhJ8EOA(hF&N;SM!Kh7y#Q1%ezf(b-9$tTy3_~~>7YG`<2UJ^#T}B% zaI~kX$wq?iD43OzsKx6!Gvn@tN$GpzeG0Ll?VDzZRv^uCqq}_6XUf3xLIYhf>}6;d zfwVDcDiH?%4WfC9m6}z5FAV&`?~A7S7sB>kL_jd3NOHUp`XW{Y@U}h_@WYqD{cKId z_Q2*9AnaF`Ap@a!8zjU%7>bx|RH=C81d`LAy1}$tf%;|c)V7K4!wveJNx(hCSZy>% z0ywO%$oCLhnN};Nmi9b@Q`MbDG(WFJ%ynwAkn8=;4iDqf0M&VYFb`Vmx5JhsgS>~m z(FH{ha(XcUs$0Y)Lf6$zs4Gry%jmk^tdmDDt@zW29GG5{1*>VNun!o!KShJ-jsi2E zPhHg_7@*JhMU{Ha9%IRj{P&bYS0HzvHIW`^SfG~zufeB7Ow!&Bf?n6XV&q^ZB@ewY z=(~|9!QM~YQweL^I$6Z|+%Fe0*kd&x>HVI9(d!BFg3A^`#B?$Yn2^=LOVF!+DXw4} zW8s1_IG%4NO7GGq;P9W$eiz5P(*VHdl?1uAZ zT;#M*|3Pckx#a@Rd5LxC77R(xbVUPm;s|8B^D4My*@g~L8lKulzRXI4_b%wxB%Y!m zcW}03B`**iJ?Iweo9+|>yQ_k(4SK9yQL)V0oucltCx$)8stUpF4l8txTD+p6lyHkF z0y)ggnjURJ>DOJ%LD}=|dgEynki(ABBToMgh58V>-!=zfxCP7ZRx`j0ZWnXPh1prs zbIOKnMRA94aQuT_u;+7lx}XmI>8MF((iK@__%kaADPU=UgF}h;c1kJaxD%Ow}-aikRThc_-F} z+~V8^SfGD#Gy4cI`ca5j1%SA(I|V6)UDjT{hRqzQDud<>sstqO(*{RpBYt#Vr*SZ# zsomuy9;kTiV}j>IyPok%sa@{JAiM8XIe}?87WN`NGteIR=1wp4HmL&*WP_7VOa~m~ zY@lq2uPZGOu4!`a&Y;5O+Bs_6VsP`g1_#()ACPw71+W8euXQ+(4uYP#8Pl553-?T_ z3F%zg43&MofJWMs&Xm4U$yM+BQ$DBXDE0cjrE0F}1P7p``|p6Rp3cOU=DA^lb};Jd z>f|6Rc0*-CmUi`a0$3n`fL_^kZnfai_@2eSrG&$OuEnIYcC9r92utHFjB;V zL#LgN$j;>s9z8re_w?M8x%pEFwcsY5E}aiNAvQP#Dvc>+z~Ta#lw<1T+(cZXhQ;f+ zhBN=WW)S^nwibw-qRWk(*aOwTw&RP_7Y5_`(Ef{q>(O&`q2ec_c?i6R!oDLPRTmkh z5k2p2Qwh%e^TO;~I*vMV#1rC^^Vn9l`Vz1mj0Fz;#0nJZcj&mS!;YB*4f>j_@9IZm zkG<@rp3fCJ?fT+kW?rtUKn;ON5u87D+?O;56r01$g)nF{AOx#Jez-75^$Mr?z`@Ma z(j_X)z<(@?1AA*rSS4thLo?GRx8~Dd-~pG+j7L|lqxh}elfMbxbaJ0{05^Tm0E1*gy|wVI2h6d`!?68SmLi(t{_-dha#!5OsH_V6t3ZG+f5K7-0Ygn-rkUUmu8^kN4aL!lIP34O#<4=2UU zX&I*saH)ZTx&0@Ih=0fVt2kqUlG(uUh>gA+M{qzQZawQ!X*lB~1@ECoGsf{`ofaS{ zX?>IQScZNT_;VK7LjIH5{ba-1gE~S4Ap7^KAj6EKOAn#?iyls*#YuuW*Z2XUqeRkV zMerF8bH+)oqX}$(-PYUSu6Qfw;2XRo(QYH?0~5XSa-8K4ZpWC4+CEU4I6E+>$K_^k z9JT8xq|QPBNwGO7AvbHEm2A%&D`Ec`)S-sK;8N}iGWDd2#o?v8TcUZQK-b7rGbaye zbQO5xMI+sl5T66*4_q};V5(2FcRGK%>!4s4A5v{Hvt+4*0UGEYPT)39%miZeI>N6iy65BOF^~6lRa*7Yyq>Vi$+1wiYz>uLr`*9F;S?I$4ek&ItQcd-hujRGuu;t;jeql)}8 zXD}XwJ3LSEz;qkvNS%U7aFG@dPgk>^rgp>wt%J)=pO6FCkQLE2xTY+6k~f?7iY!;C zqlKvx!FkL${Qw8g@}y8K_Tdy-Ig!`+DxKh|s2AFD%#R~$FceYPaXW$@Dx8hp%MO8| z<~(D9`AM(86okT3>^0$m=RoB=w&$W1at1DYQM?GVuN^dX9*59l*z;|j?K4RQ^wgwuJ6LBR9YGMV z6OoDDLnc^?r}XqN?TlOshiL#V#esU(%^SE#1MJ~xeMCn{0mOUC5@=tM;|KmTBWyrC zl|~M*beqYfCNN}VWW`+(&3d)k6JPAKw>ua-Satvxh_WzwfPdH^(*?$Nk3G?;oi7;6y^rJw3& z^BN6PtDpBe7<(v41+Ir!VKf#VligB@(j&*fml=Kb5+Ra+ReSNndhbVyRYH^iusMvx zoe44%;DKSc)5ca6@dwCc%GcGUrYs?W`aw4u1U?j9E=(Jz6bi*;edmOhox!PXsg|&~ zIvc#f#5DU)Bz08(jK!ZpwWF575a9R{wt!2_eO7pgmk}E4V971?nWB0cvxM-=_Ze@A zr+cr(zoq@bdM#|Shq<2M+n(6!EaI^1GTa9}-I3s=sNx5lC8^@fIa%be(ZFo_jkg>P%C?|L>VV77qhc89c3^)3Jl1uY?3J+1^Ln2!(h zq+$boxzxg@O-5vF`Na-a-ehlC&#e-tKn5KgHqQf&ac^svmWMW>>u6rf3hh}%XgmcYsZ4bli$pfyQqi!)*%@Q%O z79y*Q2u5QwhNq+jkuWojlHU`EFhM6UVGDe<0Nrl}>(Dkz+_=L6BDj`{YNL(dXqdKE zbndMi%zgQ2_ULY_dIh8nyR4SL_sb>~w$Mxvz82J@?%6y6G^N+R(2cn#k2j zD)9qiS$@npDO7_oh5|MVkc}A%U8)zSAk>jqsh{1z`k>d^nKRQlV;(ZZyDLZi#l%-ZTY!V|| z={K>opGD#xf0F7l%>{13zUbo5)~2% z8?XjA0M0WEfy4ydDD9CoCYWP|t}1M%nT9h$Jb{gXq6DU{_}OSHj%J>Puw>=FH=@~r zb7k;%dVJy&(u6VaFvVI;nKBV!R3$AcE}WW`4dLE1aE^Kxtfs-tze+$lBv+qn-8Qbk zeObQ=at@{x(bNYOJ?<2=^Wkg~AHofpHQ=m`V-5J!00|;dQ@`EJCZU1A zO2q{JtHTL{QPxaaj4(^^Yj?81YS-(7bW6dkc@cjFN9eV{(us;wzMQQ`4Jd_BNVN^4 z6QQIw$rz##v_o0qxM|uDQJLKB^>2$7g(!d;x!*=D+N==JMsH&Z0gq6@@B&0fjM_o0 z65Hrna3F`q6LyYd>Kq3~aOuLRJ8WO(A+kczocDj?Hgb4|A+t6Wpv0Z7&CJ;?egzWB z^BlRI)UK@ofWgbOKxyB@6!yxKXeH^{DMPu$c`^O+d5=~(Cvdak&4HLE;04)b5fU#A zCAGv&SHv$vQUTOq|3?h_^x4uh<(ifDCax?cnKUaK8#{qcIh~u0&~>2ch9bhC1yk&Q zTn8d@adM$s5s;Y?|5>9^zppr)p2*=6LML64*3-3{fib;y`ZQFk_y*!*>xxs@iM(Cw z;H{j2(>j9BCr?+kj!S;$QEUe%9I9%Wv(teUwIjio2(gK|*O@7;c6*3$1}#s@`MiTD zQC=kz_V$4=fQqV-7@<&WBkmZ@!HII$cZ{{Nb9fKEYy(jV^o2z=5zBC;QrxoSDcNeU z%(ay6I6`G$M7)y{Gb=2@R#y<5)ZWJpxDCoo*EMUVJmh<$^>TVefEPoLz04qpMfve% zZMxj=lwuVY+hKn@KQ{N0IF|qqE?H~Uw%*8F%t7<7dGyY2F|-W|o}<-Wpe@Ov*HBAA zT3P10=yx3&OJ&+(*L%psm`t#Astc8T?kV5I1Dvj$PhgA%ks)q0(sK}t`emMfDY}G`qDZ2L}CHm_c4G5 z!=SN)>$aAk2w-qFx5el2xxDT2Hy~SqXp#$%u2~cEg*WP8HV_>^?6VWhZCWr3Zfpf{ zdI38^HEwWA6S6sbxkL=ax*?GTcqC-JL~YmbuRR*G>yp-&%$hJoyxk%Kd6k%BcJ9oI z@@>Szn5B(PNy5aki1S&JgW`Mgvhgn9gHh4qT`mU5ZE-3#7aV*&TEvqK&NvyrU-uZ< zz~I4_dC7e+Vp#MzH)Rz8albAnk{|9Zp?@Io=vOANE~+4u;Qr-xV7^w?Oh4cVE-y_1 zb%i(<6*Mh(b=ggLzF02YfTG&XU#V7?n-f_iFKn<={5ZsU>AtX@l;&Bk*!P2P5+bM^ zr4KCS`wT?IN?CMA+_37ABUYYmum<;u22e+~I5$zrbU0Z4&5w;wCBI2hl^Xc$pgJC* zEc`7RjP&5XN0ggs-^&yO#WS1Esw=wufGBLami9qsV4Mt)8_C$YEuy65n3AFyUXF+* z-y8NQqcs3Z9C4MNgKi>XD|y+aqYiMaCjPjg7~gV=>eY#Ro!yyby5Q!!f_v`i?h7VZ zR0?-~2oD;JEgyFjtIfeDNGv9TgW7ey_0^<13mUo#ABqL>pNB;1yh&vgkmA!d?HYos zLl~x{jERQrTZ-l-wwh-JHY{D)qH(qqjqnO?uMDg-?QZsrl;KLwq`}^#J$Kl2>AfKB zAy)^q0fQQx$Y%?Ad^8Y88@6SqoeJCc0Czr{P!;qup(7-FCXhlWm?;FkL{6d!2nNIU zunQR!-ze6}9jE5%hf6)FAz9rPaZY-K(~9qzT((U{Oict=zghfc%j9fHIKt+r56KGZ z3hG1xY6-7*;4-K_kU@E{y$;;;+bd?!^vzL_mg8$=#*}B=N26zUQpGHAvxacVC`SCs zrI?XZqd#>5V(AvW{aiL_0>k3k85?Pmn1>BXD5q-tC#v9aRBfGC3vDdw24u1ae!ZOQKd#?RpG6ztWG?Ck1fH{$5U?kbZhGL+0yCLli|q>AAI%nMjs7=(0n+T|NT)?VMaZ)g4p(Gdf#&FQyY0iEoVj(JG;LJfqEZIKvVqNGvsM8v1 zerD8BT1Hw6@I=Jb`CTsJ`g|rQu{*du4tF_~C#EK-5SDq*F5aLfrg$RtVXEaXuMqYN z&p5uAp@L6`!euB1gs|xZGXY2mo$~?Q)VJ<%TxBq0s1ka8+y)A-K0Ddt~NCnBkyzlYp?j)Z2;3&m_DL^LhWw&Q2r%IUKSrRi_bS;|9P zdt2MHWmU1Zk>Bz>`dbX==lZk7?_&hy29?J_GE*Mj=uJe8viuuLa&5Zp6FG9Au4pzU zWvycGHcd`COE%wS2d|Z!BOg5;RQr-s$pSvXC2!ln zX6a0#e{!{aDN~EC*ksR$_D@tuv1}X<48(QcBz`Q~W=?0s4Y*7fq4{tkjIiQWsDe#5 zX<}>hbmt}fG_NUDzE0m54kR&g3@Z@8$T@LD^R;;aG3d*sZGUYEX3YZ&Zr9u0-r9Cq z3tAvgfToVDe;e1FP4uGmZ{MdyLcYLYAw~l}uEf@iLv>rN1+=-DIAAO~Yokyk}WLcFlV%ly)Rb!}37im0Q zq4=!82CM_B+XRnnlp#{iPK;o}>uWCZ`~*JuRmF_|g$pXPNq|*CS{ts3G#Q#GHmgMMZN~{u!bK`5(xDm(&G z1^rleY`P(b2@bspeix}LzWOzbXe4;vq7$|z#}bnu?<`RF0fi(5hFU!xN4fpyYW1}> zbeCPkw|;XC(t4P?P}sT@F>qTAJicspBc25d=!GySKnb7c`3Zg@xCwbs{@$~t7Xw6l z{XD9uZ}AMnEeH-m8HM3Ab`t4mm;&sSh%B3hTjm|yA25qHSJvyBvlDCm`gS;JiYMJP z;(#cl-!ktZ=M4qdz>N46kFG_WmaP*~ zuljI+QYZttfv_fl^g^-lwn62__WG6H+9F<;r_Y}`Gxd^MkIf41Z z4Ut&j;TYRE-bS@n5KGD5!wDiR8D(^SxEp~3MkkUWXi$juz&K!!R*$H?Lp5G=D>zh`8(nW1Jflp2-cuKuhP&@n*C5 zlI;!pEfR_=DL}#>Ez%%3`~xguE!qSqO)3Gs!riwCy^I>!JqC(+&Pxzlt?hI8!mgez zy%ZJ|W?L6kLB415^Wa8f$L+vj!(ltjeS~11;(+9MM$?5zfOzMSBR|6aNM#u#OFQR? z#=^ylw75!8C@wo>NULlf*fqrctsKV&>1O1S$cn|rq?m~;3VeeBwV@vf6PO>8E9^9H zI7j&=%G#zZI4?|+Kd}oe}uA}bTaku$>MMRaNU6(s9xG7cK=PLzQ zuc2hlh9c5SAg~9wt|Rpo)_2$+v5l-wn2i)x|H@`#H9GhN!W2HkJ*PC2iOj|*=(S)$g&Xs=>f#%3E{08=JO!kdx*`kuW39lS}l(T|(gcty`t9i<1)CqH9fP2F8bFn3QK+^%;jeF4UrT(P~5t z-gTriV^oGyNNM;6!+7f5wO$_@y>&#^4%=Nu03keM1#vy@oD2tloJ3Ipf?!C0m#^~r@DP7j^26P7a^F=);^OR|UAJg8WXmQ>F-Gbwb%r-VHBD;% zEH!t;ObE-5x!xjwU(%>!3K0WVc%+GxwZI_@F|sD9$fU_qDl zCy4EQI-c6JjM9{lfX&Xhq}(a>Xla^zk;2U=rp9XgL=u7@MM~~5U#(7zn4Z#;oK%2> zqvI*CRF>m4IU~6Zcqc5+bgMyz8DXTBI>%4=U^3`N*d#v@?eHhLft(Gn*6vOC3C2ZA zGVvbs$q*|z3NJOURfZVYCMulz6Q;=ry zL)wYedL}kc7F5l4NuIzNv*M7!y)$CPlsLo_5k7Q|oM!#Ebm{0qm1RSh3u_?3#h5j- zI-$MA0*OlQCOf$#FGp_~qAdK}>c{muGJ@Swx**cN`7U$*J@SMI^7EbFXC@(p=AY`u z#CK^vhO}uiTg`4)nB^tkK`(-DPIPMlFAvwqmA z*zXnc8U-jldeg{+OiLviBvR(VVx9%oItk6IHifHPLIj~u%7`GD!sMs9VG;)JfAH8V z@NeWx9%}#qZKwtVW_siN`3ft>JfkRezY*Fp3Z+i2*i_$g78uFx!yxA>ufT}$*-PoLv2QE?oPD7;(UE~>5bFOqZ zLmv>3m=sY+AHFIeCM*MxIe1(bA$T;Erj!BP%04$X)om((30C@8I&kpPk2WY97fu|) zr%H~6!v`!kEn_bvVAcExyT~x+Y^KM2wPScID@^(8F6hYTCi6TtIS+X*JC3`u)_fPn zB{I#Sz%x3s;g!BRMAO5s(p?Aln{zQhP@)cZu}&tkiwR z_cxr~9c&&gQE8;{Q0jD)A|oc=5*!t)!-PyDY+(^aM?Kd*`3xBNwn18$S-6wC@JE8XK$7|f*dq%6*#Q$Z$c8ParE6QCJB~s`17UH zi2^5c-Of*S&;-yrkejabz-D?hwgXPDIt1NJn3Y0E*qi}$zn&@Gpl|3E*-4SP4%#wV zVyUtUX^p>6MD)-*XfNhGyN(q%%0@*#Av3Z=NUZEg7lHv~*<`u^BBBGXLN60+NMtvp z3Tlfyh`6M4ML{>VLDG}!1Z)voKt0O15%4gVsWk4cobK*YJ;7tR%aI}&1G;$avl7&SsjesEt&TGrby!+wc@A+cFEmTs0EAi1myTWS}^s5m)sK zhi84fl`{kE|MZ!MPCUfV?tXdiyJDnPYEZZ$ZmPE5`MnQ5^iXxay7?pfd(R~xMeEwY z`_%!!Kc0YlMkw|;0~}TF0r05=Fc|*~Xt(;O0rZIkNLFnPNz*~9IKdj^4^)2ykO_HI zXxc^YmfBiZ!o0NHEk zT+bg~C=)mx?HGNLl{xe9!e{cGk@X*r&j$OshZlZ651V0C2KyHuUidY_KAUtrmxJ1% zfBoTwe?sUK=bTVkvbmo8HxDoT?}Y!Jq;|rGEN;0%|Hs1%PdA6fW4f}YCvL#%zVBb*ia{YMs_dKZd(_W?zCfHLrpy=&nr!JkOLv7y-e>+f3l zJAD6S@?OZqApYLF7XC3I9*-gRJ0Exg{PBC`)rfpF^Sb%2haM`fRNfSHhtEfQ@6nsz z_J^P^{aQg>SQBb$9?=K9y&j5V{k32I(q}&L&_j|BwZ4o*xlHqft! za*r`C1rjYk%Pmc`CT^+LF}mNpgyh%AxuL=nv@*B?2P$4{+jn7z8zK!4Qa-gepkRhY zA7X`!Q|e!Q{{5+-N6_g2`$;e|!UYMyiMcq)=IRTJ zJSPLvC}SXq7S!}T<{O&t!dG6&Q}}k<7fLJC;iHItNnZvm03iGb12&0DCcq!cl-|;s z6oPgx&}t|TQ8k$x`Xe~E^B_s{R3X?&VHt0$S{s>H-(dcPSy)&eCZwM9s~pjmIQN6_ zCe`gHCIjB@mc94Q4s~xr-weW^flGx;osTs_^QbIa3tb0Z!=!uLf#500!af+mle#?V zWyf;E>F5QPI+ak5od!;o7QO&`>lF|WgX842W2BOFTQ(1x>* zBOp2cM5Z!H@>u#J^VdnD$MVGG%&IPlsoV1%46i+S&KbL2&TvZC+@MZARTGNVCV7T} z_v%JNTx-Jo)9??4MsFRuFD(Vt?rO6xo|m}v4!oKe#UWCY1^O!_q+82j3Hcs^^MN^$ zd1e_@lABjYzStXH4lLDB;0`gqO6!@9$Bn&s0!pvGalI56>801_FI8{othiLg*X#@$ zC#p7W=L6Z@w@TOYt_@NNtz`-=KXq}!%SMjDpbjjq zVKbbz%sU|J(hOlGOSMayN0eHtI8k1Ogs>p~L?moHk2|7=tiepKyVyM8lLTV+-bnP^ z2z7-X#b@U6bLANWDQ{xYPM?@KT>QpuQrya~k$q)}fy3MGjeM$NY?*TDmaoy)nV+?q zBphTaOXh9Zjwa}v?Vi>AAbROiqx(@vZ~ZU2UeOH{%W$L6C5LEqyh81j<9vP+QZWyt z$nU3EX_C^h5EBGc6?jB51`?AaKndv^D0GJPE<3uxbnRi&1I+Xp$G(8@PA z5VHn4Iv?lDA!a_)>_n^?H2W&dMwTozMXuUakjq%S+H|YZo1TOPs(VDG^g0!uP;F8g zzzqY)N5uTqxZBWAsPF`FNc0Ve^X*{JTj4f~=6Pjl-E#_)Wgrj_q0|<^(3iBso{iJD z!QLRIZX{kPf#bw$l383J%P%>K4Xz}#t+-qchNCd)q*+OIhq8BE5{O#H00`zqM*@N4 zg?SnGuDA}`7zJ)=YC6htLJ)pv5QY_XVzYKnpmqZpD}cBM5Q>Kd@I?+Q?X8338)sX< z_neNGiD;tLNQz%VE+4UIyP7EmNFJIDppo6F(xth@(i>NAUS6ELa^=feaa*Lli}N?Z z*GgCCuS51*m|MJLQn({oM1(bB&IaKjFgI}o3d0*ON=%5ri#n+qpz4d&juT=svJ18; z7gj91^#S#O)gG}2)FvDi2cYRoc2N!YNEUU@q`Fe`rvmUvt{ZSsk=aEe^-E`~aiOx14nJNy! zu5W+@jeObU>cCxSNtk*aPA`KYwlv89m9Q)VT{F;6=#=xnRn~n{{+;weLlc*xr3>O_ z+Ve5zZXamM>aIEYHd;sd({@@UvccFEq%qYI#v@Af>U5})94){lLKnl?(ivPPgovm! zXKvr+x0H$d$$Ulk^^#Nuqf-}^VdmjXCp2*RD%L7D9C;%oaqZHzt1z?o5XrZ0sx>(w zUXugAQdqdC(g}LuAVRt6$P}X;iX_39K_7!^Vq854$}zRY5CuoN zyAiE=wrGooUsZaCTP@u5BPK9cQv(=6s3`EO0~(jJI|xRR!dr}T&a;mw>hViZ5Fnm_ zV4UJ)PE#TGT6|H*U^eO<&Q34`G9DT{jrH4s#RTT!xhfkHJ;k zvB_lb!qV9l$HdI2k0h&MfwId>6ZS^D5E55`T&infm@z8kLHSEdGYHF$Bo<5VJU2wp z6z)h<1zFgtIV-NJFD)U~M=vyBpd${DQ8p}NjRLC()_<2&$8HC?yv{C2&`2R_E?{FM zcA3>!N$Bt;T4qnhp+*cpJ}vBe5G<2O5=ss*>CkOdp~^$6*vw=J3Pmew;Vj=%v2fS< zdaDgXt~UTt;ns-UI45@l6^-lq=H|^z%cr1y7ri334ZIa$J$nl*r}tE8Y4cBjj*(*u zV3W5>WhM@(BLERc3LKFexIwSI0(YYRdUS)YmUMUV%|MqxzfNfg8CB%pr~QF2X=WyqU3cnON$W;BIAzULr?;S-25&EGoX@`>CNYj<;Sr z*@^}l8NIe9MYm7gBjO5M_01-d2*@KpP#XwtWPzguEMCY0mag$zC--T!{77Wo^9p=5 zd{#ePy#TXk0^yWv2JyYs&jRAN-F_8iNK>H<(^^2$)kb47*=&(zgP4 zs(%Ir611`a4@3s>!{W}8gW!S1Al|9|Xi*)M)D2><`m=yYrY4rk4C>EU{|2C9KQg46 zLrz8Y$@YBPp#Ns|zXJ4kWrr%O!a)A(>OTU=`yvptl)slR#895T?9fg=ep-uP`w5lT zMU*8kau`(n$h&c)ke3IbP2L|yJo!q}Wx@BOy$=`I_i6WkuHZTB{!rxfg5m%7FXavY za~Cf`5I)@c?<8LaS3_kY<_wrN2Ak>@5V@aMqVG;%4(1MXBe3p5xdRD%t=VI~Wt`ho zyjH=>d!wk<6Ruzb3&17mU#j)>_@+XJFfl%-?Pog!%aS!FU`DoUF==GV+*I2)i_04Y zLJMb4LLODOhe6~+;rba-?8%ef4WM!!+bBFCZoF{?mdaZ7&AIEZ(O*H-kJ3+gWy#W& zyE`R=415QWpohs97-*=+@7d||_~0p^F_SoiFjgFp^r}}$6TWJ*)9j;nyWoUh5x0+W z)H~cZd-0O(J=h~|2wf zTE?Amr39C+A{P^J?&R&iecngzHJ20*OD0Df3a%(pF~x$^p<`n7@(AZlNL7_eklrUo7b2$*!1R-!qnpXke)@CE{Zw72 z7#V7zBhr3pViT=SPzqEid0$(EIf8^3#41A1lqR14%2$?=G!<#j@#o%Xx3&>ybe$NX z3k6U~q2caVzw(tKa<^xSqPvF`-O3d;P2~L58@2iC*I`{2=bFzDk1{V}8rFj$eF`i7 ztO>mj*2iaqooI{~4!jHeJ_SE<1T&E$)EmbH)A)%~J_m;zneRxL6Dd77rH~T%G2z{} zg@HsZd!i9A59C~1I9v%khwjWf*+8?-n9Oz`hv~XRjE7pXE*1U_yV96#1kWEn&;iQ7 z=?mS=^>y?;1xitp{7M1iBid{<_yA=`{`53B&dp-Ml2K$&h2s?(!(+fuXS>humO zPIQOEb`);SS&F9Iq~#@Ve87s^!dV>d)vFUbQ1$Ol2({)98GfcG;e{rXG=Ftf2YPAuM=F?VC81RuR+YIk9;aA#(!1D!U;Q$bwXIv+RzDMGnHY` zj*IEb3w-BtlV&JPI2()lE@&ArxVX@nGZ(TD!f-;h1rWkl2;ok9;hSC4)Ih2D&NE{w zDVY)R9&1^ea;Iw#Ah*g;zYtDw9Fc#I3AIK8a!dXm{!Q~!Ut3~ ze{i8y=&>QsfL?J6N_zvwL-7re7w}zQ9@z=Jh-g%ahfS8P@Ux1_SMdL` zn;f^=mmo#){|iV-W!|7#LjPU8gK~Frg`nhH!v7ZvN{j%E)3##2f-A?dSFM-P!paDA zie>~+5erOF#%9@GaTRxtTE)(|Dv;vv@D9-2G7Y84D!W|X;XflJf?OHFxuvw6?=TIU z0?+;l_#J}Z$wO}TsK|vzlxd(a#+BL<6dMS#-H~9E#nM*kMNjI)Mcxv_ry0VbP4nAA zDKjcau?z0=0Op(M%g;CH>pmuH`_Rc6GX?3$;Q0&+9*}n7OD@WHSzQq4*KtJP&VoCF zyXuSWP+_d8d`aw%<@G(zB8(ZT%%@7WJd=mn(!DePniDll% z{ZW^WCVQjcjK(#m64{$MNpWl0G97%Sbc3$NJ>g<9TpSI8tP!^o3siYgQDrUTJMzP$ z1_c9Cpg5K<9lf_I!jrfj;!=lLTu=1g>T%e&RHr%zocPF2iR|jU&y4QOyt=-HRLNhIe}r679NqdNYYm2nSf))6>P-RfZf8hs}nLkF2x_e=(++Q=vev^_Zlw!XE5E z3dFuxhZt3lk{usgI0cr4qD*BiG@OZtpx0NxtGIqe?2<_Fl#O*CApH#FH@3Jydgfwv z8H1Jw=0$8X>b#XbM0yxA<-|r@R%wSFe%-1uI2=8VG7wOULVq)mc%X$;N(Z6{0r6ef z2HipZ09h?RTD9{>%iTvLca>TtWJY7kGk+H?`Q^SO@8P#g-ULP89!W}yTrX315h{Q@ zQevD+DwCEbcJ$^uq;^SOvZuUimqtSLCi3@FcfB0&rd&|(&eAx|!*Q>(J8^5tu~SN{ zVTrJQes);wlCt~;#2%04_kp2ER`rqQjA6w$e4^XL~ZGkZ!KSy z>xWc^3@iBxZPFcPM>`9%n=l-1Soh5auEpLGqpguSzJrDPduOJ za9>y>H4r&Sb}Ur6Gy#g~lQM69UJ~!ap9aU^tJCg8y3Nu);y{ zQ`l{4MGBiC8wCr6T%O68qm{*Y%Jrjv{C-gPQrHik9+i5L?=4-!c}%izVg7Rc+A8c9 z^S&i6f%1Tf8J+MPz6RnlQ#cvBwkWo6DeA`&&K{Zx*#J{%#JL!e#Fpb+!>wrUmbUR4Tgl3{f4v>Q-m%g< z{`HQ@=^Pq+Gjg4wfRc0Xc8-57m=+sT)864B^zbH~q~M!=7vVgV$Xqs9YJUR0N3|_- za`TbSPAzxZf7{N*c+SCYASQqEKlWDTS;d!`tfEp}#$z1iWn9ei^wv&}O!D5WXTK?%aCmDMe|a*-z>+W=7{P}WWcN~9%~0ldf* zxdO5xw4s zv*S8q2a&VheP!vd!7p=Dck4r=Oga9sI-$;WcPO{^h$fH8PrX zqFl=xNyD3D2S-AA>cT2>fk^=BrhzFiIsVz4=H;g^kc9M?T;aH~^`ic|aEoHO6#-|M zlCFov!bOxcPU`;WT0*3IL+>-VXIqt_*dEUU!4*?h++c+!dVJTtt#IRQ@b zAKPNvvhlgCkH6&Am@QTc;veMF{3bT|s1|JXj-!%AZ~HA9-(c7=vCqT=nlDoR%$m@b z<8S=Zg$NH*(|JUAA`1N_dZyb%UGC*7GWOG10DZ)ngsHp+WmWyqHCTw4dQoRhz%yAT z1&6UyxM`#Z7cz)eJJc3}Xh<+_j|FBx2(lgF<<8iSEKO;nC0Ik+l%h8~VcDiby1)@> zm6XPERfZm6w~Kq!Mqdu>gLOf)6VeH2ZF1GmLFYluy<2(gtV3tM%UGhkIVjXDmz(2= zTP`pIa-6QJLuY2XU@}-i82(CIhMyZj+{_X#HWFWOyFs;qxCMCxT6d2ay@2ja6-`On z;_xUfLUE_{rRk9*1!lI&bfE)Bp3w2a8GbI*Bsl?TzAZu*4pjj$v(fiJ@HS`HGV|qH@DwA{Mjw@^dP}XA zG-8tWeIq^AX+XaP%W567iHjDI!(-rFt>JxKZw!3j=oNkw-q-83d$^Ky_pA37r>1vH zU;jFypQlO-aI0@LUxtz}=oS%Oh^!9Od8qej!zMLu+bb$&{CWY|wn0ne1~P33Q;^giN<p$9aERo=Okj&R+@cu)-&z^Qp#-@d?|K_Xdjfl z1{O$o^$Kjmx$JV9{H7*jk2bY1Y}OfVX#Nl$x2Y9l*`fwN0o{QosaYt_bJP?aBmMr} z$z%-)byPGB7NYu*W2$^lTBJ$0RNlshji%RuLMQIel%@<_@D=eL0?|fnFr`;=>Zmc@ z{lYTMQ*Cj9STvL_y7>%Mx&6t9c4RvONkNK6B9NEz!(iw}2nTS)tn&^@KgOIE(7#Cw z43Kcic|(xBEF%hmOtOJgm=FSyY{4|nFjO>p8>j8!JTN2Y#(Gga6(7^ zg%81dsN`t)KZux2O&H}hzjij#p9EUq5|oBXO_qRTED8BdoEKcpPCyo#m`w1HC(>-) z33#m2_85eQgx{~3_8Gjg>@mZgN#4acrRn0}tw0L(>vu6kp=+)!K2uc&h>s_OD1ix) za!}t;)d9WZTi?IJi6{rD5==K1D($C}DdBrBmx-0Hg&KEAvGuIl<*}@(VZ?RvyyHZ=ZpH|CLY*!eVRx-K7 zQ#sFjX=jAJ#XYIPejJfTgv#RRQ5`-@*<9OFRMLzP9Y;`uLvQpp9c2!2#>C;`P4gdc z$wMqLs%GMzow)QGG;zf#g642%Y9A33%)zT^R!q*jx~&bRc>!no&DEK=qOj0P+_$$R z!S#S*XCp}@U=r=7)#=%T3dF7@G>Cu)1QEL6*!d9-r;TPEkwXxG8_48(wsd2&iS%&Y zH~d9-uVJyKxpQ>bT#+1kx+v2YfynkcPURsj&!yf*XS4=I&1;B@XK*bzVd)JAMtN-& zauoJzKL*jRMNQs#<(N$(b`|#I!SI#lV5O+R0emLMws!OSFtJ}jxdtIa%>K#P zdbjJ_QB$~_*#F|Dpb>IW-eVnhB;hFu)ifUxR$mgp?CVOPoU^gZq2!^!?u?$(UL>WL zCVUvPB(b^Ri|2XUfd!`ncXo7${u|kq%f)0TtDlK$kh%wZm8VyGK8e$V?+=FaX0bx# zO*8}rQggdm{`91Gs#6oQXhq#yIJ^1kUUrMA;&O0S>Z4&#(&o7V1V&E=DqH?_?5Gis z;;iyHdXVbyiwskdJe;Y5)oiw-$eiBB3f2%KvC2!=A@m4K3kp7%4dBMXIH+4t_3?7= z+4G0r8!u|S%z+Dam#yV<)`i$jGGKsRt2XCS^ z_rOmCq210r=14&h+YO}NbLK!CA=Do*(jG^p!qhh%Tl5(KFc?uFgFQ(C>z@4dU37{C z*oz#mHHAXZFS3u0ZdA@h&X`<7v-wBhiN2xGdCytVHP2$oXU-&RFhAwKrt3BAY{MFp zZxzW6=Ywl&EXw6&CQKKq@V%+v29C0!gZZT7-U0aA!LfI??AnaZ{9G<5k6MtD0zhFB zWUuDlZ9UZA++HZ;lx3ay(bzQlGE9}sJ2iTno6x1yR^W_<%5vo4WCbO<^_6CMqQbD4_?k59$?Al9IO#FIvD>KK^Y!i4 z^r^U|tC=6^MkQ?zvX_MH5ZSyvFIDF>O-lsgbQG4RSe%w zJO``>pHmrKwim1R%2IMD2Q3W0ifm`c=SuDuKxwak6FJs@~0YHW#O5^>53?Qu)pX z*M0-st$qWQK9h7LiLElY@0VOWNKg|EN+*QA3kLK~^~X?IIw|hZZXiEi{TYBfnbbp! zZ`u2wtNwkwN8*{N9lkefnL+)7g$umB>0=3);X;U7;TAr9V&NqMru`0DdIS5+iG^1Q zmhaXzgLwVK!p(e(?3l~AX@FlmvG9`wOsAiKald}*#KJzI@|2exlB~|3IkE7IgiaC5 zI(afMpucot;g^eh=ng3c_$wzCezmxVa)2@AG|h zyuyI~hZ76`j6jdam0Dt?XXF(!BW2$*NzhN%_-R+cxHwdZxj$0H=Q*}tDAORn^ghN9d94a9;)lMbXal^DEh=!zp{W!UWvd399 zy^&7B(K$RTJ_CmL=>~GFv_Z9-*T2lHEbw$ZiFEO=zwruw@a%Kk1VW!Vasr{x!gpOV zRr>rvQJ7ceN<-W_4NcgY0iCvL%7UsTGd*w1N*C8EB0xKq?f`Jy9 znd!!WU~v3(7oOxJWRqPmE9^kPCRNBWLb*+PCN!}o$)qx5Usv2UU6gP0M?zjih7RkI z0oDwZaK*gv#*(i7zQ;_2%KN)YEjq-_z8Knp944mbknkzI zQwq-Bu(k|6{H$;c>3SsU!-kw?3DhLiaWvALYkFfI&+KwanHu({3wd1~Qr=3rHW zynlo<0-TQe&;{}0KG^~d+k?x3C~@Xmka)LLoMZpAz`QR3M8~>Nxab%@8+}iKa;e!8 zY|JLV(vlHB3|~_aV^{hoyowAICYZ^t4S5G@j8<>f$x;xm;85j%ej#FPCV@M}WyRkW zTIXe<96dj|T;#SJ1E>P;r82ehG|A#NDrV{r9w=HIp@`@X6l_dL#4_F9+VuJIGBn9;ojxpWd1g5S2zC#wU=c-zdk~=^Lo?Wcj!k#U~DIO$$qU;|N!dq7rJ<8IX)j{0&5%~?77pp+<9H6o(b({$}-7Z)t;wQ;V%+92!&2z$_}JQUlh_i=G$D$#oyAW$J4@Qju~5%TzS$x`D-6eu%v9kU*!Tp~Ov z9^e9z1aPGk&TFhm%u)xq$!j9zBJ!%v7%$#lx6!;Ct~(VmP0Y<61*dTIbT`ae5s^6| zK6HD%+w@<=IYW|=m1uLt*}SY?q<(Lw=oX0F?#aLi#kB4lLR3X$IJ?_wcX?wT4yq$b zteQ^BCOi@nCmih>^=9hT5ZdERgf_8D0k38L>G$gzK~S;1Nh-z8^?7t8El(OQ>IUmx zh9_|FS>qD~xZvRK2PTggl>;rtqUe{>vG9G)96ZrzH|VK`+qQ7^0B)khRa-7cs+=zn zAnjXlORUJ71v#LANU@44j^bR144nijHrwfNF9H5~MGP>_Q5P99kj#Y#9@I2hsSliI z+vL*B1^9AA4wZSWfL5g~{EWzT}G!RKiVQ@W4a*Z?r$_% zBL-)qM$lLrW*pxtvCfb1%1DZ*-AF7x&b3@Z4GhYunvz;l+>t8LDkN*o8e56#&Ok0D zy_JZklxl3Lqq-K3jVrgyONJ{rD&7i}<*{xB4SL)@;umO^Q8;??0As=r1S=6xjBg9x zNH9fwLk|yafkks5G6i25%OPEeah10}vUC`9yw!y+QJ~9FP!sAsYQKE@(TRhr?!FScF|h_{v*=3g*X-_R9^;{+ zb$6$Pn=WyS27A25rbe72Z2$Sip06SB%2TE5H=)C@RB_kojRz;#S?Y(>X7OeB<1fCxqB znNl)MjKoU9AmqWfEyGqKpa|Y0ydK2WY(K)}%2`0COc<5L-ABAlqCXMsJw1uoA&;dz zpR+n$9w2v$9p^jjYcl>=XEHD`QTYeOo==&AYrb6AZw@JFJtZZu$^2zE!ChGZ#I6Y$ z*qREWk95Ti6y$XrcY2)mZfI6_^}#Q#i7P&Dd>%&GH7pOSIHW^4q$R}GkHBI$gbf>I zbylaNo#gmBPg4ZV7&x84N2|0pG@B8LI@Y5fL?AK;Sdh*`A*K+gqhj+=N>n7YAY}wN z792kfzRtTi6rg3!PH--W{qnP}{T!E;^+!(msVb2qe+50;3GO~&9UzHh)V`bXy8%2; z@Z$#=C^68AYm$GXmX1AA>vB{@5UPnYy41;R*%%n_5_ZXh=A4X75qF@3!vPS{3Yy>Q zGAK4H16U0Y_IIICSh(j;A7m84qnq zt;!PF;TGnW?he})W}%)pz=T}%Yd-L^ zc@OxQ@bt1W=auWbCoIZ6tvI*b|35CmdlJ*+^T#PJ0)%fw6Sxj(Goh6S7RvxPFjmgb zsnVOwAqg`X-6^Q_Y?f$*FWr5P9!vPeESNa$a(k3JgUJ)_;wLU?z)MM^ztL=l%NkCV zE?>WLL$Y`wb_SuP$ZU>$=YU0aP{fuXPdC)5$XPjp7guvA!Q$YGrL}Hvx!z?X;^-Ci zP+Sb^-Vy8$ly}ls^V`~JuE2kw-ro+Ps|WFs%yw7Eihbj5X@Rf7Bc2gP4eV17dRGRNGVOyl|UJKlaxT)asO1uA85k;wztIq?9? z6FPEk(M20Ii=N_E>tbcfjN;j37OWvIV8M4(jL@6tsmCbG@`L()t^$6CejBnY?lYp$ zazufF^&Exb49yfBa{XW({Djaj{T=?r`86v_gqNj^2r{;Qu}Uaf-)swxIO>9drc>`) zDt>B&fq_x>VK+0~!PBUg7=1s3Ash5*j9Mn(`H{?W%OVFeXRAC~-BBwiCm zlB5%~U?!+|A&T#q9)G%&uJF5|V&ZnUFa2xyB{kO15PY z+y=-%){XkGOY5+D)vzW+bGbVBx0pp7b?EJlZX5EN>v7cTH#c(2204D@nTBQHlISGr z!Y&Y4IPP(yGYbFO%GWkUiXnAlXcCea2@NQ&R40!5Dcz_JLIVTAS)oE9Q_!bko%Z2@ zG>H0{$j?Gt(YPuC6QayjlQjs-By8%w+rEW^I*o!Tl3B;TB&h_YnS9$L1DKWE+Uej4 zX_QT9RLc{*D?~D6A>=f{n;5e!=RTQ{Oo8n;H^M-JTSR#R8O(UKwBBni77I3&kE_&c zfRgb@S?)y=ns7i_Un;P*_Qq-t=t{5QnXr!0K~3E*f~zElHnBcf!@J@R2GCvK9_Opb ze9rDl$F9%;Yt=w*gR`U{$%>IIq`|ab>MBE z4~HquBCSTE`;W8E&$VlI?fWc>kIl0a5Dhgs@T_@xLg6^|P(*A17B?6nO9U_XgX=9& z2}bFz)<{WK$K&ixbCFj`9&=e(8&1Y9ZLyPvFXtF{geyL@dW<--KcefdhGNsOe{1X4 z{SGSzRlskOPOa`;iUD|9gMj)t!Z+IWwH`NjDkD7wk$Q`E=b}W_^LE~dQ;8x!f^e2b z6j;qV`I&F?iYiF8qWw&o9=DIZ3j=TzGTrNLuiZS*=UMFj4%<7qq$TQk!SVx#0M4(N@ zGjw>yhN2nbOh)sR4v1am8)K$*3MzkK#)dt?A#M1%)>F~pM{T0 z16t;&bU^6)oL?5@ha8^bU6G3grz!F~VAOYha=5Y&u+&Q%Kpg7HTv=8)ANPqbw+4)e z{Aw68>sUX|N0uI?>Mc8N{c{BOiR8i|B4$neN*cZ9KyvCK-OvoI*X=WEJkR++vIG1e z?~hJMO`=!HOqXu!vzW1RO3Sw)fxyr>pkA|#`Ei~J&&f6qcACcAx4zq8m zi7R4}wZC0zBGGCWw>ePDQft#9T!;de%WzOZND-$ctoz*0yt=YkCYbE4PPa*WbHV=V z>fql{4-5?-k7(9 z9x$6KCEsxJas}hR4~ocLorNUB87pQ5uGn`N)hMNd;=Y5(=lEoQGzy|H_(woNZszTb zrsATqBIit7!tF*wfeF3jI^$Jlx1;xrcc5v1;m)8k}lA+cN=fY-SEq41wn z`1d_AoGo3P9)Gm72=tesoxr(bWvI4$se<^mpbGW^Mv4@>zMVM)u8%=8tf+RDqIQEp zaL~mduL!K0%&x!Gs!b!B@GRQ7Ab%^B=q9%}o6MXj^8|i%2XQG#2?fwLKy9LY9}bwQ z;oN$WASQ{^Az6Yizt$g?T@>cf`J=^P(KX@|9)QhKA$ zgprm@hH)nd>c$O15IIW?WW{CtJMvrh*Sp*5gT_qfo9$bP6S<90>>o1O?AgKle>&Ob$i{G*n{sqbhw&#d2#&m>Q{55`;Z_J(Ieml0;x@UZU#h z>h~fm(Z_PIHJAvQyTQOdS8W39=^U8oxQ5#XwN~vHR_1ga1~#nz8GwB}Us=6hUza#m z1N^hq9|mA9;exP~B)ZMu->&{Sz<)AVaU9fUp!?PT0HDw0K)u_P!Tt5>-ze-tE_lP> z|7P`X0sf=8dP&wU(bwOu{%?hK62^=O8h~VV{`2bpS=d*?L$%iH8{Gd@{e!XfCeEJ* z|A!0jW=g93h5vRutnI{B@9&&g_+7$2m8(~G6$AU9Pb~Zkf<2!DBL*^D$jbcQiG@F4nLILL zHekSicw*sS7WX+?*#`TsPAvRu!akAhjAaRXPF^!hSOLVrnZm#rH*t|hg}HDnD;Sd~ zB6F9-*YpSb+zxgjQkh>H=d$#VUj|-qsIdnLe16Y8?bi zb`ISDDNO=P86nhcK#{uE#_d0)%~7BJ)M>Q4?2FnDNKE?0@9l$ZqKL*UOeS$}qwl6I z%m-XM{+E>#-J#mO9}_etJq$3;ewak%PX}WKMT4|R6x_aZPr})!1y9-Q4i_f#!Q^R8 zwq3yuV6)jDYJy@;>q2&Dwt2?LJ$DX{6Sx*5h|n=#9#aAKO$)%}pE7O*mAPS?p8Xju z#WJEbe{W)8ZXT8%*(A#}gGq-dmX)DvY7TgT2bJ<=6L~778WYo(c@sCKVVW9B_ z@3t1%I7noKMm2DRDkB{PRP>(-%6%|@lF>$0+bIC^%$^HGwVu?C+~-Zug+ z>PENH>-8J(CIOotY{QVd9)`KvUSnox3^fN7Q2i{SWe+}}2clvbz`F($R`ZhO7VQj$V3 z1u+EMkOEF!x=xwIX!mjO6U3GJFX+N@d3Zk@w!CZ>-bbq^v7g5Pj*07*Uwyp#Apkrc z)v#c1K3x4Sym=~m6Z1*~daC*~fIbodd6sAp&s0ASh$k`-P7eKKwS>2E{~YmJ@rmm9 z6aa8-8o=pl831uN;{|6xXR7A_^ueeTBtv^SUHx392{#i4@F%LD2f)ct+Qgyv@HwTS z0$_qNQghp=L^LjlZbrU(ms>|&>;*qRW8~DQ5-G%se>0e%(cJ14yA%M zLDWM?FMvxIt%K*&8U(sFj*ut09rl~+y*tfX0~Z(|dBFxHcxSN1MeX6c%NE+ym`)0H(;kY}ylH9p~*WG;!Mez_}5*AR>{%rt?t8&Kj$tx2*?R91mxwW->zIg9(m zbu)J$S0XKe-yN1h$x6MpI>Md5!a%}fa+2_C0FPN7>_2J0xen%V% zSBXiS2^{@rctgiZ3t2HJs)9Shj~@w1q3rYMAn)V=Fy>5+OEWW5(;4Fx!t7$yETJS+ zY(g78zjj2hDNU?G0oUvE_*o0#>@KQC<^Fhk5$fyr?h4OWp6(tYivjkc=mq0ur_>-1 z6CamL4SbLQuBsMWfY=j=8`k ze3`jpmV-W)9R*E9wGx*=L9H%gJHe?c3jJjXejH*3&atJij}znu3i33am*(Y5FSj#{t)1&lGisM9u zv`~;7^wbsG<|?9Urvz5xej@oWe3PyLoQ~wBY_7BJsSQz}6%BS^Nt-h>$4NBiIXNHVXmVhc}L0kCH#p)Z+OY2 zrlcd0)!Ndzq&E1fXvRCx32%sGSv;#n+jilSiIi>iG=GL8WhwYWyDrJ?IEUY_zHSkY?JvUil zof+sBYYCuSrtzCh{VCR={ULUQuWJU?RhwD#4B=kKuvcMH$z>3bm8 z-OA~+rPHUwJ9I+**XxDk7)f z;oL?fuChP*rj)~kYI&E6MUF7gn6p?DhJ_}wn>Wh}6VU^vdeiL;@-mPs5e^*Gx9)HZ z%TaEjyh)a~_WCooF5hw#a-7JX&YG%8r>GaHb zA%?AlKBnc_cKoahDoTh*e}ja=Qg-cZZO@if=c)bwG~@%^%rKdU^z-@I{JVI_$xs5d zu)$K(o|e^0ITex7=y2I1ReAL zBv@E-*%g?8>b@=ircK2hX*T{5z)Y0Sv+$H>D-r_cl^8=c`hF&I0}k)v0cSaP%1`wM zb3eAQJAhz}lX7O`kz^PxU#ooBbo$-eaxBtBoY=>f)+BTuZRjXsKVpCWNM*GFr-_^37-&{ob62~2te*73D+y&aknjMmU7%k6Yohc@zyHLf#RlI{ifG8>3%EYYmj$2R71j~WibdWPwR-X6jgu=pc2 z2dTpM*)Q2Vdl*w>*%!$%5Y}4AAskDY^&<@ng54RrX2#X!$CsNx~KhM^;b~*qY*%)4X{dnwfc_$^YKC$T_6VdPpbbn0G}-c^i0NJ|6t(* zbaan_3zn|}FFbK#;gf_u8LBo9uy4osio3W4SDg3*Q zY!9f&EpF9C%Y_Ui&2Cff0d;EO9jrt&4uj@!yIh8s<%W4U?d1Bjf$RE^{|JbH<{r88 zHxSc}f9Q`4A5Iq~9mdB_mv?y24{s4<5%73(VS|_mKoa%)#yG*kL1auR3-sgJUwAm6bu?8FqXI^-UyYF-qR(*KylkZ5?5#ZH-AHU5{YPz(Lpu58H{9QM`jl z=D#*Vpa#fMw40!mZ1JUosX)=`7el)ykYOe}@dMe+ zG(*IvkwM_oaKonZRFmhfVeyrg@C=u$f9`B)dRnbldZRc^Ug+z}Xq|D4f_0@^1boN< zX#ykR;@T=Y-|74c8L5k2jFWH-BnhHgy~cpfe4n=)%m=ioIWrmQ3L-Ipai$K1`B<)< zXlxy@OB)0XV>Xf{8kwfq+qN%eXme)9h@K38?oCQg=(+|QSb30&e`Ez6v5X-V5ld^s z5h8fL-IU_iUDO5DzYE`7uMcixa0j z4iba}EV^F^B#z6)qjuzjx^!h2KZ;?DtH8NIc(}_0RTeMY=H|fbj-84|RZmW_Ex*D> zc1fy%q1z{vQdxY<8BLnD&q@|Pw~5i<;@ORCfr;@^Wlmh0!tGS~lL+rq>=RGBaM2zFPhV>cq{CetAc{k-e|LpTzGt31NT|wY zgk+sSurVuTLsdrcT)+s0Vk<};81SCdS8LZcHn`KXN^&X|)`h@cNkg3&WI79i`t3cw zMa3<`e12=Cxyi8lfMAatJq7vx1ni(DO~$-ry!(h4V!1|rSf_wuW0&6u=8q5{33q&} zECc^g#F3C%HBm~yrQg&Emh9(vzzLql_R|S#OlO7&!Ing^%^?rxm*PFPgN$5dnZdJ4 z1SVy1$Y{fG%K^zvlz6nHow}6`ygKD%7NeyohD)BveLy^E8O35J(isR-gM??4&5Rz5 zIN-_`hT`#-hr^~;0H+v9YFx5rvUKKv1ZR056?Gku5bhG6g=$1qD{9{`B;xTDFe}c? zNkTWzE8w9oOZ!5Y_Xztn6hfmm7rt8%Y#mF8%HtOdq8*s~$T&GzIi2C@pR+mTou!#K{c^ZYVFlFg>|=?gA$cM|2S#P+-9HFLG&z z_%?|zRC{A1I;-nmZ?|Eg?HSy6WhX&i&|%3xCUe4yjD1E240}4DUHnzc|XBLNL2H3E>3};|Kv{yd44o>5wO+ zi<}8eufnTrp_J~9kOjf_hZAJWFR>`f!p$C&e5qKn2L+CiVn7|yVM(UfS9=RPg~#@I zT?hp?Gyrz4TN{cTTx%r%j3pZ~X8O&dVhZ%W8$9JhN0t2c>Z-A|8TJy^lWw|YjsgOm z*3bEk@dtjK{KW4v^bW3*LHsD%?5yzwKlq`Wk|_r_XhI3J9*c;%K?Q}IIc`JWxP#q& z2V1x^z8R-b0N~KHYQ!iqIAY&3^V!mlT?{5~sHq5V?8Z@$`;M@MolX$WPN`x@RXuJ) z6AxtNAf5`DEpxNpmUu$1wna$U`ZDEqumcPcoY>vQP#@M5REJA?R^3S8jn$1j*gs&@$v zwD(b{P*M`1F$j+d1)<}J3*wbWpiZGXzRNEqG9xQ}e{%n)pZ)wp^4Z-l?>&*#ahq!Y z(duK+)jzIsp^~1xdA#}r-h7m&SZEzHYFvZ)u!O5WJ?=zgP|sGUSW_{-F_`n!?*q&e zSxtkzofFf@qwEV-m_7VP^_NiOBp>RK?fEZPe@g<*G3b1CG&W?1E6+mZ@^fr&*%EXVzy+MoOZmTJ9w?~xZTd}hD(=&k+MNA>#;?ekUZ za0>r_4|%- zgXp?~NRWOTnsvC>BTBcoiM(KMeh~FPsW!xJX>EkKU4}{k7fXEeG4*PK4virpYFSo? z|NTyl0M8fzUn2*}3TF_P8VuX4VucWo!PmbxLdJSLSmT37EjoU`bDKXWkdZ@@F^x8v zqN#Zs&8$%OMX^Mp3ee3SA)mE^xa57<8ZDO)qfPd$m(g{RV{QPb(cWVmJI{fF)6Ne9 zQSWsAto-{!^6wAJzds`XzAgX0Bme#={~fiS14#*9TC;+L*83buwBAEnEVrI;5B8qa zJc9}5j9!agDHWALzdwn#TAyfLCNZ|2tv)m=pyh~gTOS0_y9M~;ou9C>qvck`_vGx= zZWGzNaD;}nq$e88Wn{UcHgg;3$Autmoff>EafE%mLZSD+bj;pQq4$sGdf$2O-C?;I zZabgKJ&Om)IP&E#QbI@sew&O*_Izxn5MP9hWV9>2M$-@SScSqM|HJzj1yvh&>K6oc5vS7(xcKMi2HW7h2;ma8&Rx_P=`{V?SwQ z|Ihs(jx=^x?5Jb^ZgPQv%sQ+9NRyj#or)Xup>Sce|Li_S`#u}(KRw=PU9qE%_ESvg zDtx`etywbP(Xwn}2Qm1M&52uY(FSOI z{s4%8Wv%LBMr>POv zqnXdZp%8<+UMaa=B4fXZAV^pX4TFgdDpxS=qzfa|dumDHOW8b^VJLB)%5zyT84)yU zOE(~>HhWn#BxPd|DTjj;R-0V3%RZ<;UlRWWW|$085JMfoeX0M2f{31d*7FRWbZM3$ zz&_7_afM-|9IxSe^ z50ntzMHT!vhxW%~UgB0=`Y@n-_Yhni0o^-?RB<$PKkpV?g6?=IV2ckF)iN- z)q_C7VE^hdXaKxWPLWRw{B1V1K0?uwK8-)E(GS z+qfYE+bqO=_`^f$6rw&@Rk6rhQEL)_}lYpcD z>3BGjHTh9P(En&%9wTN@aQK=Av@^mL}-VS133s_r88w)rF4__KK#e~ zOzv=@Io&|1-d@LwqIe69Ad_|2l_#h*Ta7HQMiV~1bRig2O0UL;10+X*2@wm`A3*al3drKU)W=2p_!(Rs{6BW#)f}PCWeKgN3imvJ#Sc#yau;7LiOJ8w_KJ zBGm|7Q(C=ImszY&myG?TB+ck;7f*??fuZy?0AD9rEp0K>gFX;s#fF1PfYh2877%iA}G5~pu{gSAVxuklO z>!0)JxPole;2J$Vk?P=7qYkuhRgj#wx5CmhZ)sjAREl-qA8iO?dAjX?`}-A9!TH=Y zrd060Xb6rLl4oJYKAWrRNEGp`QH1M>P{aqb*b2=!xZ@CpYa=3z$M)V2!3)k^-I^rq ziZ}fCizsC?chU_z^Hh6;1N?Q2yU3#Egyp^W;_92V5vXmy^BB(jdyj3ccW2<|veMk& zd$03)5?$R@qEHPR-;J81?go3sKL+^)Q4fU3?G68L;8rePSp#l#Qy!9lsX8L9;&P5b zTMQXuVu!vP+L0k}rOii$*DT2q6_OT%VP z}{kiREvVTf^bzVCI}KjEdN@>1T9q8X`w@fqwcONn&d1`^yEsy}?)68Q*MC1(I9=h%@}#%IsNde-J9PxK$+mJ% zWv@>eCAhB2N;?_hHFU^<9A}NW>LWsXZ100UHDyCWNuzD{NQUcoUIPvFO17W|bVTo1mNUV3$Yy7ba37cWhmoL_t;YTZrWcUrfUJ|ORZ{3FLZNp$MK zc4ry?a8jbf!waY^nv~y;CdCY2pNjS-vxkNw#%X9GWFl0bA)CLRBjEaX8$m*FS;OhT zdqW)=KCFcE80tZ0vv|jIE8!(u2~$?~h&;g+J9C6$(Msq%4ftpkbe_R)Spj?RmQ&7t z^^s^TxK<*xCu`yBQzg3B&2TG&!`{LhH|DFQPnE8ZHcB_CLlUpy=Efc8$SeR?799E3 zUcG!}ex~&Ny?a~-+?gsdm)hNx^3W^Hl)i2b$eY_#Jd~yecl;6dkG2z@&KH2m1J0M-%Cv?!h|NKvG}4 zRpvo?>e2(~cqDBMa)?D6Cr%y)@sXmTA6O`r)ZRrbxgAD-gvtKFT%X2Iw#sHxPBuFd zx?_3lWg`-Y2a(4njxZmgyRK-U&9Jn_32d&}K%2++QvJ|n=6&fxR2Q2I681QR7Q6}F z{pDj|*X<>*7?ys?FQxG_LN0Gol`HlOzSzO?<%5da8;8*OZ0cz){~4-m%p zpWMgz=52ick?-h{#^;KK@r|GP&Xcg9bUuuKh#+$_bO?&bAlU{tadzuMwE$~37}M!l zA@kFCFzgQQOjmG??cm00$q_#;l&|RF1j@?3N#VkGbXo9pb`D{5(Bp#n2<;#ei;=1$ z=pNvi(ehj0x4&VXKpSRq-u3L@+!WcfiMn94bXwvnbh)#RT0NqzXc9?+!z$z)Q)a+9Ep zAj2@mA}7N*fgs2*QF)r>LwQDR2#%PDD^)H|hK}@qD~wKYt2C_@Vvl`+Fadu=g6Gi3ZRyO0S-j zxGs8*Cy(FfA4@FP`^+d@>-N?#!1CTFVx_;28v@6tO=Q2kh|h5Uhxc1I{MY6lvarD+ zUqq<=MIMUwPD&WrpgUS4ma&5$BiQAHE-^Q!Q4q+D$bF~2fh#gySd#<;fgN9cGs3hRqXko&yQff}I{W@O1a9pmYb*Y~bgJqRxrd&BfLi7F%Cz zec7}!Us-H@aItl3vGvu(R;~3`tG?J;UTm$j8m;Ert<|?%Ym2ScVynH_>Qowl)@9y|-JNt*^EEtw9TCpw=Dyz1!MqZMSw>_gY_X?Jl-{c(L^(&?daydZ+cH zi>)79Z0#+!etfa@6N{~XbFuYrEw+9VgZ^`it)FV`w|@HV*3VQ=w0?HsiPNp0TWtOL z)?aA-eCrole{r$(i>+U3{iW)ATmSYutzT~aJFQ=NyY=t3ezoU40P_5E4$NLgHcGBc#oW?VbM`LGe>&8hY_QWw`j~&}-k~*%?NOwk(HIl3= zd1m6c8??343k_5}c1me^?9j(rDBYmYzOofs2(P?CDea?BC|g+y?d$uWbH45BN@Gdm zN&5KVU!uA9Th4dBvwi0~-*R8O{5uveTD*wSE+|v6pUImS4bqwscN>68?T2elc%bc z6L_n?6%`i`)x%}k(v**kiA-&3e9|x0!&Qe$=^8Z})WhXRij`cd9U^>DM3k}h5FE2&BJ*==eH1k9&qqD6BP8f_QAg`7W~E)mh( z)MBb!D)=Q3+r^7|5Y(ooQkB_yc!PrlXZYzV`dvtk`vvf0YBs2Xt(CwBBQ{FeWV%$I z9j{fZ0PKe=3#sB{jd5Q>Y+YR_rBekz36>D?!X9}K>M78GxsmjXKs8qcCsx&}6N4`u z42Uahijb)wDQ!T`ddihj9@v1xCyt*uc$`=b46`L*vRP6*Fs@q30hbaQ3pc77j9?`< znMK|0ckI36?mb@9@~fyLQZ9RM*aH?2%j@AHU|sPGekuSxm+wvNP3*&8a4j`k&)y%d z;-}=qR25iW4~eQ({G_Hraw1poiz$-ztrsh$QuR{eqRzW?5ps2@9(t30wTj1Ns!%9R zCnsu8JvE!GR#L^FkRsv-^(*0x&U+I5nymOikW3d+LEuwiyE81*95nMzK8%EeOEPgeX1A8n?6 z2vG`JerCZ zB{EhNYg1%;uY{ZBDH-@_JS8)J8T1=n9IjRA6Qv5w9*b@d$`HxX$5Zm;y_mQ!8V4>t zl$%U&((-C*9NY|7o~FN?)JxWIa2&?x9O@s<1yzupa%$m=rcyJxDKrkVQ%sRYBn!DB ze*EGjkQoctli^JQp>Ze}bd;FIN&b0|9rDH~j=?&ra@4iU_BHU!^>A?l?N$px5@sbg zF-!UMmWE(fFyw(%H5k<-h>KwtumZ58dcFoZX4PQ6B;HD`MU=;D|*<>gULM@X}FX#-&wS}QT-XtkG zoy(B8FH-oju0yj(s&hpWLf95Y5wejKqYl%_Kr()iuH@JT5iukYu7Do@C~+f~oUY_Z z*vZ-gUM~jB+*2r*!g$`xz!jS|sNuX)%_LRQdYf-7+a@Q?vavthoGuj#sWK2PrY__r zdE`QuSHbj@lJFoP@-@|jU4hse(y(q87!RIW&{GO0U<;N}KH@F>%zN)jqmC=9_>9V*YlqbS~) z*td5m$W{G83>@c(c|$Q@XGk~Vhe9Tp%1TNj5nd;K!>F9Bl`|L{Fch+fusxnZ+^tp9 zpqBJ7fHsW7$$}OuI2bL##8NR;Km#O8$l1(*#AuUn$N7iEtm$XSq zrf0bH@4o4EF!Y=mlnc4460s{PjohK6@|ZOc7Ewtf=sa@D+YRxoTp+_&8C|}`$tKBW2UEiU_RNRvPN9lF1&>~p zAda{VP&u-&)ma{QDEl_2F2O?su#UwVD^)U`O;s=kz*GX&7db_%&nht4E+-+uqAZoPP^f8gmePo919 z$+JU~d%RswK6&eHy9QqF4Gnp>-sVmD@Ps{BBySo6kMCiW#ek4ezKpZ0M{`!ID_(d?6#M2X1_HqHx zfKTdY65eCELctsNy)sRcAPL*>72!Yq-Jqfm70Q~%Xqn>SE^OZwW`BL_7V>QQDG%|bC8TtvAT!R7wk{4 z9ikF@&=IJTKT`%zCsKvL-{X<3AqZ0HC>a`JIQY9qF-CH1DiLOcOiQ#d*%WGBo0NmF zD1g-0x5pzJa;TI(L>7dTv;bT{5q99q!Y6uXReX6ba||RrRPv^M56TJ7fYlx~gU;D@ zkf%&n;1N~(9v(S4G6;($fuFwn84^JT83|=V5?I`FOEZk!!Ve4DT-NP^!7W|!F$k+3 zkgmd3k*^N}N2Z_Afh1xcNfQHVj=_^AXhvvCkfaMG&|J}AnwVrZkN48)*IuR(d(1rbCdCW*zFvzB|(^M^_`a6-wL z&73S%9R{!fMlvnIojhrgh=PjvlPrX z#V=PACyI_|R6GD!pEGlnam1S`%mz>WMujA%g%rW!c>;Q;qL$fTR87EWWHC!Y@Rynx zlR3{_NeTeq9nl&pfE5Ipq=qlgR;%S;|Iko6Q%vLonlxOfB#M4@s92sFQe_{&OgXrF z2xK3enko#Y2@@2?3Wf&e^mLt0Q_%|wDJ^-jzmA^)#F|W%Ob*5#(R0Z^L-}WsZ>nRE zpctA8y#eDpX$GW{bhKRY4D{NdlW1*$Lxh;`>9iV!i>`#5^g9V~Qr3mJ~rarJ92FJ$k7Le4;?x=a_ZE5n6leivJ`@O zWoim?b98v@@T0?rQRV2-2MW1FsWOS;t0{6kqeCt$5P_?4Y(|nfI)a(8ykW@=?B$t0 z!l*Y$BF(MkX$sMI%2jg7bwO`#DT7YvRfoG9zKwCo^MMiYDtk+ zr<`PpKp^nR0dz@*uP-Zi2up00Bqw5Ff@m8hi=(qjc1Z$Oj+aX3kO-k#1>{SWN@+TP zIH)!`7Uf0^6)hxP2i!N1?y&3W1fXxQi8`WZoK1>DJNcMVl%}DGSP#inKqwBeth4oL z(SWLKw@DQrGabl9)=zOb6rJDb=3*d0Bmlu|C$*ZJ@?neWqc^#!)1}He3aE}QcT-cv zG=g#OAItvsQyQbP<)!h^#kFJwoC;w2Qz{oK~kf1_<_m?IDG4t zW3nV`MOib+J>`=w?R4Py;cUC?%spzCkBPgiI&Kg-|(QIaY~IS6hItzWM* z(v=e8!Dj7<$WJh<8fTiqKvH{l9~gXf-|gRsRW{C510`~n)rwe(2{&^xEpwS+ghv() zORXnFMwZ?ggrgC0sa9!$V0}87%OtV(#!H$IC5YdqG>kV)d_(evGzLEkKc4evAxs%6 zi#RAEfLPKXZ274)0qme`i2U}D^(@dL;VOy=!QG(M-<7m-Ly;OZ>Hgz?r? zvzS3;lDvEi<-9o!PR_kTJ zSRU(3HjM>>b}AsbKcBjgk^uTu!EUGUPuW==qR0c5W`isM-68?wB-!9v@jNUyEn*;m zj+HvKuz4lCRTa8g2l`YwH9V5;K(`Q>#b$tlTKq$opdST4>lexx#)=ulPcgv3pxfk( ze}RIPyjHf{FAmlq0oU7XRZFkhgp0A9z0PKHa2O+wO*uEN*87|`Xodq5LJrDUxXqT8 zWl3$iFbLT!1m7_dR;KLA+E$y%_26l-JrCCp)q={hZqT*Sjs!KWSi|606v)ZUO_6D5tHWp$ZY0*& zB!tv(mDBdE8m`HQ9-8&3ql*S=z0jz16Jb2TF%1C27Nl~({({(h%WMO`EAl&S18G@NA zm&tX5m$A)F#|m;*4dvuNMC$0FeJp&DTSch^IXe@?1me z^uoR#r?O7)avqJ?RL&7$4m&5N4E0cLc_7|z*IUPulcmxmtSRsm z1A_KoVkNL22euknSOM zOQfvw;E-;K4y%Qr5t$|91zcw;Ma(F6U73tD0!k%pYY|_YbOJ8nN%rqxzt=EQI)?B@ zYz7#%o@V}2*cAFkxOo-_@UlU~?^7exy2HYB~rj7FZza0>`Ap$BhiBxjp; zXh0Ns2?Ctsp(0WSZkz1-fO7E$NZE8nJLP0!15I^kW8~z-lup>n30ec~_R+UsV!&D2 zEeU3^6@xcLZR2zxO5vSzfpJ)X(+!*zO-^FQfsvI|djn^~6-&xi8M0gb*kX(D4h+I_ z4)fpvp#`jMmhiN6f^x9Kk1K)%AOJ0W&^{zVV}ke1VKyf-G%OC*fx6_WnG1PaNj3C= z_(Ga$t_te_8z_@vASdbcN`^~2hS>8WB+?l{0d6~4exR_9(c+lb6y|6oHJdm|&*NYp z*}h&MP2~U$t2}sp9p~|6D2c5PFrCF31a0&q3RX}XhrzDGyQCeKXhQgcWcUVZ`5bDp z_#*zlREK^@W5fiknW|ly%n~#vgvn6&OYP!h@ggOWZn{~r8?jlX3teE7`xy-k<&amF!<#&i?h~>=!O){|4`Wi~qlf|Nk!g_t}5Sekr`p3CPNJ z10H1(hp?s&3lr5U-o`ok#1!C*OMo{FYm zDO=XH?-|S94^o}aR`_pVN>{INLM?lN|4wIT`0uPi;i=KZ8py@$)B5oZ2EZFl$v2s_ z%Lauj*=KZ>H=D%J6#N$R^sOfME!k&vm2b;_yMFvW-Hh7KMJ-eUNWUHXwoLSHA^pQP{`-J_`VsT=quC$Ri9eqG3H6x29$J&%jvof~ z)7hWVW!^QqR6qU?L$aT>vh{PCPT8LyU8GC?LiQJ(j*x4mb}TaVcPm7HS^fQ$?0Y!< zSF`Wca`wLL`}N}ovL95BdXFL#HQb>#?(-&mPmkIX^Vb#3?k|o@5--}Rmi>^?jNi!q zrpDvLCh;e;Kcy2tlKr3h@uS(_(vQEJ{XPBoF;naJujsTt$bMWuej@va`tgr0>!;_; z(;sL5mrnd8llVyk=ub@A|2Ao#%KoXY@@Fu1${K#!pz-JC=`*JGUzn%Qny1fY|BtTx z&)I*`kN;}&|1JAvo%rttbH;FRG&X#dyfz)LXdD(1AS}_-9<@4k~n~u5uT>-L2p5p|_Xlx0lk}%kR9#+KdB_P!3qFJ(dg7K6Y~#u~rq}w44aj5g?QQ z2K;b;N9paTemjN-q1YIuAJ^$8@E}xq#FRKmB~HDCu_*w<)l@}7OGC6Qc^V1Ar%TjWR^D}tK&(e=dc#57cItfqX zc}(SE9&VNq5Z?#yGdK=r1anZ1xoJ?BoSOMpyDzW7%N1ShwN8$^PJuW?S(c^XbqjXx z`U0;h!DTXe>n(0Pp@bi$^yOhh;OiR14YrsL{bMbJ4w7K~%yiUQ`7os<#Cldk%D)bX z=U-1higw>b&)@7MyaCU;pWz0qu<%-d;~>&0F-`ewp5WMZdj=-hNfT zy_eqJr{CUBZy(TaAEdWm({I0y2cgD?%+qg}r{Bbrn57S!r;p%C`u9Ig+DGvuP=1Tj zG*y0^lJ(2)xG%r!7W+N-Q44{DqVIS$h5){V4VMKX^99|B_yad(m*_l)E$*(S*+vq`$%s zv;41JSYN=4q3z$`#i0DRZq66om%qbH{_p8Wb><)F`5&Exf5NkY`X%?}pQ+TpI7R;h z&!)|)pL*-&tW`_hA#(U0hI zE2+*Z`cV~o>3OY_unx}#(t7u0gZr}4ec6N;gZ5@OXA55P*U^t^Z>v+3!dglM5Z%&G ze`V${e{G(=V4e{9(ghI!(~n=Yj|hk9R7AzpV}2W&HD&TU7zq)+T5UXBE1TT-U>W=_ z>>R=o9oqJ$Qe=+@EhnzPhAvu#9m~EXTqj4<62^V&IiVameStxCYm>_mvfJpo1ca-O zX2&4pTW|!Djtrv(YBIloVN%Nuf{^I!~|%+L2f8jn8aS!Y8DG^IIF0uU@Z*?^eR}&#tjoWOo>cR zr8JHu4FrQtiau8j0ILZic3)tXA8)2&h8*bnQKnhE%&TxRdhXRv)KgFsO zr64zR05CPKc^?|^JnRa`}KKxV*I~APmJal z>4|X4{{w!Yw%Pk=wMCtt#bqSCkdjE(N0)}zE7dfKSzL~R4G7r(w>aF^n3Ng z)jC?Lqy2BPLWeEF*yR+il@*0TiC2@bcZL>VaE6t(%wVG(UE+Y?Dd>9z>kue)4!aYu z=!M1L3|*~&MU2Z>_{7BvawTQfxS0D?sIB9PYQinQWl?mo%h9j-$Kp6(=PXx|GFiq;{q zA{9;Ds8%PjvRjzo#X=PA&8Bek25T-3zUz+X#~SI)Ylbl9nlfF7t}D@R^?5e`iC_?f0x;y?UnS z{98Bi8|l_FJvYB{3%`+mJ=62&e@(#X_pg_7Ds!Z`q{*jv@B9E-NC+kuxqznBhN# zTm-Dx^Ca#?piM*u`0my<=$;wB^i<8Y^o!?Qeq z5#GC+x1c)U;PNbwbW~*r`=Gd=fjD}PDv}(QiyB%G&MnGv7y)vZ2J)Z)iDa4$1A0M5k`TD3Q#jIJK+s)yS*H+8XY0?_!nHW3M4QS}h3V96 zKs!vfCh0yQIuS*KAvSB%4LMn#_Ger#2bm}%p1G1XiqI&mXy$=txG7GIwjs{fg`67x3e3va48ZPxb#d5PU?Gz` zJgvk{Hui;fxx-^2-=G%uR8u%efXjUH1%R%Ni}O5%XTd#R#v>-S=kW*VR`DlXe-MWW zykR@X6D;$y$jrY9Kfo~m6#f!}t^9et{P|}7Q_H^*e|7upvd`WAng`+I zc}HdJQ6!Sa>i{&L#(9=7cjL<+-WsFVV;N0-SCc+92f9Lu%8Q48@Rh3A|P;g5m#_g`AEm8V3RxFONJw$P=nEB zsi+Y0%y4epZak%;8CS*bxsI{R{~@XXt)&fU@icXAv{s$glkfW;LyX|C~SO$f>j}lM%MLA0UI=eH}B798WnTg)qSipisk(OrG4sktotxRCWQf_bV%S zFOii;^Oq4>yBW=2VnE!2*KnEMCdqum{p`2cLk+vVW0W>wO zTgexJ0>qy-e_%ArZVL}~>b_IVXGomXAsr?c3Z5p|-N?WmA`Xj@$bjDg^OPj+GawT4 z!9x4BErsw7KyN0U{rQ)+$jKjQm2q_+xsIxxxv9-Hm;&8b)8KDITU~L_YVfx*h?W}M zpTFkRTQ!Ur@oB!;*&Q!`ZlUNF_U@#>UX@#n8NqkWpM*a(HwmvP1$m(9QHP7IL2WXT zYeD8e?wHJqWPgN;qVON@m}G5Ac(`$=1UnN}L}Cp4Sm&*84(OPkj=zf$#=WL8HMOen zI}EuCRp`QwJcqWL*(8~SZ#Vr<;4njS7%K$0a@x=I4@A7YB`Z2LH8Ea(t#fKN^*3VH zD!e(y%V=NfG0uLab6ncw?3X)+tdO%q)W0x@mb!e+Mc{_02xRDv0^Bt^nJPC3!O;AL zU=KiaHjK2Z(6=-f0;e}|F&O9^n>NMZwvHjU5Q8q99qTWNndt(A6~>QtE6)}S8MNkw z#gEUe5?#AjYgqJEs3T(V&UY;9?F#Bz@ey>RG22w^R&?y}a*jc?99~+QmTu@c_wdr1 z!1ay^tSDu@gKz7YQtk3+OT?J8WYxEJjzF9C1*ueHL0H4lg zpD_jge8*I2SAnl@%64=j&h*c9jzpVG|4he_TQI$gvC|H}VoJIIVV!`>-FC!cAw$x< zun;Gp3lJ6y2|;uL!qVc+^Kpm}K;nhTK>%qwC%fh$kk*Tw5B7Abzs;48I&`(@(fw$v zGq+!9g7s{`5Q3EeI?6j|&T0 z$!HfN5EFU@*5Pq6QiROkykKPR*@^9K)SQwqyGZf6ZYgAi^wr&hXq(90xadsf)mS~O z;?8{9X%`{&k1QCe*X-myiL%KpPVaYiODs$8w=;;AMxmv%)D0Eqp6IkB??*c(Z_G{l zaL0sd(^7|?c9YyKp9xn|Vp{T{&XH-;UHahM%)F)+er{%NcPOAjiTuH_1`qg4^Jncp zbWY8t6Q9^19PYUqYu%2;mGg_8Bi1IHztAycC4<&Rex5?vA8_k&^cml%ER>?Lw>>KVRNH>c%;EHjLlyXMmr`;yOMBQ zTbALGxC}hpIZAEHz(~iCUvL@N+9(5Qd^xf~3@*-J3}!l}OuJ$*(3Tibui}zW>l~{# zC85$WkE(<@@Ia+PX!rMBA{DR9u zY-E^ekb^&*za0EQ$7E?&4%!1!UrYE9n{c1&NTAa)3LCqO^PbMJY15XxyJN^PTk;Ftg0NaFGWB(-#T(?HB`!;9w$Svi z=zC}3(RRgT<4(Dyf-b3OrOjXJmhx7c|A9e#9cc61bl%b1DV<{)y$v81#({isQwK68 zH!-c=(m6(LYW2pBA;+|OUAG{tR*P(XU21jj3Eb$>WMn>pUN4M3uZEBmW?O0Uv2Lkt zHTfGD#Mgl)x1w#(F>PZyT<(}m?V4M2-Xbz8J5mzU-l@)UX;XXi9Yc<3?_{?itoDjL zT?6gy0))jvwn%jW!p<^YHlJArcDM1(7ti1BwkEe|ybs*G7FLORa{G zZW2F#+X#9sE!|HHTfA7Nz=cSL%)?xvEPVKu*is|%4*LZ13S zpL-_yo{nX(T>-jbr`$p{s1Dp}IihR&;*r2Rfk$UE55-<Vr5i&1PjpQ5nBu>pV|umAH#1Xn8J1}5QJjOPI>)F@)j!cO+26chacTHu=XkX#4bOE9`30AT9kpU} zx;4nd+BNeY19}0XGmoiVc`$oGB4a?Sp2a1ir*q8Ol!#>=Lw>;}VpFY5Um1o?z%|Xa zLaK2$(Ej;L!b>`)O1qNK+!t)@QCtG<>KvmsC1792kXuMV7jrl}4V0-y7a(lJO{Rfe zfUsCd45k)&y*N(KfZhR`HTCtzQ^_r9jj4u9iR?fE&TWTZe`HURbRs(TFzBl zPE@*%4s3t8H0@PO9^yDKMdSG5IlbXt)02^q)H@f7jEMeaOVfkZ(xAnF-sl$cxczwh z{3-kcb5po=fVGRcAa7;abl5K<#8U7k>7rJ;N--K({m_DucJt0jX?oCUTA4k&KjMS) zr|J8;1z`=&dxS05`YiGG;YX?8@!4+aXbs4pcMD>{S+PU0f*3JTE8@#Fr6S!dM&D9#dC|MJQx~{Riyhve zc|n|LL?OnE9^lcLAFV)GW-RL#MBB{h+U~D9>C3IGQQ{9S81Z{|;)6=1S_N^hxLx1f zEuk!}cQJ^TBj>fZ>piFOsSap%M0k%a82wi6q)&rTdofA4OcNkw~tc`mqw(5b$XF&?H5yrfA!5DM1R*k_)Mq^N+ zF{sgqG3D8ADQcPWE!~1>WJ(wFG&|K3tJehxi-mYzU4XDyh)>-G2#dw{cI&rTEM)F9 zFD#y(4;GmA@>fruziDstFR1**HBvO{%+;p6pYB!*tRj7iL9`sW^N-uRv98tS{miCu zz~y`Un|&RYuIe{mXXTI5Qc9C=&QfyhgR{8VKc5%y`4#JMdG$*A>7}1F`0?`vWR5P$ zPvMVylYhR1ge&Z&m!_t49~`C%+z$YWZnA^3D7Y&*x@-{Utj7 zh^kz*{pD^sYZX#BJ1>R&*w3!_Bq@!*I77F^+#{=ZLh)@p{LQTX4LKG1LyjVm`V6Vdd^% zw;i!q$jC7-EN-0-7H|gm^Lx*qGtmC0{63G4b*4?tRe?I#)E)S2Gk4%~-ICL~1D|0K zE!~0EBU9J@z_ye0RpY_q_^PpYw3J2w`6=GL8VNP@tY08{hS%@puPP(pQ<#sStMix)~dq^d>e$ zyts3G+8iSKI))q@B5v*$gf-40Tk|r`|5r@GHJwF4SSP&Zu z|55G*7)&z?E!BQW-1&c1x2&-y_6&n)srIc+>@{}=*9j-?IMhVv-_SAjV>tcNWnT{zkU%s23 z#Q6S`o#WCb-+!!Q$SwHZg^{*)UW`c>Ana6Nq3ryolO?fPdJL`%E=JgT=Qd=s<2X2ZPIdlf)*=J~eE zx42nv=t)eyS9Fd`o9ex^W5_Y}UeqlJtKK40*Fe3y0O4T4o?sUstdaS%Zl|V%1!nsE zMf>M(roZa6`XpF%GtFb*XlH|CbJ3^XG@aJ}W3y@f>2Br7+NMVsL`&P$+UM+gT7TWh z3}1uDhg8k?CnJ;k3kyZfaO+Ox7!Kly>|n}#vDb_Nislp2ycpo_M;t%jR5t|QE77o__mHA$3}o}?G}W!y&_Tbvb|G` z#kG_@UOKuyrs4WCitgsmkD>7eF`41^xRPrG96fI`hyR^!xnk|BDRNzpDr-)cW<4c$(V=)${)=cv_ z6k?kEc_!#5(g^tNFKaT5e#5f*wj!2sv zFLw;N1;@J>EbVwJ2BZrRR_<=*j&a2^~9*2wZc;RfHqhi-q`uU4XDgX3>0TfneLOKEF== zrpNq3x-_NFDIYw3@|H-P=%!8A#&%J+8eIFBjNgE^=IPL1&mf*phyDSa?grKNJKnr^ zyj;yqsjVy=gFEO~s=0|=Y8?A)I1>k$u@$#eZTvFtfrTP>_<#!TIBx%7$-$GOb!m&I zWTpy(*qAGL#`v{={``7LxBTj2EaAXO&xu-vE;5e@`Pl`d`pTVU)n1Hxube;i9_to_ zHCLyF0j)NgbW7$fk7Y|FZ;!eUraZi2!F?d5q|B?jN538;6Kp>sY;dKm!`@&epqQHXjE+FbT(BDaCHLbtufcN&_)gS zz}tVI1NpDg&)4W@@n-xi#ZTna+n96I?Q;G+f~8mTbkuEhQRJkXI^T9(c3U_ypYv_F zaMPc04z~%ByWo>$wfJpafUvB-j#-_`KZRx7OZEQz)A)O5XnR6SB8Q%NnPse+^1!48zWx|S99$nW_uFWUph@SUQse*er z-&$A41l6Hzo~!Iq zi*5Tomb+pVt40_f_`dO4Ku-m}f+=D+o>5#V6ZqSA?`{*u?%j1+U%QO@9of)nn9s57 zwlO*A{DzKs&^%@qvs>XVv*aA127ls!siCfeiaYwR?-(Z~T2?Mz(=7IkvT2 zPv~N3yMm^g7=j_A#Pq3SQhY@Hy+;l{a>5fkfMZnWJckVKCXl~S)MtZmr(+P>gLSP8 z!>2oDM7xGz$QTCIBh3B%!Sm_!=uMI5YKfB!Wsw>)vrqf zvBB&^^p5$}Y$+2NwYG0rC=;=9r`duyh|fe&!!aYV6|K+H0p83YUPvQxk1-O}++?=u z7qy)r%WQ3fvKWRN5jNbb*ub`8zhf&p0(q@W#>+ZpOS>lH9%C|W$JlB_hZAK#i~z+Y z=bnyHj9HF51;lrpd|>e+`qz>3^+tGkd22%Uc8iWRAtK0MmnLL03$5B`*vyJl(EWvR zG`5HpQEj(0B&BZYZ@rBIgLokg$^K@BB;{pt6B9T)TC93%GUi$mz4_C1JibG5gN@03 z&5cQWV6T-y`Sy<4)2>0;-^`$-1`W;h{Wh*e(KL$U`wsI-=NnFiY2u;1+`DwZDA}MYnME&NMfPTL+rl{Co5KX?P=pXi38b*ie4MnMaH8 z?)_BYXU=+`dF@-hC-86Z*s;Mwha%GW;DS+gD|VG@6b5JUZ*XdAFwx>vGE}}f66`CEeLCwpAh1=T3YCq#64mMqC|eff)N=@ z=WGO;kooo9(#Q_Oujv-Vf|GgqL%Ep-N&e9VBl3!!6Wm%%l7F~c`dAYGP`4l&N!*2- zVm%$PL|uTeSiFooaxDYM?A&fSvp2CfvG1%m=-sjRj=Kl<-aUB7-I1~2xdr3t%UK{V343zk`~%K+a62#dw`ZaZSJ5LazpSp0jp(*?q!HeL(YS4-(+ zu{M=NNT5QS%xKfa`{AmNF3!J~{;bOX8vWVApRFJ5<*!&Fk*cB0 zpr0&$d?qZVH@zd9wkuI)%l$;PaKl8d;0MWSDOvHyYq>&(IZCa(MRE37ZqB|@yY`LR zr8i>mvwTUneWTmD?HgU&ZQlqbdLtB{<-Jb!jW#{mH`@JV-)I|@d8>tMCkv%Tjus8-eo(&9A#SzRfWs`N?e@lv54ULTaRx#CPh$_9ya z!ep&DC1uRY{VYPUxaK^_jpM6Slf&bs3qJOF>GucyLTMWB%dyd?SjEHYjF0aY$ra3a z?a7qVMcjy1ALC2NaSeJdIO)4(u7n$t=`7fS7+i9EHp!(g)x#~3R1F3h>yoKrsc3RR zk=l6JQyS0vX>3!xRL|Zwx~LYe5@!e>M!(@Irq=Pw@iIuXuBswtCqTBT z04Zy9%5Y^8@A(s4^%4G^hHQ@IPvZGXxXKdYEHGxe98{#Np9NX+v^`8wBzr`4G*7$x zs2gO|u#=38+Sz)4KQ?WE!3Dn_-e6Wyyng-&6*g*kay{}uJ=~x!N;ZY++55+;fHw`K z!oBq2-{B-CZk3{+=^ya=8;g6`;DiGLo~&8{;7yGs5)l{?@OMyFrbeHHnoUlo%562E za8DSFxd8`Cq=}m%;rJ#5*zDq~qn$1dZcUZTh1o{bR7uh$xM~ESzDlilRao1a z!9qoWy`^S(&oJZ-%pe*lO^|YC27!6!~3q*a14B;^_QsZ&KY^t9=nhuZQd>iJlixS+7LJJ zfUa&82ocyrI7(IvswZ%)sZIE|HX~polt>!`blpIk(DgVK!QR#vxIRw{tf?J5Sik+|ue#Wa|>JwtcD#jadl`M|B`vR!-$A7_FyDnOebrxhAfzIW<)(*25i=OP@+j zmnw-!raNZcfpZra6UYyQe4DOxk zW`Sbg<5(MvTugBz`@2~PJJg5ct?_KyhrTUlz|cSy&J8l@vrRiLLhB4gQkn{(;R zoVdp%#i_{|c-B z71sXC94WiZfwC*imCGD3xx!doW~8pvcuJowUxGMDll@I*q2YB6GxG8*wnbtHTz#Bl z10#s%&EiBtKckhOrP=Co`Nr~NR{NIaJOTUH_+J`V?DoQ+oDBI)%;StU*>w6 z+R^EynFB|vK25EzP#ZR-Sv|r*_6$uBw@-^j1%38v*1u znGVk}adm6GA&zRxX{uZAa=hME=b)-SMP~D1th;(djCgJohS2le$b7aDR{j>#^Nwbz zE}XZ-`_vXJJ^yrJeR~{MTl1qwv?MZ>z9SB${mG+?&UeKDbuck>A$@NgQd=FHiFE7- z;!v9M-w9zPA~QM{rMJg{bumkGA-*#X@v7)Wre7|wABh9g<|HEP?kp`rtRE);5i6Kb zrXf;4;LmHQpb(VBnX$R(5VZVJqb=GqjDU(w$6NqE6+`DG&Csdv#4t%0UTB=I3O0Yr z;H3?A1TSYI=VJ7(7)DL?wv1_{j+rIq0F{5G!9x3l+D+G!KzF96F!?1iYd;^uL>qn$ zfoFVfm3LE>6*7L;Wwg;eaqGmVY%Y-Z5RjDhEg?LJzkQ z5NiGwsr|ubwL6(vxxM*NGhkW)BdD~TF}dJA+zeb(8pmctE|`xt12fk=M^)x8mwt>Y zM|Ai$r8L?tP9PLe(wgGTmKvetUuUFKbH{*i=R|J3kH=cq!-%OmP2UI9&CdlVf7!IJ zwZi~uGGkI`@E6;ji=lCMBN1?3YSK^AN4boqwgEK%7K4+v8wRI_nU;&sCu8_%!)j`a zQN1IhDRUKQ`Tuq`M9kF8MdVZMB64Q~A}yiizrQsi4RbjckxyS8k&61nhNj3>pyl6b z5V^{%PvOBg{(m-xhgN^X8TFvi7;z_`+B6wh`JXUY#FWOJ9x5F8cH_^-aEK`ljVO0% z4CaE9|Jk|Q*ON)N{V%lF{ylE{t>EN;*|gt6LCn0SG)wwUa;|m}r2^-k-gn$HqWbj+a)jI%21qDlw??zJYKxPKiv? z1!D;7qLiK_uPCI(ecX49dg01RI;4iXL~vy#n$F%Iu2nNrb~CZSx-oeg#wd`>25|qt z49!b%KsNt14D?|S>f;MDSf^ipgu%S2KK`b9xDw;IfCUoRi>lwU_vil@&FJd+Pf~Z+ zNOwIKz={BivgvF+|5?VWNv+kVxP*5iHR;!-)kstMzmooJKEYFKuc47}JuZdeWBfo4 zA!*#%NpS#9=JV`2Ib1({;z*<*`nMkOY2Ql~CQFrEHH(FCo~KLlppzV~KS%|KZ9!CC zMU!@(v#V-OLb%FIt-YHfs!owZo9@e#Qu-}i0eF;*603QtT98W-q*x>=THShV$L?|_maVi)O1tAUNT{}wdL$;)j28@ zs+Vy2qtzUA2*9@E;vltZ60n@;9T6ZCDQ=_yi(n|Mesf0>A=a|WH9 zaMNM2K5lVB5IeZ(`Y-(0zQBEP%%Qnq|7=V66;mjgp`WmmDk=2UW?i@6^@7q1Brd zYThJlV{P0^@nkIUctk18s;=o$gHmcxm6DH9qEvX3>WFu^IT*BL@AKj?t@9qPRE`j< z=nkws+I@w;N4VYDIl&fT#_kq8Ye4{SYycctSy&3)3#*+>(95u&Q|+f3Pent?^1AWC)c^Y7Ru4;YZ`#KiEl>7P!YpL zaxf~m7&W`YouEwH>yc%ed`q3zUBZnjM~yD<$xyndB4DMNYLR8zTx~YD@J#E^p&=Pm3a-#-MT2W1$VHG_@UyrGf)UTnrrxS%X@?DLz&k}d=@z`GHC7jfbriIa~>QHC1vj3#V<~B2_s&orO)WUIQRp@1^wYYFC8O33|R#>o!$k z@G6&Rg>7Fx20Yf`+6?E45!Do>y4UW6jdw($Chj9LJqVn;jp+8C=64&Jo+NZnRK2U+ z`V)41ixTkLV9c!A_NMw~)Ad~tVf=y{)W;nvrhoRT5x%}DN;B12)12w%-MX8$dOJ6j zgxy{T1Ee=I7RuO1`yI(LU2l3Z2LR#Hhi1KRed&YSu%W=qnoyw4s};ie++~3d^g3tu zMSt9su-CaofJ)PyuDj$MI4{Uc%3whLI7~(4pg5J6z4q`+CS_NFPT}Lpp?f?UrFWdM zr)+VwYtVB}+DdEJ*#hn{+;Gk#!hpOS^9mdc6d>v)ROeoit&Rlf0_GK_RGp(F7;@ZC z!H}0woj62x^CM|edMTY4Yf<7&I8M+@#~5tbh+{=6V1%PKe~L&;{?9nvf;WoTsIU#* zC<>!OF?jnMdZRc?{%`SwgukZ*3Tx#5K@z@X68>2d{>>zOSrWcN3A`-)RY_QMy-rw+ zCjeb$5|&HCN|Ufk64sc6wUV&GBy5y~EhgbQNw}U8I1sm85^gjJFOme$B+xt@co z(j;Uh;hae*NJ5DcI1F8uguobc#{ESI>mn8h0N%(n5_$8C@Zb^8LN%&Psct0iZ4ILklgkLuaACiO*n}m-@!f%;` z-4L8vQNw0V$hZAMKGCcpl9EBd#h3<N@#`6EhzhCCxf2ZG?h>RuTrU`r`!%t#oW+qob zY&(Z@o4{(593BNVGJbL#A*pkSWqb_~aPXOgiq6Sq{Zs}~%q!t~dVAi%E!7KZgf+Faw_dN7R^92aflS?O3_TIMvToB0oVsY z*44_;P#>yN&E~<=%i((UnB-75q&$Be;iW|aj7y&zFU=t1N_O%rq&SOPEDLm#WrPKn z!_``3<;*$Gv~En&>Jc+aFPzcx;zkLVBxq70+f?iQkN?G;ix%ak%AmCegvy0dwU8T6 zlxNX*FBN#@LbX?Aga74ON-LIiQjpG-XA>X@WS??^ra1}F0LySvK%RRiDy1opLOc+g zQXx=9UE(uRSfocwAH6rD-@U!y#h*gjfM}LN@k_gVARf_rsecn zkuD4URjWr$iW6}tfFH#Ya|J@JR2ffI_TaoL1Qcr!Px;WE06`Y;JdK>*-d^UjHw@yR zCNB2N!Q+Aby&nGc_4OSrqykx7A_jpOIO+;3qt5`zVhjm(0)>0I)=n;f#hHpnM{sco zeZ{+wD%5=MDZf(ku&_+)JNWPqmmWEBDtYP^hr9#cK7a6T4S^OB!RJ~fsO2C7d?V~0 zFP$o)x@u(5J73w4|2-VPEA>q3L8%PvL2QJ0MBn4d z7%;(w%zh6)oN#R9^uxyq)xPtUvgvIR@gXLzr;Z7G!#NLYZ?G3!YwY;RW5Y*}ymAB; zAHr9Jecee~B%7+Gv$Rr1BeU#_^!o1uEe5#iL&FD8A3sU7N!+1piN*6u6CPrde&9{} zKzs`Iz427W6Bytai82kpq(E2{6iku_kB$tF9T_{EJarm`C%~S!)0>8t+^OMDrDk$d zwJFcGLl#OF5vf&<`+ET&L}aK(j~^U9nmjiA_>t2ijO*UL8Wt%FFGng2$?l{og<0@S zDUc&fA`d4=4n2BsBzb7$#K_p8k+IWJqGkLEF9`#dt0t5E^febHsU)psNUAja078Ng zR1q7-k?N(vo?`NeewHm7llFK|?D3$wq(TRnGY&MrQo#^`){EstYCN#Dya&7|5~l}< zZe!!#j8|0uk5OSx8Izt6PPqxLUnuk|c=wW+@7wD%M8%+ywMx-DbC!{%6!0=R4*x+A zK-~R&&F?2vDwAN4g0{y4uYv>n21Ht@9vY$hxS$TXHDb+y}fyGu)OOt3Wp3^#G@>DVn+ch!Ke+nj~ zgz@^^9?vfaNvQRKu~N}@m;v&s9Qqm>WkxBfGY?pknNSwY5EC$@74JT8U$i=oY(x{7 zFadnDsz*Y0>I_!I3Bj`i-jKmWWQGKeWXBT;GR+YP`UmNcfx+EE`y!x#(OwN`UlTz7 zOxiD3ybw{ed%QU7KKVU|C^M5EujU322oWK5^iZ_BvsBeInV|HuceMpS(i9dY};%mF(g* zfral<<-oqgUel^29d{JuX+T3!pkKELOQ*Z1{@Q*ij#!wsKP~j<0JoY5vZ=CvW-rL4 zKpcpHvc3YDGRMGSRmIEg@y6*g4j*F;lTECwqmM*12L#Mj<|)(^spaF#NJu{3ueBsv zyxnmvHFJSHkA49^=7$U|1qajEHlQr#Pi(2UM0o&~Z)b}V-JdT2^ zH2s8$yr@yXw8y(>MdDIJqiG(VUAMho^$zZPLkm2>M2U^T3hri;0gJh$P-4c&^s&Ez zThT7Cmq1tw$d0foZGa4_?9s~YKCYm9 zUx+hT(8wIh;Hyfi9_}~IvPQd&g3}Y&5rt6C9t@y`0_K!5n!p>R=};95SLBvpTAanM zT})qT=73Qa^IWdx0!uWuuc^78MnC$T}CAnmPjmUDSHCsyD)f z{c37Pcu*BG>Vm7C7(!=w+UD&#U)i;Xe#`iSg1g{qJQj`f)ty zR&Ib9fQkIhkWZxFUU|M%Lv62UjM}>WDLGEu;07rpambPx^Mqo ziMu9TJJS;RdH4`Y8RbtWoq)s0LfwCn|LT6suOr6LfJ@ei(G-(Gk8bMFUXkj!Rt zh%=pagvU~V1wRn3?l(vbw8s`@PffM9t!XlVjAD>6BKraw)l-BDKA!GpNO~!1OqP{A zanmocUzrjJMPn5yAP0%qkn;6H977WAyH@(AX{0$mw;JBv3FDP*zIJK|%@_IMk)gp0 zW>J+13WOUIbmg@f=4-m0iKS2ug${yLrIMQMSE0xL;T$_y;t8^c#iH*76EsNrOQs!h zE%<|KAZywT4PffdnpWV+)N5ZQ2EztGsLg@IX;T8nQ5pnwky0(@ATokm#uu?T=x1cIQ|*_kyVbC6OObN` z1;k#h>TG|%sJ$xa4E=G$T&>tZL-bMn zKs$nthj0Bs6?DsCp#zg>tWX+EoZ_}~s<V%aeD%`e` zTRL^C>JjvJni*{1o!Pe=#vsMNi9`aAqq}FK!+qKEjcif5-=cHCKI)jQGDDo9W>!|1 zsn-!p1Dc=1H=O$suF?+5>&P`mb4KrgMBW|T8( z-k-2R$!O4z7C>yCGuzlN!wJvNyr(&g3(0OP?5S5?Y+=V+bfcZzoa_r=gt1qEVwP%u z0M@kan9&%qq*>iH3riX@?bo3>H6J-;aw1{4d9279fIDf##t@0cN{s6%PeQLc{_BJS zF)U>=RB}p%R=p>%)d2~ZL|_H8R^YR;W}gp1i$!CnOtWazVRCDi0_9py{K;}j?9ae; zOBUA(ZjlIIz_Qr!GwakM1lf(#pMz<;;F$l45N@ljGlUt zC^}6}oW_!nu16>B=jh0A1dyqvYoAeGajG_nJvh}Qe-%7QTZXWx#s{uVpD8dcoFpT?49;Q;Srv87Ekp_L&rAP(zQ4XbxzgeZi{voPo% zPE}4rw^(bj6-n)@Q!!%+Sv3#a$F^ADGaMXf#yl6^Ha}bGQ2QN5c-sSlmQml`R^@7D zz1vz!2)r}*(=^xvmIqbG4wDe-Oz>VwIy<6jY1zi#EbxV#ks59wJWI=9@wIt33L#XB z5+{{ICC)gLiz*+&gpodiUHvJn^(%prKePZ_p`E-UV1_*69UJtBa@c5Pw%Czq2>T;N zzy~ACJcFYMqcjx7THpc0A+~C?mrAMYaL$0bmXtuHA@Um^v7bzr={NRAU+ zg4wmptc^Q&qlTAuYvwW(iE6%sUTv^dJx!c;9WA&T_t?I~17a37HkcXpr*JwiSV^oc z(g!n?W4(DUOGe{64TP$NXqSkn@L@0|s6}mQ$_$NK2F@_Q_Mc5uOR@+zkeI-IX*ghW z6;ldJ|DRl;jft6sVMO(8Y=Qf1#f`qLaLGs&tRq*|z{~HCjxLwf@Rf#_x{TGywiyjPq+*wuN-;V8A zj1qlKV6az>DOjWz$8KDF>>;YrtRK3Dz&`fy;$yF-qT5~I5%Ez4U%U9&>#3k~k)giu zcXSPB)krX$Y`Htp;dBFY_}0U@+NA^(v?sId-P6OzMBU_HJ|XjCX#qH#`<#onu7fMbm>Lh~v4_G|j*fBC zX{bm8x{}xrjm~%uU%jQ1aM(vu!Qyuk{zux6RBUw+Ff}=eTiYI31uea?n{=*52euT9orOebX(E{n?1nH zaN^_u!tw6uKWf^X5u_lmEIp#siKE9))9E|>fBNK+gCn%*Ne=m7 zV+%#G5v@RIlb(p=ysa0<@^Tk)jJ!7Dfb=NHGdgzsu`xvvPB=1l@Z`ub9K^F^=P1=qiYtYaEBYn3gL;Kid92H>|iWUGvstED2q=&3Hv9DO2rdgR!Nqr<01P9;wtPaZ%0@W@Fj zLMkbxB4<9iDVliE;ZHFf^d@uV$Tob*bevPFfg{}$WG3{SN?ITY2xlo)2gI!^UEaW? zQXZh!XY%`WT$&W$P6>B<{r!mZL80itP%yB^yElhRz(g8&Uo2nAO9TW9AhWup-DSVW zqe1N?Oap41-HETe6bhKQoEBAD<& zm^A#!UQz|q97zrdjj>HiLWyjQ7^%Gm!od!w0Sm=YmDZpLo~EoRVyZ>Ei;lYUdPZ9K zLy(#rqaZth5g4X}E-Ecyt;VhuL_wPkwJjPTG}AT2sf$%Ws`v%}LJFV0jJ4SUa{*7g zQ=|_>G5Xg)HMs@_MbyD*Dzei%2Tv1<2hNeaO=okk5iX^(Wbwv*I$eoVuIO#5IO`Pf zs?)fix1r-O{B+-nlt+Ze$M<+$aS+!=Ep^&Gk&Lh8v1}{Ri}pG*A@?^l%_JX`wn;iC z02wF^6u7A%fPHG@vayGJP6gU>4ufP+!x}E^RHjtiMSIAZ(bjY}?KDPp%;gL?KFSyE zwq-GfckEzS2V@!uVDz;S)1WjsflChNs;fadt1X6l5NJ6eLj(LYu8T)l$U}6%r97R_lO}@f_?q9(@ zDkb^W0+SK@h_wzmoKp)|49itqP&BsrUffyMLU6aS%9%d8=96==8cjr@f8dx~ttq2q z*FxX4Y)~K}CzYixc%}<?aHrFNen~o#OeiHU6RenAw1L8R`8aIMOd~iBnfE7<? zyQ|c|&rRZ%l=d{>)GO!;7^*?L@oE_R@rx4Y!0Amzvi*rWhv#6+ zGM22IZB@mpNejmEP_DQ-2S2g)rstx1v$E+0h-osLkIyz+4JK+K^YoF!51$?zIdv+c zK&-2#iYTXfJxeX<@hYlks)ut|w=E4P$JzCwOVl7?Tup+=lI|Rfu?xDxJSY$E!IeWa zFuO3$?Aw3#te$#h{PEf(E7EW7B|WyP6N zi~b%@;98YbtaLp2P6i@w(D4z@^gYgc`8ahivd6;+0ar1GKG2KF)PpnP4m#Tcxp2h) z)#W)yd({s1j*&ResKilh=98Fe3Axvf1wG;P%xMB*>|)zolDS#ZannP@(qsb+XE_|D zqhB-q0}We4zB>$jlu*lLc6Ad$z5k%BTaS#`;?M=gA^T7 zq%Vl^mMs?vUi)&qMmmO!Qn;FhFS0t&$GAAQpTMdC=a{qZo#2&RP^Iu5>Qy zjPbT5#)Mrv$2)Zi>^MmTX%5N?-WWaX8vWe6jieJsHVHiaYxG}uNTurvwa@a%!ADMD zm^`59PWijE!99QABBSUC&zW6D=2S6jc&WW8sahb__h(3Kv81o zHN{3}8st49N8kqr3t2xP9_xQI#Ij~nCCYGSNmSl+5fug{7H>xgDxhpN!*qtb2qLP? zjW`<|rwecNl;@92#_@3eWRMO)O-kSiF-)J8Nhl##p z%1$?xXRU9LXz!w-2n{4gP?}1S$u-00nZ68Y zdX_x$`mSj9&JMYQo}S(LAb08JT(P>VdZuQ&yZWlCXS!!Nv?Lpn&!T=v-ji(DmJLA= zEF1(Gh5!SC3>f-nTaax)7Hs$nHvG$w;SX5{!7vOzPef!!yJVPzkWp&c_jRxCH_ zyjK3cc<~Azt!5m_PfzGX_Wsso1Y;A#+M4|FO&QB50hj#v=5X(b!7a${cfc<=n4+Y7 zGU>^QQ1{DFb#fyK`M6w0vr!aVWuG`I*=#Hwqgq)t$K-~HDL;`RTo2Cs28MyD9*PA% z?fLupTLI3eT75%aU{|U=R0~VQw0K^E>pes_840MNH=Qgs9S5IfQAinF*4c7uB$=FO4_WcWjieXp1m6A57M?X-%2< zXci7SB^VGp453J~DxadEiW3OoB%62HxLzX1BB}0csO%bc)pVQHFEFQ0Nw-1Ec~Lpv zjA|M7%Yk+@<_@;bzX|$B+G}wvQFHZ6_E}YXIROB_Cgfi0)Kk`Y|3Kzb8}yQXTEjte zvhbHtduv@h_Ee+skQ?3RbKC-k!R%fb3OJ_%=V^^3l>@{2w2hnhR4{BE(`(zYdA-ac zzW0w)!~A^2LkUZ-#_jq^2l4a+^4S=%A>&!hjz_xW$%#aWB8l?c<$OTy?}ZqE91b66 zPp29*goVMxUORc`R8AM2x+#M@8A!fexh2Boqlno+V4?|Mh;Jh9jNVl;Rv7~>P{G?O z29B~G#6njiD~*I~bD0Be&GsIRPY}(roMVO>ZNCJ?I}9kLF@RQgs}8wjy83*q0D88h zY=FZvoS&Jf`CNFx41 zsZ{#gJOlambTnx0a8zj5e_3=|XxF#{OW3BrR!Ee$pixI9+EwpViA;(S1_!=yFOsS_ zEi;GnOKrfDb{`d77W_~nOin)I2v?Z?B}dqMSAo+$-(JiVj(rPLy!8BQqIT;d#F0}Z zYt_=A?z()1oXfM3$v}CqgxYjnC3E9-mBmUMr{)iBY^hmpB>Kt8Ff7z?Lj|8y54qM> zFN=M<01O_>x=7nbgIzSy)I7Ka#OAqQs~?52&#JsgzWBIES58blA!g9){E#Q(1uGpc zG14PISTXYRG{agpA+Z`ZA=EphvC0Oc+>o2nP;O^ZLlv=7cd{X^rH$YVk4oY#8jh`4 z?4`vOU2*AC3gfXlaxu>8o)U;bKspFp%r~+p;6~?X~zSrR}rvm=3zZi}l9zhSM_^ZFv`CL`R zQyHi~Mi)z4xqkUqj zFE*^N2I)?)Ho^o|BE*iKVFD(4q`xoFo8#ISpo9)vDNjA399eE4fRV+_|?GMWx6q}$6*?ief^1p4w_G(pb0}DecL_=mHsH(#l8*swicF)SI`%Q) z7mUdT4!*^$FR(=m3b)uJL(&#j;{$kUb2PW&gxdmwdiw-1r7bPv9fG@GV$z#R#&!Y# zh_YnjXx?1na21zxSjf7s+j(>vx*uxr7>a$LNFQ+#L2j*}Zr~J0^OS4v*xj4V~c{-Y3n)%1OmK3B6wQ->n?I0Hsi;&=uk*ZUu zS_Qa50w5!37YT9UxtyTMI0-N$c#!M8E(az_#y$pcFcv& zA*1UOV{6SS27e@z=asrDvc*z~ZflG?17lU=yP=hu zg-m*By9bMq%4|d_Ep7^$>DeO~eLNVxC=3*K9=C#qeo}dVGRV-ypM_o}mpa+CCA*;o zy|p8ni`G!fEdrJ+KSTW5_TcQ=n zY;stw-)Yz~u)fehPYmk=S|N~jrlb;K@Y6=~Vkot!{`;);4d3rt_n*c7J%>Xuy+{VU z4*EGx1n}#0C>Rf~Ax?lC3Vp1G%(!K=YaP#3>sS1<&9 z;X)mx=j(UMD18EsAKm@#E>-xP@%8z94d1gzEgQlM{;4`Q6Ks|YTQ!KRB2$iE%AIwk zr%;t-{?)rFOpoEu+|D-Z9M7jLDtrB0w)A*gli+wv3ZlcAuFI9GlekV=L!Ngl-oV^A0@-R=KGrP!$Q)5qgin^jo{Vhem?se+jS1@VElf{vNu!e=nI5~Q``8e}FuPcm3yUnNW!aEWl$?Zv>mTGo z%Fp3+DRk4^WLqu{g4y9BDzvH;FS|$=Q+2ZwX}9PyeqX#3Wmla@N{6z7b1|vCDhyiY zs#gq7U;&N+KNVcqbc&qY2^%q!cYpkPVqmYy!3!8^{}C>na%{cTMu{v{jxQ zJf_4Qg`3CKIUvpYK-$&|U|Vmm%{Y(_f}WZgOG)X>-7mUOmeOu0@9PCL(x?PI8FZTi5E)xLc8ZkyKv*w{U^Ea)oVTOLEX*73TzJ=(db-u zwe{}!%yUVFr(TLEJ`Ou>5_td*l=*|<;kc78Uyc?=vRFtuon=Jt=HTj$YwI_!-~86# z&Rw`#Fi58&^MNPW23ep=OvwWY7x1K{sgt~kxJC_!*W&}^{IBdFns>Gdh-A@aASYs= z4iR?z{Pkz;c)qs!yuBSkV*n9dBya+S_A@#;bT|(tL4&?l^y^JDcI+jV`p#hIXffU0?cR~AD$qh; zDT4E?<6hGe6k9TLAq@Hq2;p?dmkUFx&YbpwiZb%%hfbQ?2Cz; z5t6_y#=IEFAo?*aOQlaUP0|!ZikCVT;z`of@-`AgK617J73!Q`$_x=hz>s?F80Wpz z*vHP54cz4JD40lBb6^kD$cec%Z8tNP=$X3iI}B9;%cVV0CN7=*_@lkJFORK?LxR5D z-)@GZGDs0^QeqMSbOJj@1SR6$DI{aWJw#fkHCbhIbFz79^UJGGA(2ffi(>PRKOv|* zYLtO8J=sR9Od7uM_ z)m7(R0<~G3VPh$js`)_!duno0?40(IWq?Nwbj)quAj1D0`B#x+ft-1Wh9O6!2a}U=MN?Pxdre$bq!1FA!hx|zEzS&6npso-BWb>>F1^SsT zH9|GB9x~A)li(nCzQuKvNLo=ipCOquGP$0OVVh-Jy~7oMt8CzFKayB1;Piow-eiB= z<3G3^W2LijM`_}m!E7zb&E810n<=EmLI5d-InA*4%sdp8|##y7BN$}5s@du_Fsj$-E?Om2Hrw%Gs#-Zqw?UJPp zI%r@P<@fduQR2k0GMQ7TI=9i1A=c5a+HyFdkTC?E$ipJ5FlQ{^U|DC1T_jbVA5P)N z#8k7IV3u`E(ayFMpICT{{BTJ|a{nhdsw}5`Lca6dVmYfy8ksfPVX36bgmC&+h~N^9 z6sq9kwZIMZU1};*uF_8NkoYw+N^29XOyZrwh;g>?Q|SgtSAm?1HZh32B-TNG6kF95j7rWS4)%7Mafu-gNeS-PQGKO=e#9Ev+G2uB-d4lj<^g?prau$tuq4q68SMMMRJ(fN1 z>v|=_Gum*(+4vmu4_SoM?1Nnb)Z$|{H<=>^IKIFui8DD8e|R7HvVEulis^baTW^~8 zGPCKlcz;T4CkH6SUNT=lwRF&%)*s~ZuCL!N1tJ4rqE(ryoM7gbQO}*s_Rvlb!+Gei zIak(c^Pz0XmtW;UN*{#e?}$nrBhd+v;;BL9$PT2Fp5~o0a)ZVP zNIh8VcTMqx8m7omuPln&)(CWzBdV;5K!EQZ?H|k$1r9R1gkr~S5w)se&hsTdvZ;wa z;dyhc$yVwZvljMiaV*5W+>vz_$~sU9MqH-yUazv~)RL|hL}2U9DSiWQh*iRj^;|W; zIU=q(_fw|shUg_hYu;ayOMk~pKK0lrKL$U7W=RvQvu`C<3i`|J8!+y z{pMTC6#VAfLZEg}1a=LUf?W|mAHJ_08%Ue)BCAmd4Ae2lHw9BVE7q4d@C z(NMi%4yI3B1|x=oRN#3?Vn);O_&6VxC_M&reCg|V=Lq2hoZ5>W)~z4KPzg~2U`s}l zbAt2(9$0pd76?@ldw^`Fyse6uN`wUJSMzERY$$qMSSqJv3dQ7fqv@QAtLgok(;(NI8z884qRu8Ehk zH{n0m`H-v@>9NB+jq%e=oFDBX+4ThGgW7bY`Ydt*n<#wM;S0O~E#=$Hhgc|B5bb*9 z17sp<#7Lcv6cdCiod1ato|Clx#B z^@@Yd^cbG8lixVP$(zKM)ozuzYr5<)_#8eAnRr~6{i2oBAt)=M^D0ZIewu=;H)3q# zT8ummU>p)%JfXv!noLLOn@sEr7E>287pQhG9w4t7uI-_FJ;#8j=V)8hRXZZ4m=_|e zi3m#LYz#}u94uiwjRzhR2sgpZFtG>TEI>EyU^Ch##LXNQh>&|KqK!I2reUeA=-yic z%)NeR{l)7fG;Z#h+$SMSw9)Um88M!0RS%?*7Qa5ez4e=341IbtE z=GFxE6+{yynB^##nFJPqhf<)Qkv!L$rC%LZDoJ$LmUMGJQnnLL= zB=Tl9gpG0DxyD!qG81T{yhqUp(cqLLzyt~`RcW}Q#Ivw5P)J~!s$U9AaTs}4!jzT! z-bm(DoHK*J%k2}NkS9!lmx$u#C+b8jqb6xFabef2VhH!1L2?ZDAZkX;{HqM4T}tp$ z>$Y&Y^d*|6$fYtpX{6*I7L&e=GB<#1xrV&rkp?H2u2wP~Y~d>SfuL9{RnEz;EASo1 zWHgGEN~P8!@6m`t8bXOF~+LK47?JevTDHY*HtFg;j7z#~jByZ|vV zqauh|Vhh~^IFQ5QiF1x(=#m6RaOvjJ-ePi{o5&tjbKd`n+sNS=hRoVDfRc7PH!FL$ z_zEmkmpO7fsa;!x0#;sz1xEWRhH%NPu)!xO`=cX063`IN(XIC9iMraMXq!(J#w z{38rROk{~uP&mOLIcK4=;a0V|g%l`Z! zqC|O>jIZr;5db|kBQZi@FhSfgnu8PN^Nbjw5;?qwU3P@11nQ9h6GTR;RnnFTY7`HSSroG=FxlYn4xVj@SF{HgSDhaUL!3P zX%(6KV&6?<>~wh+yFW!H#$td4sXdtFYft$mc5t9-lmh<9l8m+o-g8gI#rxYuB?D~aL1M!OhNbm6U>*`T5C zkWr1TSQk#8z8PL@v^T;PZdltS1py>0?yK!DVMyT`gq#+8NXKrXFxRf}ClU+jx{nTw z7zT|MT$i=_K!Ae%+7e%<=k`g;-+*idVo7cwx@JwNS3Vd**g$mvv-g*n+q7X6Qr{Zl z^qe}vHK}u3OR_j;y+jU(bwQ#C$V8}kiQ1}>UuQB_=Os^HDs#dN@pg*{^i@)h*|{q- zDz_1pF-sd;vV^H+LGoFWgXVkks_`z6gQ05kDi;gXmN-?L8#ca~EaFK9XPk=PZ+eVu zVDMn8yyQ9<1QtEc%~-{PxL=n8$q&~S#}5o1epLeN0sybU^())JGE_pQA8;sF*QP+a zMjDF=nkRQdSxvaV*lt{a0(A3N8Vu#;L{_OQ8$^nqM7XToH^M1-p7ol2Klr9#g5Fth zV6BWZ2o;U8Ku6rLhQSf5E;a}ueL@F@$QG9dsu+$`mVfJg<5S6RQh?F}KHI3a6O@&I zmpUUDeCQt4Mml3zQlNQc%TY~Lw?85d+a8oS=m@mw0JWa9j%^bsZAVTDBfK4$rH&0T zs#py`lEhq{FTyqv#7bRvd8iI>1QS20D<-#+p?Y`e*~8~++jPOLqk?Fx_5*i;L5 zeuxa3x7Lq{Vz#C71reK>;IwuVwi!&hvY?@N;X|=0{`1gClQ*gK0$O}Ir&B|4b?|OV z%9zmY+)@~qcxql%*f4cviN@YiEW$guz0yT#iEed|RFO*QNQ2mvm?vtc^j_k!N?(!r z08ZrnMj0PEl6b?G>=G$ozUR2}*_0}`&p0AvdnS+q63i3=ERmCF35vmDve<(Tif>fw zuUd*3*)`@} zCrWJn5dTP0sqS*#Y1XGL=D6y0OKbo)aL<^KUH5_ds9uL-2)WYiNgHUfg@B(&3{-|P zoO_-aKq-*q0b&l)i}Y8?kqTgQmrEqRR|-ZE*v__mVf7B4hP?QCUc3Q~(u^+&ZdHy6v8=*A$F~jb)t3!gkQG)ra|w*J-`f^D5a9A$ zUrHL>24e{e!$z{bCxsUbVs=sxB0rq61DTsBDC+a@@f1lpN7JKirkXw422Cf2rE9QO zRfD&-vb*%9XKV>4eca`CUwyFh>ZQ)BuP*zOH9q+DSC^lE$+r**P@NL#jhNo0BWG=5 z(AR@_>B*!Wjq&}a?PV6ymkHcL~-KCW!8iZxstCQEw#8giN9)?=}@(STR@l4{& zF_imsXt@f{l1U7^Z~j3^$;RM_3^F@X2Jfc+iKLsibJC zd4R1I<7qN-X^8ok+=)o4FFixfVAZ~P{zMpypznw*InUk*rMNyEwb<=$6XMlDq=>mgj>HCAdK z$y5itdwPN0o&FLIlNL?Bg9!-#4)+cp4Erx^Z|@1poYJJTLImzlF=DQ=a`G-!GKy03 z#nRlBgM|Ti7egbk?-Z1m>VCiZeq5RX&Nl%dU8t|1%^x z(tr>Xg$manNbsE_DX&WgYup|5X~3zpnj3S<1w|vZsi(Tx|Ej)O5zJn&V>w&vjoMO4 z32NV#>|{{tML1&*YL0ga%uwlfT{g%`w{G`xPiUV~aH-te*f#wX97BI&*z!7Jn(;W=?0s4WvvL-n{P!168sKRj8Q;P0rdf z-(?NI%xg-MZ?ZS~h9ok_q6YS|HYi#rSJmD+crcx`Eg1k9{oD=|{z16P{Zxn+8aEUVH-4BI1^YK)ZSB#p!6)%#M` zsg6>6W5~!+7b<0c=?F)7GtEU_AHa`(Rx#s$*kuw&zX7o{t{`ZbGcBy>Ke6SgMDk|ROhS)lF%T9O>-P%|Hg-2Ur>;r;tSmnh=f zYmzeBd28iJ? z_b^<7;2=~n7_MR^5k!3muu>wjtPi)$$GAVBk2ZJqhll;8`?KMR?=;1eZWVDr)ZU;N z<9LuBGtmD#-EC}HAIY-=_#yDIk0W6NC;Z#xJ>vSeDUJSSFCSD!n(&+BEeRTU~m;p1iJpbZBMX~5Uf|(7Q!O`amEP#cOzJ0%A`OvPkm2ZC zn{1<5%hgiKci%zylu<#KyL;dgFziTN(V!BY3uA+Qw1erqKONN~&Bd}!N1VqKuIFZ* z&Q-xH-qO1_-nl#2Tz?<`-@SeP>a{!CM3Ax{nczI2@=R&q9qqjSI&U_Mmuw%zi#K`#@ms;y~m$qUA(nfw*$WmLFk%&lxv&Dn1U5qjj30TgUlrrH&fp5^E3G4$tfb}k=%E|IZSuug(wP*ow zD(oz0_+0{zj9j57QNSp}AO#PWDwp`6vKT)sT3dzQC{`gY=v{WKr|w1!gw?6P3Q(i_gKeQgE1{x?sf(~ahpqC2y8lTmyj_Fw} z96!x8Vu=!D(F4Aoa3zL5ofc0NHwD5;Xe%j;$Ipchqm_#O@w^Xu4a~ggdFlq04Fq4% z!4{?I&qjL~5~J0Td0BFub={6=^ZSmdDov{{S6oO_nz%3b8m?YL&Dt4?XfMuSAKknT z<}1u^UmvlI>@L})!Kr`maI_mXKF*jTXSn8c)+&+N=mj0#x=T1_4pmE|S6K9s;;U_y z_aM>E_H@c4mv7&>HrTlN&U-g~5oe*8VKElHe)H<>Yn#_@-d(p#z&S!mn-@dEnmA8x z(GzzIf$R6~b$%dDN@$C&HQo#kAGUF%yq3UM9P&6(o8E=lh#0)vNN2{VjAW3~@C}CX z4EOF&XRzq)BeHfe*<%C{!ZUUd*OT_iaPY@Y6aWzX$)k?c4e`kbzlA&tYjVmUH+*Sm z1{{gUXjkI==)>iaA?|k~QTcqax68xpPIsT7O%mBpIcfo^%YLpBS}Eus+Iocho#_*; zfl2_40D%LX128@t+O#Y`u955H9Yw~^KT#`Vgh&JM62(t-@d;7=8bEE8`tmL z^+P6eCkAB6W3dAt&Y0OFriL&d^svCsk8p_xg17sf^7L8^8JY9(I)Bgo%tZp-tzdZK zIshbQ22!ph0x5B$#rgn}Jm#p&fVinRn94Yl4lFgdvLX)f@INvm zVHBSkpy%}rT96>Q+vr9bI&-*hie4y-ls1B595Y<$ZLTKFkA)m_AaDGoxqu0_x;VjI zEorHlvgvM5U-FDe;eMQuL8_OC8}uaLt&OKTFLWgbB;?W3IQz-&Zu6 zghCL&S{`X4C3#=^1}mnlKd!d(X*;)R9px!u0UMpR zq}(OK(YisN|f4TzS>H1>sxPXSwW!h*1_fXZ)nLF1Hp!o_ z5irIXRcZSTWUCmI9@c6;FPTMBCy8+QfYpYj^+E!I=10Uu zMKD)0J=Vdt$W{U@7t+?{#l{t8~*|d{bEr_X6*n;)4{6P!CJ{bzVW9}vS5!Mk9Lu}WpICZIKTvDwt6f5 zn;ZWoN`Iz+ixTuO8o&-3QPWbJKXY#L^DOq+ zqCqXDm;G76FPz)#u;7;}1tes1&c zuzWeBQoeGJvQ_xI=Qcm_F;pmr0h`r%knL9XXFj&sVc9Pf9jIPImoWd>W|xJ_-nQ6_ ztj@)cZGN?mjLd)EK3mye`Pk;aQ7>B&RaW-j`q<`QW!YaU5U=H+w$i`-vCY5F(k0C~ zpfY7^nEY2C+x%Zy{*M&US>Cg_)hhjOAKU!dkE7D(>XqbtdobEHbbjvRn>SdpBxK(5 zHO;@xn;+l&A?qv^(B&lAj#G0rYvqr9eDgnHjdF5JjcU=q^YP99wykK=1`O(d|MAU# z$f6hOc*tpAbcC}i|LEhJpZ+OS`Dah5!VQ!a|Ljj~zRTjDEQ(`6vG=!sYV$wl`=2e| z3!7Mp|MaIe|4WwmL@e>a!@o}X_{;L@h;p>@`ak^mE3Y&Il{XFO@cGe?{(#>6_Q3-D zrC)o93md~s%`N(zx7WjPtiL|!zW>!aBz73ywvG2mI#Z|AgDEe-l8jf#5q?>(q!JnyJvgyqzCQ44bdpU-vI6Td! z+c>AIx+fhBa7wrba?jztmo<}v7%#A@&oM^%{ROup=x{*%6cjna1qq;uxj4w;nk$Pw zCmqr#V-ScZsO5W%H!RGUudk^+zF#Z}`DpKlv%n=@s%Cxo6b2JN?ksoEy~+HG>9Fe?6-k+zn-3|c2Ex(WB==D8 zUOgDW(`6WPWAWf0294=HY+qUnrrq7~P&_Yj=^bP>DT+;`CJW40NC;ZnK7}%dkbDqM z6rNQ9RpjQ?p5L4q#O0VAiMQX`L>`LX<>%io)(}&XT&v}PNd;*LXUWirs6|k- z%`GC1BTK5JQp0YiOQvH;rJF)Yf%p|k;J|~1=luRKyf2gm0O&)A7y{M zl^?Gob{d%Yyv>(Gj`_^86GSt3_M131vSgtparImUxs1iDO_wUY=}APOx<~XnZ`0rj z(5-_GaL9WJwIo>!I*v!pOx1`6>4Mr~0Hb4}aq zSwC|d#0D{SN8*Lz5+}|{W^sWozm+)FT}gPhl5#m1jeO9_vy$o#b#oGkLFE7t!i$as zQjQnqRouHG44yGcxviDekmZC$_~C&tPEnT*2hXI`b7x~MAnpMy#mxfbBD+;$o67M` zI$OZ^nvIuH$W#L)4^5?@vE7Bv)%Ba5ciz2w{pR|O8{e&}+oJ8g zdF?LbTIbzsx1sxOuHU?BT6khvM1+l^WP|eH!c823ynF4c#F8kyBCW@w)evl(5>wG# zuuP?}Vv(&M5e5W%Mhs|8I4ccgt=h*OE@>|XZ5O_QTrYK|)^`Pvlbkn@qN1~lMw+M2 zaqn*D8=YJD|F|dV<>}Izx9+<1VJea>#7_`cv*}GDP#lPcY~{;~JsM7J{f<|4qO%1^ zhKjwn>l>g!BVRV9I%wxDiBKQH>1Dpak_P?1=hMRZnt^`8r!;*YcXgeVf0uL6(9+c~ zb-~2C&Q)AMO-F? zh^UJfA3fo>Qi$ild`s8$jsU}<(;k3f-Q0zNscFlrT*cPt}pt~VbY@D9(mK>Nznsj5+FX8*D3IucnG8NfI%@Ii&DCv5gO~wz1tddod13dsk2o)86bwJ~EP8-1xDSXT*=eqa^QIGG# zK!A7x7UK{XV_GV?x8g+|^M1e%dnX(NG9DT{!l)2Ui`F?F;MSH=|JePZeQd(bWgrC3NGB>uh}oe&lC1g!CCXb%_C~xA3Ri(zs%sILkreWv`~KD%!m@+LV#%G? z7YLfd9cgMH^QD@jl0dz`g;*cG(13xC*g%GCSSA{!tP)uN-BKI7ZRF}UJJ+C*LeyNq zS~PYU)o3J4^b#v`=3$_+dST^uhl=bQ@upHhCovp)P1s@~F z6pAh1>vWkoWQYJnY$>os9^nSP$qw9!X8Yj=U#*$$;#-3)fqtFR5EiCfEz^tT>$E6d zvq-b=W{qO6VG66N)f>UrP)RnTv+pw84ntl9!b~6PKBtnohK+L!VfY}_*+Qy9{)r}} zQ;oxT3Ada&M`4+~&K%O%??TlR^=8eqJvpgkg1emsutbgkJK;vqv6%Rp@27^rI4-@m zvlR<8GI|{^i*28_N5mCA7#@z1L_i+pj#@`>BMTfQaN>n5VC5XYcm4yOTK-%(-OC1i zJ^0-C)W#JYdln^%t;}>|fif3j8KU2? z)3*wbH~s`F6l7%uZiuYJpA>hNS_y7gti*3_{3}f`sHt0tA8q^vlqiNKYGqdHU*Gtf zC>8z4kZKM&71bv@%WW(Dw>JJWl>Yf@S7laMk^f@j@1e*)6N=bL`9IAUa!_8r{M$J7 zK4n;&U*`dp*G-%yFKQH2`pCPsUdYQ+$R_V!#5{E%<+R}YqaS^$;e4Ox{$Ff(j&pw~ zV^cr)|3_Er2mkADUWFq3;?w`6`7*c~c{AlW14kS4Lv;%X?&rPmJt@q7++l76hAxad z(6H~1r_8sEeVeM+s(58@6t#N76>M$+xMcmSgPCsMRLKw_#^*fyIjNLo%>ffIBipqc zX;kXm)w6F_mp57nEnGSeeN^2Z=D~*|;Tbsg{Q2w#(7TLf6rK=w-noI3%E88a>$kr} ze+4l=3ZC%FlBp|qcS;5s_zoaJ50fu2&``JE{ng9(;3-ODB(Vu$tT;;2t6nut_^S0+ ziDP!V;DFx{w~ubX4!6y|dDYe)tPyvFFSM9w0$6_NFb2nasjAKmVjciJa3o2ny8kry z>$JP1&*>o@NVvn=#+`AUD{qOa@WxvReTRv{4lwSF$DK8CnOOV&4{hwn$726QG9H0{ z#WX%i#%Fi9k?{`7 zoM`FpltND6$CUTn7CI7I&P*f4a-rnf!tP4gIc#Uy$p(9C#$--r*h~*4V%(urT`KY$ zqB81_-1CPIw1e_*`9c?SeI34+g-VhXzsiDfi`EaF_fodyFL#4&ZWfz4g9{YuFaYfa zjW+j==9HrReSOWL9^5Fw!+%fjzaIfB7dJ0qj^CjWd`X(cf z^fJ8AWROyWLUia+xL%H}!3(Azy>X&?Z-==DYaRILZPU7o^NO@*ra3TKV=@=S+NSEe zBp^qqGzbo2@{l47jnt%=zP!SBDK}|_!$h*NYDPipK)}UH7cX9^mJosCU>iz^Tw#f{ z+w*UBP16Xq;+6+a<@cE0GL@^EOD>?uijLv? zM}nwJfLtdN&&I4$G%}DmeVe|NAs8=7vsF(U^iiHi>q*%=sE14yRM)xG7!M5qoZ1_e z{Yj)7afkUv36TAT52!5ukV3n#V?&<-zv32@$pH=z#Wz4+z<2#VZ(fD%!R}U9uOKCrd4p;V{de~<>OHPif{||v|6ggSafHIy zZ7cPAxN;n8)qWQ(>>Pnl(Tor(h`^F$Y?kdcgLr&a5Kr4cAjRQ}5#VvlDvTz(M7jHv z{~RF^m?7TG~~h}$}~{u)$XPQ3|PFYh$iYTPdM=;(bUwyp6Ums$yPF^@zEkjWD44%*6;5m60 zzT{$jm)Qk%eji%|t}M7Ccu#$?6DdqIb+5{~W7iwP@0HGsW@d`bd&|qcyLpi718iWN zBAiPqGsCoTi6fvW!fUpe(?njDiy*$th<0(UB2x-ggmx6hwbos^?B>Qy%SkJ}C|2Sb zZK%>pX6Y#^&XBPwO5sEE<+ajYu~Cs?gN0kLv=>%61HYBWg@amAYRdIFzI-~kymYVq z^)dG$FDS#;Qfd{DWQISO9_@{w-XcJN-o+{Yqf=yeIm01BOIKw)RkP)u+(%2-(z=E~ z5;r*yWp&Lt3DCHeP#tbrDJ4&QmZh~ZL2c101WPZ|c6!0lDvIWl1!$w@3_?{1dZ`o} zh2w+Px&<$=6pksN(mo2u6pZ?|j*6Nq9wnHseq`aS|Ga?bYeVGh+|#Jg@W`K7i%*+5 z$eEwG-g3aH68)g6>P^&ngZraS9ZmK|#TkujP9=&rbCTlHa%?vEUgr*7i>D&Rq`TM} zxULafi3(L+Ra9NeQu*o10T*Q zkzJklnbDn@SJyv4DrYR;=mbtM7Eh*uh<4pPy_v)&gbgh2>Dj~HRl4ki!(v0nM*yr$&O!IIR%x4qs(M2JY0!~px2kvRb0PCz|o`>DHLt?;2- zP@neF*v-Rn@8R>Mds|7IQe*WgLiqeVWwom+@<&j6z^)j*Z*&0eHRwPpefiv%0uPST4l3axz>s034$uZYQTE7GgVY}XVt@rDodV{uTc;e0!j#Z_ zYoO4*0tLp+W++vhxIeGaz7ZlV5Vev-%t3A)fzn5HLNvphoekdXjPPjCcmaOG;22r> z$HNs2`_Uu!UkeT^>=ZwZXwxdv*bK!eL@4y~O2!-o7U@*OWA^fR(Du@Z2X~Lky~y`g z&fz*GiJOmK4X@)yyqNc`a0!$LOw5>+XaDNVWk=x@?AoH7g-g}k57R|}zJzO~f~7W+ zT#U%_s&-H<6r}^{-HsM;os^6PmK@!w6g7mqpwbV}`JLle@$cfe^Mi~8X(F#q74_9zNla`KPK=B2+vvvFs(hV6Rj+5kC9EY*n zI>Bo!B|9hi^+|mF)M`J?ub-Np&aM%gql637*dFVg5C8VN1 z8k_{s_%5LF*FfVNA7N977z`*&+X#5b1AH`)<^?aQC-~_zsU`(rbt&-zB_ay%Sqw5} z{Q;dC=P5bTczQ(N5adaRJsjqiwcPL!zAy=<_42jO;^{@}Z|d#}GId=fPsZkkS780& zXZ6^!WnnB=R<7`ueCxb{pYrX?c;s!qQMQS0TATQWwd=t}W*2ksIDx3P>RHbqzA+B->3NZ?cO`RyFIUv7GbfIUh&~V z$I+naUflE_2ghT+#Jz(HsLBiI#XHAD=9t(#<+rE!mRe?;7kQvmra%WLh@@6gx0UJz zPe8T-rYK5TJC#zREvXKWRi@wyNI)ik;boBdI`E*+I_JU#+?9TfXL+jydqhY!Qxa3Z zCKM*~KBZbzukK4~lTrFqV&m9xAF+eTV4m5K-QwksG6>uTl>>1MzSue8Xq<3dPWUqq z&dyW(#0cRvctif>yNd$~nsT60%LhfnhZF~AB6;b;Dr12`0O?jiDF`|KIb7xCr>~KP z^p{-WxO4o5{#rIrKj& zoP=DNPEQM*o;Kp7OjwLsJCSlRh=a5fZ{N97+T98RYV1QwiJ<++To5|7!Uiw>bp{UnG7{_GT1C{iQq#qr99*|w8e77U5c2Vu>VTC zRrcQ{D7Uf#Aww?l;B`ohcVNgn9AJHMgaKnt-^!=B(47ZN4_wFKNHvMIhu$oUu<7c? zd{i+Nu-rQO>JCs9LCyjf_>V2I6IuAu(#K!&s%43liueb)G=Gc*K0v`zpCl?p^hsW_ z@eKz%ruLbdz~hTjJ`)mfdHIE3PzZEbS*;TyGm+y<@~losy4uTKWbCK20C0p-&s1LX zu9|-68Z1mqyJ$L1z%!X84V$qGxM^ex7c!_;PiZX#(~x1(8VkyR5o9^S%cre~Y^`Xc z9h`^l4jm=?Z(KAgPVjKsrWP?IK1K;BqPshJsip1PNGeYT(yl^PuHE%{(HT z$XQ1jQIiWQ z@(8@19x-|W=&UpiN!jA!EG@!tr|`;j(}cv&`j(JaCwgOG4l} zqbcYF)fn60uh1#6bERRhF??a?y4FZalj6zJw_dL6Y`1RnOkJqfl~lqKi!V1R%E3w) zXF*>w#kr`SBi2V$dvCY0ya?9eBoM0oV%T#0Q$6mZcW8H{aYUnFbx=+hpp*S0SRKcM zlnTT0jii+JwA6!p_$P>e5LOeBG}`j@6)G`%lus%e2e?4rwNOVT2YUlQwS=P=KY>%I z9jHeMS3fOHUJq_Bc3S2ov}F-4c>>uHDN`9>sGzKP_7Mit3XS2**vPi0 zGc`xLWNbc3p9I*(37nf|mDEv62TOGsd7FZD4N7Tm3*^G4$_djC-<{!Y%x+c2E47e0 zMuv?(DgnHuRx27YP5VO=J=!#2-@?i25Tl8U7Lmhao?NZreLNh^Gj8+>zYFi{{lPO_ z$@=`)pWR$pect)O4-oyl(%FPt{b>9R7zy3Bi0DFOb)d~dy+=pcxF#wCG~*dsLq<28 z(jg6p>NpB0+caWz*rcchA?@EHK_Z~djG@&98!aBdEQNOxcGMZ+FdFHqXnw_}S<#Xo z{n2Zq8yyNhxg<(%8` zfvJa+W8^16Vt>pUiX?F!Vn1e*Q(7F(d?OGCM!aA`Xag>WM%M>6N`n+`Z6ORd`0|d9 z;JX@$?NS?)h>|4orq4jmmWPaZ4X-mz>&vVZRl$v;Es5*mVPLKSA7WZe)jme|ep00? z`@cRMyOEg%^bw0H@AeASOkQsy+ctQK(m;j{VG5GkLz(Cb$jy5kAb~dN{RDknF100w{qGMiy5Y>5+$FN?Y7a|tYHg!vVPJ)=W+Qc!Po^b_`T4}-H zOF4%K>!7SPIDv#$uaq4nmt781Ueu)TVNvsL6J}V@@+LgCsemzU0U-~--aNBZABOW9 zH-&9vUcVm(gD>%O7(Gpch45_TnCd>07I~!G>7HQ0M$`KsVN&6Gxjm&?Suw;W=#;w7Ds{*)2YR{FRS zg$!9Nl%Vy-1ZMK8M8x!9IGZBbACz>1I2!LQhHG~H80=N$4o%*2cYV1OB-XYxB>1`P zX!kkt(zYH2ulO{9nofFBV-~=}Auf9&SoY;#CuW^t4G!y5qt-CUF7d_Ykz_D&p2&4| zu=B*IBz>%U&++}G&Vc7fgjt4Mwz>Zs60EBn$l+Dqj+I`ltv9_tGtQiO$Bd8&v52lBSGZ)xnVsr7H z`46PzA(j|bGjaEqu6_%axaJf=>$o#@hKLE~;MFuMrsutTq79XK0oP{Z-L>zBu+Uz_ z?fa78dQP=-R3s8GjrP!BX7Qj3acT(-BH#f*gef@o+7ULVqwx@tLr{Q6$mDvdbLVi3 z^l*FcwIy0d>=}N z9Qzl2n?4$zgr;ygasI_cK_lcs-ec`{(D0On2AU5Ev#$tX&ajG7$=NvNP|Bqs?u?&H zEQ;D&OF4{LlGt3y)$6kD)QYPvof97de`C9Dx0&r^_A_w}Quko3%KU22m$7@u_@F!Q zH5)|ULqjkijZeniFE3}OIz3_*t7v))XSWRQ8)-82QV!1E@MtlWw0WrmF6b#hWy!yd z6*b5xjw+u6gVKiIbTAe4;R*|oI2lP%z}Qn&E2s1OCdkEyt< z2k)V^^dJueOQ)5&WlO;#wi*cB*Uf=A5HxQvN{mA-ANp|;i#Y=TIwJ;Th$l&4J(Zss z#bj8(c~O$JW>9eZB5_Q7qk1NC#?%_>*B?P9=7t>kELnkC7BSt67mGPqAMy<8_5dr} zV!-5EO?ty+cWsTTTwQ0vZ~;WdriU9ix<(G>lahM};BN;{r+zoJ8TR~~E~pPENJ)W0 zJ_xc_bL}<^^*5InDmh)5XSp{vjJXa|CG$>=>ER)4DT5t2Vfxl@_|fyx;8}+E ze4tOoEnScKk#1Dd_8@zSXNRcf?fJ^ax~6FfMUsue(zION_$G?{QUQg-TSQ4)*|#^Y zqwMEvWff0Y`%+Sxjg9wE5ZQ7H zRY%rc`>o*fjUNK&=L$rM*eWac$0QdI@(zVg>44C8!3zE6#-9eTa!}Hy-HQB~jX#ef zKU=^d#gFa%zqavr@g9k1LOXnKr)5^^Ki|B<+nYXH6f;@~Q){`+FQ41|3JaEayOrLG zef8YtH(9KX)-5aX_PNcw^%jX(%D8C-zjJQ$&$3`S{45yp`d80we!x<7&MP)a2J_FK z+x&|xT@scsxihdr|IWG1ztoIj+N4;)zkF`=ct~A80(@+KXU@GPL5v*wF>P!N0@Wpe|YL;#s640V`e>xrY z&R^)fJ$-^0K^PxcG=ae)i7fSU_|lwpzcXI!^yF-bKHaY>NEpCz!^sq8jNzUf9Q4k= zdkqPy?|yf1`|Wp>eCffr`E$JT#(AK?mUp09?}q3)9!1IFO*&%hb*}Gn@fO_@8!H?( zeH~`fYj@WLb!0!s6S^ZBD=a01F_Ie&@LJXa;}hCkebiI$nA%dd}wh`-8Wx<8mGH zp(L`1f&l!;olp1?usH8odQy*VF5Wl9H5cz$A2>Z3 zFtE9?aULs4Gbr{VXhoQG4cdhgZELn2?5X9YS`BHlpk3&!Pd6jyL89B`@P0QHJt0Z@lbV{T0PX|+&?mn)6OsLiuag_Qu*PoQVW~7{u|y7 z^e{PU_JmLVPC2-G!`e3N@O_aOf_hN(afVzK3A7{(u{F}1YkFfI_w2GuSy@b13w zxohEX=3vzW`TPib1UMbdU<+cfhb)0c?YZMBC#=X^H{&H#htc7shOT0ltdvnvPF<0K>zywY23)}F1 z_+A#OrDiLr(Jy|LHG@3#uVoPvSNg|ag#!vx%w*Muz5_GHgK0nMQc$koP?djvI|w$@ zz?0#!m+uN4^0H9&o}XGSa$Aj2s0Z(*F0JxBlErOQ%+&85C|Vt%h(HGhHYOxuoxSP( z)yv>epIX#Esnt6GToQ!AFB46hGj&A|w4kq<43*T))ja!RB8#ds+7L+ee6Y-XEv? z4s%afn1R}fG~WhBRQ&ineSZISPSC3>Y+x#J52)&DT&*;*9YW1W2#Ef54%Szfhx47}D$}a{$= zq_+ic6qF*pVTXscz@j-2nS!s3<np9n@Qir{C zOOIo#wF4|)XSFvOEyp@PDtNOg(B&+oakyv2E4LqZ9GrC@DzO_AYk)VKuGIdP-TlmM zJRES--6?+4B{tWzAUMHGC#R4Hx7?(X31kRCKw&@mk+}>5=^&e3M8bOm;ZGtQYGEHy z+P1`AO%hAzs6>PGwP!ew*VxoB8+`e%Pxd+lmz5Vfx9`G+VX5M7(;E*?uzk%Q3MtZ; zh1>b)_Fe2bL0a-elY`+vj~#^a!JU#h;cwqXHqlH#%OwOg#!;sh#RO#75;}3qwGfoD z6lKx`H!c|@hn^n=ouVHxPaJ)|7Ol>JaKqD5Kj%4HoKhWIq!(4kI%)UwNOH8IxS+E1 zf(%c929IO@31OdQeIaNKW2o$gu_v8tz?bBM8M86# zTZ-Fk9qlB?*JU0>@E8NT6ZmL#?l0`jh)f;r=%+D=i~%NO z@=%Bzl5A9L9!80tgcg*70Na9>PlK=HE)E4~nWN**1<^0R>e|nKY2Cc#l%Hx6De_m) zvz^7$$L9f(NQU;)h(Gb-b%t;6q;sP4N@|jSLrX8+Q$sm`DCZkp>SVO64~%#5Rr0hk zryx_povPum10=K-tuJ*I65A;QL=89gPhe5wqE)B`b<$>3Tw~#KWyGpzKFBbld>FRe z;(Qtn7B6Qa!Z9A&5~#`30kNy%>S&E+O&y-KATjGp7sJr+l=fT6e;46`HHV;JuQSM%FC7~^K~`EYjPp{u9Kk;-z{D2j9AX=*{P!6Tj# zMju6}$M3t?j3lmqOz};II*s&v&(9gfxW-|$$a2DImgljB)UiCEd|4CjNheFk)Yv`e z3NJra^$>``(E&r=)ak#R;Ecx^(9(dVUeoK`))Win!YIYKlILQJreZI*UXvE@@q_|E z8C+!g09H;s!1RQToJ(}mLd~idxYVXtnJ%Mv4w(gOfeTph9e@#f6P{*@vMxV>pK}%P zJM7!gU2&fgm6kIq41{wQjx#b-b*SM%82or>nEv*Ev45?q68^GNQ9)Ya%c+Et^}UJE zh`ny;XgTz$rRJx`80Z*vAEH@72Twz5HRRf-kdrKPLjZJUv>m}vyFkOHqqcVmJ37pW z5J*#>PT*MDPcx9@0{FWUzLZ;W`sZjNAd)qXTI`aGkQ6tB;@qEA6!FFHeXJ5@P^0!? z$&W?jP0_zGsl{4IXiPS>@;KhZLT7UTuU+I4ePRm(1jp1?F1kSwd*7_vP{P3LRP9c7V;|Dpl?v2{?@jg+pIz zT+*#nTNcG_jtpdb0f*;29agUzLP9iGg2BJdBI2xFpB&JS{iE->WrJ+*d8J|LxFk9$ zI{x+Mez*0`IQ%zue&bNI7;-lTLqhU`(tzs9b>gUB@{QUcG%yg76($r41$`=~(>Xkl z2cmf->Z1?=wSjOUM4f9Oa}Xz!I8)DP=N3*w8WmBcGLLgjatUfP`F17-SW|Lqmz`%x z<7}1&Snl9cC9)waA*Tu6M9Q*W`c!(d0SE<(k z75$OAT#F<$;gq_$mW#E?!R{2~DzD*LGQ{YhrfwJRD#@-b?a%MyT{D7S^m%TN5WUXU7Q*Gdbw2d3n5YOg$8s4TZ%GM%WU;%QJVq1t}pY z)72U!%W8kp$=rJIDydVhTGqN#IhVHBNuyVCj61^>9||5l4(E?RJwa$b8qRNR{-)nP zV*mnvlj#JL@uMXL;Ass8nqdn+nhftxxwz99nK_8u+q612C91w=`;C}N6!{TEvW!At zHDU5|ZNe+6pw)`?vuKj988M|7QJ?^%shql9Lk)ZnTN>vWR^n%!czB+nE-ogAnQk`O z>GKx%rt({$kvNzV7jL(Q()uKL6-vKw;M?E_LoDQVF^5`aPd~6{SZ4^sM+XsTD{+Kg zoUx&4ggBBRU%DhV&I4332Ak*SWd~L3aA4)C7nrqcRJ0;UquM(5EaKzvlHlBUbHJD=&xV#! z$NWh?vh*lbZ`ro_&mMe8A~$vsF>B&iGMbL(l2Z@qhSqR;J-Mid=QSTlBES#w{^)=V zBzl#?bnB5mi-MIy+I<8K1P6_C+BLfvpX8bFMHz|Z<$KMuOhQ>c%ote3R6GjCNc1#6f){q9r!&j)Lz#a@UT1L}`*y~-A{JTu zC!H}8t?uDA2U=MM6P^e+l7RIp5>yD%BxzYTeLl>%rn*%jSgftdw#oD6hV?bU;9rNs zgq_U`ZY*D{bduQmqdD{Z8b@aihN-ZZF*?t@xrzyX2Ce(e)wab-Sgh6t%4=NyLgY`W{AWyz zW?OHrwr?%X59=GSPGDcLv(U490YUm&PzABTAw@~u+|D`z*IUSpQ&iha(YmoXnlY0v z@`~VeliBsR9t>6yO?V0IT#>)MUbxBay)iQ<$~Zw@Jw{v#QbM8V1VwG2G7hJV)Z)eC zREwxQTOcNxGZ9&WFMngU=%y&lMfNYdhg_2#EJiqJDu%N?h|B5r3=raw7=WY|5Mi&;JH5_3GbW6* zTr!M1K~Oht5Q56t86hh!5m-LDVY|Trw@#@Ae zBP-EoYh?#GB4q9cEA}fJV-)*Lt(e%j7AIEf{>H2kSh9myvBk!pK(Wu)femNFeTieW zg8$OSpG3i0!UYj2MRc2$|CcxZ9Lj&81~>+_SNCxvCZ2a$yxUxJCt#X>wcO@UpWFNl3)Tr69ki_Q=gw{Z>E^=G_+o|s%(>0qV&PwG zq*synZ1XRi+x)NF%i2n8aQ~ZgoBtEbe!2!%R~0MvKcCzDKUnNbwPK_|MG9G+e|T>5 zcUY%Rj3@@I@IOAc`F}U#9A>ta{eRAF{=Y2y$tp6ICG3mxnpwgcN}Qf441)0x7isjE z3&*m8F^M8FcS(HBZ2m#_{nvl`l~-)($)W#@{1^W>?xJyFl9o=%!S3+c4F>4Ua=Iic z9Qr6GN;28aRXxcS6K5l4B!TH$LTEI>p`?B(rTrZsh9E@9Y)Fy`T1AKUP7bE~NFpYg zKA4qi9}G)z4%+}ZO#(|9Av7Mrka~ZD+kZNTM>G0Um(lLBE-D_-nDk3t+vn9p5u-ki zOd_`7yIBkC0oO_XRrSQQsZQ@(g2n_xFO$v>i>UlnKdhi?P*w@S?N6UcIQy#5se0Yv z=5jrlyo6-S72E(0$FqedDCV$kR=Z}4XC&_HufuTy*J8K|9p!Qh0IZu9fXP2y+zKjV z!#1<{GhT{1qBZ|)X>!M(^qzYAU`rQTBkq~yXjY6U%WVJ986RT`2gGi9fcMgI1-S=sGc@F?SUDjz=ovcdbx-^w znyPm+E>NknQ1#kjin!A(g~|6M$vd2IN``WUF0*Wk+nG*hBY2ZQ%+F77kh|~Q+@0KKW@vP^Rw!@)cBeQk%giC{h0T)4W7=hf zCFXAH86FEd8p?t$oaAmuXPkB?JX#hqcUO?cu6r`)LG~Mv_!HdUHV;NCfJBVR;AC&I z-(@XHp;#6%0$Z1yrYT*g3}RS)Qu!s)>RAwHDG%?be95b3;r;22^H|Sgfh5Fr$=~?I z#vew3PXq{?_U2O?KaV$`4sW8Yv_hZW_zVjDTqu-9qLujE#^+Jula&%l5Bmn<5u%@eM=poPAaL?pKYLdAm3ixtYn9d;_$}rOe(r& zW_766t#yn0#C0=|p;sa;L0%oUyk>7W*ge9Xzal{VF(rxrn!{t3+xX!EcK}VN>P!Wv zSjA}@-i?zHTqP!PCUEp$;|(1<50Djusw$)-{P;(3-+JQSmXw|B0Qy{kxV5&nvRXO3 zLYQ47%@%6H#3sCv^J@o&EqP)W2Ds^r+s}cAv!|#U)%)Y}BHTBdJ`tI(GCe&)76YtB z;RWMnSJZ_8M|_+v1IR%Zz{w7mQFhbEv@*iJ+=q%@8WA}HPRs_Gk9hhN%1Aa3e~C-T zn|iAk9dm+9_%d_HY`Z;{h=L~qRMHY87z{;iXK|W}9ADPpClO|z99tS;_E0xMCb`)Q=t4mM(SMKc)_H$Go-E5(SbCA zO?FheHYP}!Y8WDI93FkJuyP(j_J~dbs!e;@^49FK9PX%03rz; zsOIeh%8EZx!m1!NoPL7Tm3Dtz64%&2bAS&=o!v`TPgS-*f~mGW@OG62s(0(WaD2}& zY0fZV>YcKo?bT;ajfh#A5!v*q%%|;_olo1CPf5zwhFuLEbbe`UyCfzO#D5P5Xw&`v(u1Y*rXyjjLzTLtWPAyK zV#kJ;Txv=>GTC4v$Q97wD_2cAo9fIZyGc8=he=H(4Mf|@6oT6_GLYM!5h zdTFqHo>|djLh+)UrtwV$e#!Yba~o)V%#z?COHFQXdyk|9EN*F}l)(y0G+Sdq=m6V$ zQgDIX)4`g+0>FN0AkMNVB-+{V@f3;dM$@Bhn1h*I3CYP1>+*=`DfHc?FFj)m=@y>d zSD%4hpZ8w9)Oqz)zntgQH9q+DSC^lEsg%8Cw}})#9}@nc4&MoxHrxa$6tn^F%0s`XPU7TLnUV$Nz~94w5H-F)2DGJzj3)Q4$hkeAM`Bsgd= zJbuhRbSJRe!YPi+)82H}UqUb89>P~oCZolJev!B#)jfbR$982d@nQOq>-uC8n3?UO zrdQW43o{%S{IM#}PU5pYa8bcT`Wr0dQ#rMBeA4f#%~SFJGV}x7%&=T9naA^M^>?w$ zMOU0#*kCalQZ8As)R2eOK(o|e&AM}Uy8UpxlPu`TkL2zH$XhLnjqYO{qH~+NKcuA8 zqZGYQf~np0Dr9bDK}ei#rQ>(WHS8Mp9OpEMNk{zqK?gU}jg{xJj~@*g`G_cYk!Cli zhV16zjR6$HvJunuDOXF+w=2)rWeKi5)Od)><7(Yu<-KkgDi62CbWwR|%7koG8(s<5 zH@%cR{k9X&T}z7>?Hh>{VLFMOQs{&US?+%2Rm24);?LYfF6fw9QGcL|DtS&yLp?{v z`w~JP1is5Zn#*7d>1Bpx867kh&~MeZI(qtEzn3Khb_J%66YJ==Y7O0Y^|7_(w@PRA z{sefrB89_2Su>6ffXAN>HI(}C%~Qd2L}Lph+V*~0WBID@2`ft&>e&8_dJ&ebqn$B=xt#2rM*M7x7H+vC`;o%w z?Z7Yv36_@5sh>lc469u`p9_aGM$Ws z={Nkn5WlrI64kwEwWL87gw7SIbEogx!5rn#C<8QdL`(a1omMGQWoiyY#IqO;8=OD%Q;t2 zk;Qz(HXV1E}oT$S9VJk=Y_ zbKiV*0K=Fh<;cdKR0J(wtA036_T9mDRB3`F&atHf37tn9+KcE%ocABaNcjvK(*B<% zQi^m{fZRCDpsp?|(TCftW3zd9be|U=4UXnKD`$uV27QFn@%!E3#G4U`w2x5M(5q7D zXFhb;jnjO4Qci1cqdr+9%wkHW7hKD%BdM{%vOa8WEYltkPNRB7=sC78kP4Xm!OTIf z$T;UITNe*4Rkm}LngAixMhTHbN8%w}(a{PF6K2a>_Yxz<0 zOs`6Xwh4UdtdAXNnB9>K?Mhvk=9oLNPTjD_;V4RErcP^ZmPpE~b*@izf&RG8@7?rZ z+c{QDjYkKwDV)P|3nDtwl{yg#F7GTlKxo^%B0v&vHO`&TjJN%=%F_#GS1XSyeHtf3 zrbzo_GTkqAujK1fR@BzH6j`ZdE>s7KsV@MQ<2k`4-Cq&2VvUeV1n8uhj2_mCb4+a>m4;Q zYv@(?w108qFQfV|gaW}DU_k!L#@|Dk&o`FQ31S8R{>J}>g1^*QFbf$g`#YOILr3>m zxMBKg;muE;+x!AcpLfva0ro?AAueF?-GA_LUYgzN>a~E!Tg45GZdh;u``o9q3)loc z?cyTYc=2_+QQa#6G=3b=M$|^Ih#!=POv$Ei48XF!svlB6RqvyV*-U+ znof=N4yFg(Rdkn`&7kqVL_;4*5ac*`61E-Ill1DL-O7-J%wcb5K1&C@-7TDlAP7)= z*%T&D9=iGsPQ5}DdckMZ<`0I4NXlZId@vj0w!OhV!cZp~lSIBg!dV73!p3-5PNa^~ z9ZYiVH;xdf0d^GYCOD;9{ZeNe8EIvAg+l=NAd?$q)~xuf;X#rBP;%zUFd0ZmAIXRD zfh=a4A>zx(An;|lVbgf3$#d^x@^!ZG4413_%B9Zgs-9lyjp97=0|j z;6pmdBQP>9uC1c;osO@tk-F$bn)o)5EC{fAjRBqce$8$$pYu#D9g~r-pc11n_S9aP zkLB8l(eWv(w3WcYnDu0fhfJ%)c9N?Z+0rp%;3uPBdQ-9!P}g7ss}EMmkE~*1mKIhK zwREsJLIlrGnp4ue3n-}lUF7EeaQ+B`gPDno)h0?QXRgU)E0aXx$au=*~Jy>q6? z7)kN-baL1==#U1=vOy_TmbLL0r%zy(2QR!`#qLXdS_4lu7QE6>Fx6S%jjLWu0b*Rq z`O5UEBp3-)OurCF9P7niC-wm>of#&NVi}VvaBdJ8p7KC-#S3?QIM24@WTH{iQ!;GJ zFJH*63K$%8=Y&$Kiyx;$ld-L{l7%lVVmxrk;zpLh;_y**PF$M8bpWm(v1<&r0LgG)JjDxiZXyjg!cvF#N94jwCC>WYmI?*xQe5Q(vb5%UExy4EVBn0 zRmF_3Y*Gjg`cl_H8OL)1BNU3QAa$VAy?{5E3=R&s(i0>l6)WpRAXd`Q!&qdsS_JUz zJ-&tN7GZwvcxQabuzDwOCXVicGCocnK+?TS64>x zk}`p5S?n^}Fxs+1auX#UZ7EXss)1J*lFnkh6k@pKiQEUootAMdRw5k%9~vY)qi$yW zV9WtmKJQAVTfH0>wT5y^kpkkDHB;rYR7hx6FQlq&DkO}%#b*viOtoV6^)8W)7eHBY zW-b!CWmy3aeVN)W$x=ELet_kj9Jcw=a+6FSNW%4m2EZq^aM zSMhqO{480%YB~c@~GRe|_SJ17tt6UMNBb7t{q=K!k>yxnI1NFGWE6;48j&S#v;+M)>B;iY7 z(?GWk=3Ah%9xFX81@tNC+&sS7xsw!-q&FbAp?mYS)#aP7U*W)Ei!Q1ID$JSwMK0|S z-zM>enj9R2y}GXTb{iJjUc-G?wiDz99hUrKxu&d0-`BMB@Ua-l?3IUUyRD&F)59F9 zneM#OCear7EIlK+bV4-oHlBrTD~ghq5E?tSUknN<2RpBEDCuilF}!$_R-J-}s<$ed z^x}@3Dt7}6mDt=V>o;WAk38ABQ?BzUa5@zi;;h`yer4S@O^M=R1q;C&RIDzKb(;X7 zREe8A{Q|lIKD9vX`5U%_7drQ0M~3&Dm|qg-t{|9QoP_WKn{k8yGTsh>fONpwL@Ix0RGY%f`2*r6ls))5txxvjGw_$I5iq-uomhg1= zW|Be+fQDvOBSn$H5$m2EpKU$0i^1d#EfxO8ZX5->KNYd?^r0(f7t}DMrk=E*i3hSu zkj#b5mU%dwNIYRS+ajcFf17$c#P)o^H(4Ylv^@!3Cav{6blzdY9lpdmloD zikb+GL3oT;gpDIs#H&m|9m2GImtV?c##Z|N{0G1FJAdfhEBrkFp!=gwR&Cs7+W+Z| zKL}g>CsZ#~*0VRC*!U#g`~r8eusT-ExK`#<60ZK4wjGg``lXE(LTZ*bR_5}?*HPw^ zRZD}tU6-SgpC&GtVfOHc8~-+{oaaOBvOWJx8~>gJnxoToa6D|Nc2}M`aQWGat-L*@ z$MU{`+I)W0e3F3^j?dc($M{(8Vyy_gZm zPCw!!fyGlEQzJCD5Cjg~>QeCdyLi1RPb{ZULr$VpwweK{At?U-c*-Q=StsJKmAAb# zRN_gQr@u(8$@$qX*T(;^y>E++JI(T%fV2{son2;UcCO1zjk80S({aU@^kqEl-f=pa zOuE|X&SfUrb*KL+SC#FG?W&rpa%?AUw7?t83L(u31mdznNDD{^!~+r!2!vKVAV9nz z1U#{;*H<$ob%oOm$IEsx@Vawb*Eha|M_m`JKy)6+jq|S^WS~<2UwKYJdt0C z;c6ftYOZTsA@A;Xs62Yy>mHmxe=ECp=hyE7b^#gQF4XS5d+pu&cdu!o^O1V-cUb^BY$xHg0)euT=I=)8wy zZu<~m`;2k4fy#H_jNjYZp7aro0ml{pWOTb0RO?%;V^2_{qKk?KlkLI&*7ofA@87+i z-Mn?3psy) z*FvpbAG1`OdGDP&Gss&pz`;E?8O+Ju7VIc+r&cLwHg~Jw*1I?Fa%@OPu*4~~d?n1@ zswy}E$lm?_Jpj!&76@a3*f4PflHIZx*y-NQ8{fNk>-ych6=6dVlwds3T^P1s3ofqv z_YBUA9gA#Cuf9`-yF^$@<_P31Y{rIRo&X9ZelJHlG58f&jLL<1sE;&+Xy6~fC${?a z*5$?7i<2cPzD4AlEHI%b5{fM{hO4g*blUa~o?~?J5vqP;C4`W7A_^HuYYG^2L9=W~ zCXWy%QHAn>Z6?Ky2B9n!>4f6PP9xXK%e8giO$C5q4(rxpP{KZ=kuRaY=3@?;YnwJl zc>x}8vhJWR6<8owrTd-};GlEh^PpWiW6aEHV<;cO$s;HrqrArghW5oX1Qgi8ol_Sz zGf%_AcGhOrC^W8+@+DA>4zS3T;+wqyMt+BP@|bWEN)sPPQQTs%@{|2D@IfetTy(hc zNFkQdeb5@#Gh&ZG-~=g)=Zddv9TB6KJS&8J#d{)-vK|!=1zj_a;OEM= zi)ds?0OwF+*l*#JAZJ6^=mS(dOzlFLuK<->f)@UTbB`H46=JV0Y8{Ajh}a_SRX^C&alNq z@jzwItE}U`PC%4#2h)xTSI?k*i0Ozp>?fOjLjf6Y($A!a9vpI}=LJKzIc?T;*3poh zqX^n3m0yOQll0n$)YR|nwMJk}FKUB4BoKYt*PaU4(`pTP5#}60-S&slOr)TsOsoq9 zW~jxqx0XBZJ>&Ny)>+(5z@Q8zLX#*IIxCAa0b`+CzTd{AK%QZ5c6%F*;Soecvhl;+ zD1Bz^Eg6tu%)cnse3fxr0jOp6H(2u+_uoCl1tB8LT~V@8go7QXLP>ED`j1T>QSjQW z31+8$QB>!0PkM*9q$NrqLfMVG7_o0kZddol^%+UL5#eHz9kjE9OSQL@5s z>Q<=XQf{sq5{yP^oq8L4bLK6^ASnkiwD^Wgz#`PRE@1nmE>|rO6sUj+lR`rP#&Mxf z`@O8~*7{LamPOYHlm_q|o5iw-Q(oikd6>i{Z(AS`*D+w3G>|Gb-OF{Q79v)O(vMov zU4cbcjO<)-mKLBQE)0|{o(B2jl^Gh>w1~_WbhqkmFODmp1JGUS&0RD@P_eAN+xsC*70coU3Cyn>Vxn{4 z#9bHcgD1t>-aaG^=t*#-;0qf~7fWjw633Qow6}v^6ht8d;R595ol=CpvXfQR2VuFS zTU@cMU>*CPh$b<^7@eVhV^677wp+Kz<%du80OFB~nSCg*MVvQNWvKtAE6ighc@ZBz zEJY3hz$M2|#mU1$Wjl8?s%Y8>%?}i9hDAR~Wm^{v-30Vz&LNCr7a~SVD+~V$^z`>I zFYa3cL6sH547z%dcU@#;SlOX~a~pCWNg1ek>DH)H08<+LxI)2`)hsj%E1w<2Xjh)Z zm)Bb4dW+=?5K-ThZb5trcRmaeSx}Wx5~ol}2vR6fGBfOpF;WMuQ6Ec$7r!LMFr_^l zN*Mk(z7ca0QTHXbctT+50&<`Z#ZYT%h+C*I714!0vWP`Y1}UiS(p3|GlL*0GIQBtR zwG{(oIqaN_=oyn&%tOajN8mZM!ej%Co1%oOi`H(~AM;i4w_JHxk(u%8N3dvvHsX1R zwMX9xX_lgbm881^pSVv21<6Pg=?pr+sdVHj^z@`voQ9}e(J8nmNSITGb*LOGL1kIn zd`$%u6?rLy?CTTPXgN``DUB}v1DeVusCa#*gVQTy(6X;9?QzRBUJJW4YGR~GHDg^G;BO}(&l`RxI->{8iN$vN-wwgwd&m`jA zkxDa12t5d7I-Vd-!U~BtZ~`mQ-(fr^o!-`_JcAOqfB@r33qD+kavgCS5w{UhZmjF> z!X*g7d!gJ{A-D~<3osQ2qaMUA#6Anmxp)O1^ky$_P}@{n->n_K^q_XThrhmEJA`+M zXzX!zFM#_#=y{3-tK&emsDtO$0`P+#q-+Jb-4h4^l+@=d^qmb9U%!LH7fS!xTKy(k z-|y}BUc%q*sV^Fj+$bj9+GN80@lA$_%S0qzNAXZ@oq-FpiHj0Hl5~Ozu~Hp}#a*Gm z5WKCNtgP^(Mpg9Ei0Lh$j>CGy8za$cU$VIF1vI)+A_$B5qDTt#EYzcM+TJNRCD|U2 z^8C|#CKUe;{$~9%lS@!hOfDe`cl%O%88u&G?cb5ha7cxUD{-L+eo^5NA`xVwp z*n#*Qr3C*Y$&Z!dIFu8R4X9YKZj(j{g4j*Cp;nt53}pQyHs=_|RoI6~_q4)pZo+*K z#$33JN(Wdd{@jj~o6?e`>IDx`WCdf;kOdK-b7i?<-QZ4>r}aYZHuC>I$wYrqn>j>6 zKUAw%8*YcKDD8JtfJ)h@fEZ_t)l3BtS3}ZVyI5K<(TTOXt|Y(NU33x~iS@Lyk0C)J zx_3LAwNMzJ&_69{T}w(%?;CpNQ)wqd}~A#rubDp7d5hcE8fC#xlJQ7#upUiU5@rX4ueQQsLzg z^eNWJ=8X6vJ=OJb+{yGWSpdiOLp)VA8`$wv*Op7T^7-JC((wKl=BxEJ$!PM~2qMn+ z)|_d+0vE5ZMX#ydP?^n}!L6#-B=5)5}W5ln1jv5J1Z`5OR=D~fDA z2J?P%12DfFRV2E0v3nRur}cx^zSB zc03gnofZ5mG>@#tU?A$b9wL1cggZeg@}+q+q~OIEV9Vz)4yi z#x4Je@IUyOQ^5;!D!8apn)7ghhQ)a~IQzeIuJCHGGP}q#TK194ZFr(_A9V}Z!Ll<{ zsf#~6rbjKw+axBLgTV-TirA09uPW}@{7f}o$A;?yQmQT2uGk+5Gru7co0GTn+Y}UV zbt1k9;0B*J_FFsESc?ni?ftIsPoc?Q4qY&6&)+ovG1}K<@i;F4i=`#cBE7Iv9z`C` zB#Dp7G%qHuY!7EXyt;XD4hy2(>UtK7tK*_^?~*oJ`>DR@{)E_bAJz-aPheuHseN8n+tOaKaM%6vMd&c8@*+DQ)g_Q9vukC1 ziR9W1R?a75<3+B&IN6+2Uj_@eN}$Bb$8Y(@yvVT_nRh+@$5@&{&87jb9$BK~Nn=84J z8wRTeZVqB~kH*^&_*!6w3Is3%hz z6NXjaF5a`{7DsZez7^CnbJWWlNjlX z(9;*36{SZ;Nl`(LTXdz}taQ0i`$Tb-l?w@ev{M{b++O#y9TJmOBwOdHe8wHpuN>?y zE_jfiY3wM_4LDEJz)X{B%nG3MeA^fKBjsPAhW2N7u=u6O#@k5zC%!E16Vq9<{vcw5D=e^Ak2&6vwT4(iu7Hz7X|KW z4iOBw;RE@=-n!Mzc#G9sDaMHBv$yIq7gSwREs5G=kH+oZ@CZ@s8B&o~TE|1@G!f$Y z>_P`P0jl?r;{*xJq31zh87H*7!FgVcC_~FKgHDeed0C5FKW&e)q=RnIv3}sIQ^`K+7S_-q`G;%nL&svBVPfq468% z@4oxa53b+In)g@l++ZZ3r?TB>8=6C@zBL)_uHZ7}tCwnrNJt@nFCc3$+161P4u1@2 zKb~}la$!Wv-$I>`y!zU+I0gYNFGE4CT69#x>t+`ILb zgNu6^!yO}%r)CenL#lljMElO5ZO$XnrsiB1ai#EaK>Uux-E zL%APB!f}KoH?hRMeRIFxX2>@MX*6h;-d@H{#QOX1i)McoXny~FT#L${_E+YQKX`g; zZsFKH*^wtrJ~_bqonwU0k#Fc{=4u~)IL!L^Ze=?ke)z%S><5e5iUju8Kj&)8(%?fa z{*dMg-V#%@xZI87&;Dc^vOi)MiGFSeznsmmRu3_r;AoF**|4!A7z*whh>?A?gF%m( zl&;q8Y<0&L=g7Bfqx21%ODJlwt7{-`7wu*2I*VaFRJPyOqr>*q`1KHJ_mrX6VIVT< zAdF!rR~ZoIYl;VJ6M1U@GL*=wm}H{IP{4&9MX!RB_;wcyN$wWVvxkXQ9C`4_sEy%^ zjpA-|YKuQMZ+arRE^n(z%p{5Syx-c@2|x%;A!ZO$_YkqRdSc{YxIl63?)2cs&5&ET zEVMD6^d{JN5Dtl>o$QaSx4Z-5=uTT{VJqw~5LKH~4sD&ZF$YZ(Qfbs?`hywX8o)*y zRq7_=N!D8-rS(W-D~DMRwD&SKr5`Lltktmq7(xuHR(5LX8m3hu(|S6vCfI=~ji9=f zb*UTMO4h?q(eHn-_+WY)GL9D*>`Mv9E9ks)CwE?)dx(}r7VVwuKe+x5_seyn5+1xV zTGdX_NGw#_(yz&Af3h89ZHpRg71=dNk(jq8 zn0_2k2;_xEa5;zfmO+2>{0FBLA{iT8Bk1j8|D=z6J6d{!9Vfbr0|r{UQxcul_-A3{ zu^J=0N>N1G*ccolU?81{VS{7rCn@GOLtLtm@Jl^}S0l?{~-z+JIwrgCBUa`Ektoj?J#~@>8i+=VcF64wE)v_(ZpZe}ACJ z3|7L)f4q(kPdoK!P-@Suu2G}=nH{@@5k5FQX$aR%zX_w zLMpGvNQ--$&X#nUK5zGZOGUExK%hDFbc_sIVf46#72@bbR(~lZ&H{3)&R36tBy+*e z&VbR(T_MTAC^b{G0chr4GW-k)gdZ2euSj8ht0W=+GQ3Mi!UD?`10@Joqx^D7%e7EM z9lkNMa}~oY`e~H~8Ih2GL89PL@WLs8 z53>cHvwHamUrCuL5LS_(h{9;vKo{J8eXoN_QQp8A1M1sDxsO&6Ny2llNOMO@bt zciGNR)*+pBL?h87STlVyV)|GnOL)*pOZK~HRDRx{g&1Q3DzqB5g1T?S77G~?gO_u* zf||+~hsUB{9A&2qr*k!vEU7kpU`Y~k>W&|4(KMNNgcRXQ&JYqD`8E2D4_IT=Io@9H^skiM=*BwFaw3+ur_@>`*iT0mN! z22IE(>xhmbGtat9Dce=PTCs|x!OAYJ`qPPP4+n}ZB5Ay`l+q#&u;Tq~*Bwm6i3`rb z=2lNNVVpb}xvHiuMAy2VNm?>U8{9`#MvD(ZWAEgYv~z)Lo63#uB!5)e?yfJZ_jh|= zwZo$pIrGXZ&{tMAl|fNZ_)qC_aHEMwU!u*0YCIdfXI+i@AlFQHc1SYe1{GpMUrp3*ckq2MK~ z0nnM%XR?`D#>h@93T@GQR)Si1bgcJtz}o7Q=hG^%Aj20)LL{Bi!!~r#Ap_@T9J40r zu7(LuP{j()a1Mp`JVNsJ2gIsJwqhy|iJ^c`lQijrrqc%nwaqbCTS(5QDAL^*Z_ty>2!)s`+XxikKIrKB@q z^$L!1xARdxzalW_5~GS-x%g%y>B2 z_P|nYje4Ch=mgujj-LvhEK}bO$_}CU_~)ZX;a3%oSxLMirs0{eDGK?7pA+$IOToeE zN-F9UiJ~#7alun71l_W$6 zJA;w2v~nNJQT+(j`p)IXPhS_u(hEBU=^(?Qke9Y&J21ovjaSKic?)hskxG+^0bJ?^ z{Go17<{H61n|T^3ZG%IJA2N?+$S+&)nYa}KKUk5Y<=QPo4{QdPs>p>T1j&p$>L-^Q zI*qOrg#5!gq6HoWv~g?Gv6oBp;uR!%Q-(tJwIHNlsH3PtsVKE>O<86se;A<; z_a%@6iwK$^h7(U#{9$(%EnOM87;nVx3cxXe)8JNTm|j)%)vx zH1PoU#phE1BA~T{F)J3_DZ0Ls&LP2EU18Xj%F7%|8?8>qpMb&Dhn2=3bsvtO#D7bj z)En21Y%r2FDprfOb~Im8D*MNk@NZ|2To&?b?F0=X_9^JPqfIJbREw)gWf`#54IO)8 zjq6CMoNt0`5YSp7j}ja<9LyCq>9ZKoP>7oGoJxr13AHv=s`|IucY_$!_Py2~H)on&j*9;fZvHM({p>;dUqJZ$@ z-X2_rC*4c~&co4)&i&49^F#F-Q|Ga0-#gKL()aj+ak{`NvL5@#7>G1f&Y$Wlw8{jv zzD(e)ZDTo&iHY>h&k-C`L4fH#@rejC(vz1tOHiaC(WoT!M0^#O;sVO;?uuXl3=ZS? zv4HyAM zWzmUrp?2;1)$iZ9ar4#163hf&TJxL;eM=#ymxC-W5Vmm55KVvlXcb&TFEEYtJ>e~5=}>f@g3XXe9rw#FY~+`#*Tr}SR$IR#OU^aRuxT&cp>IFA zkH>Bf*T{v<^J!ST*VgCW_F3n6OM3wU#EAj-6l#AIc$?m)lcOPalin7B2!#|ThUIIG z$)G)MJ1)rSF}!SIShwF$9N@rzvcjuH(Ij|iw1|jd9wX#{sQ;&`RfV0f1UTEF94#~K zJ)xs1>xj-p(sf75@lNDnCz}|^irq>pw*mS#p0QWHm?O`V$SfLy5*vmUv=6Qpq9#AC zJZ%y-AhR$Y>6x1_AzYiR!)R)()FH6zq8gw-3ptU}ZR>uG!96~&vH_;05gr%3GgjQS ztSy1^yjOlj+ScG0W!L}iXfzo4=949kSD-7Ns6QM{m>m#`ntoki8`>k}&*iS5_VTdh zSbv_*Oa>F&tC1#f*8<;g8I67&2U$a|c4fGMhU+WgoZ=V)KQa;5_VD{C{E1Q<$Y7~1 zhvD&F7YXh=D|&w}Jl1Bi9i*_@8m}aG?i47R$5@7SN-ychGPBK_1wYc3&FYcksh8#b zkC4(CG$D78+|{J2yGV{~d1I3IjIh%Qj;!JD#2DgsHMB|}22pVd9A5b2(xQlWD z*KA2>#vLmGUwm~qzmms49}5PfiQuzGt+vMBWldB+r8Qj;VKhKc=p^ek;T0%JkJ0KQ z@s|t}x3O5G``CQyS6ZtLe8s-Q%jg*H^*09?`_sV8^2z#)C7Tj-p`AH^`_gU+;fv@ZG=;XE#oq0 zCX0oW?zEnA-m?gGp3n!UFW3kz*kLKMqKE_Vb^6mEN1$uRk5^kqMmzW)2+6tDy>g-M zx{#D%=afPlxc-*BG8E!w59)A^tCriHtckBVI;`0Z(OX30=kM~y5oefv#WrOEEFR!i z+<05mEjVqJH^|km{X)LJjwr39XRL`nP7o*L&*)$+YA9{`Z0OvZPZ)OvNZN%2$ZzkQ zb#|EEj$=zQT(tf<{giCf(N5-`a|H<5i0Ho%7J~z5>CtFc;AIr)2Up;3B-yNgeEj43kAAgSRx}&Q z9Z`!c@vY`fM1=TiNeOqu$^e_q4gi0p1kl^)405x%1IUsAG?HsZ2EEsu0J^Hn$u%%5 z@woYm_}UZ>kvZZ#MrdfWKA(Oise?ofzz&Z~i^NeyIZX(4hW7 z^Irj~3?Z!1TSW}|_nQ9=&=)G|V)*xsV`rbCU`EzTpO{`Tl?#Tt-^zo84UbyoLl=_)2bE*&|rV(+}hu%syddR z4E*n&Tl@C}FC!gyh#KgBIJfp630gKA;iNR+|8#EcKNI-NrBnB$n>{hW|9Woi_X+s< z62Myq^9SeF{;&#W&0zk=xwZdEn6iPmqrpJ`*SWR-P0(K|HfiB@z9ImOw^Iu9&nuG` zeLWv`2QgMg-N9l<_Jr;TF?W9B=U+trqPx-rF+8xw1=W+l*F>FU6ayrpz>^PZ}YUITe^DfjO*|jg;TH7g$%O; z<;u~6Hn_?@Im>mxfKk`0&MmJ_gEDP));Y=GiUb9KBidfAhHQQP;t|wqP_5C0L~}42 zQ-XG=t;2uhol%JtOdlQcr@ThzZ`^zL9n{N6I{2kAX%y9q*A&_H81u$QLY&v9b8Stc zAPdh09RVM^SQU+CbFhodD2&r0vVw~bVxd5MU>Ywylm)1HB;jcK$F=%?_6XA7TJ4AU zzRZ8uaVKM1{F!0)=pm%_Zq4{WXP1QkXuq~S*c)th``y9*7`+>eItVa>^w(y$^D$u1 zsMaxr>*j7P_S>n|7h!pmi13hsF$2gEN*GkW+ufYhW_o*&muDor4d0UEXJQ!lBHt9p zwNkqmg7o0_gFlSY-oCgPrGHQV8q;0~J9-$cgH6BaRNplRw2v>|j7lFCQG*g#!u!*}fcQNc(n6_8 zGZfkroU%~_1a3T$G%E6(B||a~9BhfSrz|4R?!{Qfh*Vh9gD}K$N%VJ6hLJY3&+>2j zLQi^q9sQjGLDoqhq=QU;1wb1?QN~=0U27ujkla^lS6;so-4rG9<8sSl$i2IP-}8;d zE1vf4FaRP|+q1qd)Jrmy6?Cz-LE)M1$l=8t8*^{q{3NwG{Wv#kkvnn0Q4ThZg@Ug7 zMj=;9O6bkmV4x7w@?wzWV|gqs$;h;oOIF=gRVG#@ir)9Ogp94LcGD& zXO-MHvw)k2PzIxl&%eg0{22vP@T>8I^SXghaZ!h6vlf(EM1IWCx(QGN0ND$RNW=Xn zQvAaZp-TN1GCi^lOq(O=UKpsuG1U!~e3Gj)6f^BJ<_H{|XnJk>5{!6);*v&7E85zM z;0Ckm>RoYvkbB!&F??OBNq|1`K)#~TgHukubjyVVFPn2;^#$d5P6ewRD#jfx1!BVS zvUNjC)Lm2Sdp$mkE2_bVxrthPMDx-`wbkv+gku%MG`Mut8aeuoBuZDJo1aQ5<}Q$w zIKARY*W03FKO>Z`EX|%51=D8>{I*Iy%|FrndB{CqOsi<*G)Z&KS4)80+P9isZ?2R8 zrOJlpuQi(h`f9GZm_n_#wdO+r{z3|9ve+;29YwLi>obdCOOY7%yPxx+Plvts&Tbbo zpkfR>Fo#DBXxbm1Ce$e9yHm?uM9@8~E2j@o$H{w@LKb@b5rr%}F0t^jRB+^d;u6+W zscOlQwUUD3)rN4QROMrQuJ&8l#vrHgUhJT@EOOiO!<4+hwIAeSfxc+zYw;77zOF>l z*W_Se(pMzQc}YyUaPsbi^KzIx{+Se3gDiET6gGbbNeo$n0S)oV%VYCp;u?j!P;D%- zRY-Uz*84NLZfXAY#{4Up^^b?WmuKZ-nbxT29BZHGjax2NN0Qg+wIxdcr zWj&}70JV7KHP2O^DE)azj;DB^RYgGfaTmqIq@Spqz@ zx(B{;hhHcNpk`6O7kNnnW<0fQv$xx=Z_=u1XDNFt;fe=CgbP)R4SA5C?V^tyUQxq)i$;Yf@D9%a5C_SkooulY zYs@I)HEa(aF181fv-;hX%D1o9L?eX>iW10XLWim$JDC~}%Bj)Frvols6$wWfR$WSw z1sFdV0rfp477MU4m{U|qQau?gBG;3FlgSTVJz34<$f3*;Q4_Euo^2QL$q~%f!Opo@ zFHjV2|#OSHEJ8|EwVeSCgeGErTD>IVpbUzI5lxmVly9M3jPmqSpQA-(RnTso&G`cnCdy4ae?ph3-FZ!I| zn|bz$_ES)z4|V-gjnOObxlzKI-ctyX`Q~U^;Ha`e<#OdIY zhoF}fDo;@fG!=A`OgSy%RdwlOxbSA`sh2TJ@d~4L!7{qn+Cd@#i68|l9&%qi4jzdS z>4SJp7npJc!x7!i%*cs!0;19}Z`@_X9yLc!`ogBQ#bSM|EKWvvvdYkdA99XtPG$L; zLZvQ~7gk~EMG`3-V9M|59GP`^KDzMC4rT-|yL|(kxob4DxLXF(@j~wMCm`s^Tz6oo zO0V0{XHN$I28+EO@oJ8U74e%h_gkYrti;%U(G{r;`5j^@sfF-1k@w zTG#0@wdTx&bZ%`Y667Q*O4o-Mr_}VkSIll*IZ3H`zWJG;igZ=vm74R-ZI*q2<8BP5)$Eltms5}Kh})Z~M}5aj)T6&CZfvIibbzKF z{T$y#>e2A}4C>Jlu3*qJJ$R`+_?lOb#`@4RMrRgqpC@Y4Ywb2BBZTC_3E{Iq-LbYQ zc-%RS!WB*j?+DL+{(MNV^wy1;LS7_s@0G2ByPykkq5B}#*K3!s4I+&R49)76zp^lo z51s;gjNC{WT}+up>2;<*rU|JxIa*mbk1frmC$he4f8Yw@`xbPTVSK2g1=Iaj%~ZM) zeN6h7rY2D~8;;l5VP>}VfZ2lwi=YuUBy_paYryLoH%7I`H(dz3qh z5@IdslMA)gP6vG6QE;0W!#y7!CE^0#>5ki@9#~Pf=oH)aZey!a1C?#C@385aYsR?N zowO}GNr@^(#Vk$b5;56kRi_0S)^U2DtSm+wsTf-IImV)Y_|rsQO1*d|-{I9h(){2C zva^+>S7JVz$j3woz9Bm=i$-wB269PUc*AH!wqM8I`a&1(LK$M#L|3R{huVBiV9;*B zzlYH$YAyQOvzP#Ae^s)VXRD0zevYEzt*8S{@~4|C2~>_ z%99|47^A|#SE%Spps&oGKz{hqp*kU7N7Y%dd*c|Jci{vWU^s11Vw`QU{LK1ElbSn#iM3axdOFfREEbyD< zF?^+{$B)sZcU373*DGC<#SBq=IU+pV{VJzJYg$OOw^u)u=)vIz%3B$wb__@_rusXz z9qc7x!MXJ!!2U+5imq{NdKrvUVVvSdewYf-tOhzLB{O|xSWg2XxSinS8~jl?ZB9Hz z*B(Vz>=Z5mfF2Ujj_WAog7t21fUH)_wL2LdbM7?mA-K;S>71WNSHcgdG$0J2F4T%! z@OTf`ETEWC9*umG4xQ$?)^G?TXKzwyij@gihJsMWplg_J+lDC$BA~*!5J|z!UPRoi z$bEEJs46}F+-rW@-mQ(+;~tdnx^Y?l?WRsQ@zP-tj6#TOD>^6Q_HfrdX|ix)upajb z%hEmJ_Z`lttZH5UQ>L~k6}gHEl@tagEgWSog6bU{i5|vQncrI66$zawA3(yduUsf5 zsO>_^;zF_&q*t%s!QzLD%O0rr!w+kBNWA!Su67eYv+u%N*p1@?@9~0xbY<*UD4O+@ z_N6AteYsehjOw-`vfeCi!hZPS%|f-V0e-KzMzq?wVh#Et+}Xbn7cVIf+Q%5BXYwa| z$)4N-{}I#ggLqtOtoR~y< z6xOpi^5QCSa?Vq`5G8&Itzc$c;DkVOCOhJc7|a2|5;qGo)DzyAFE_ zZ8O+ND4tD4Wm++KoXdTFl?~y!7+-}?@9|4FqmA7hfQCnist$doAB9T2_7n*R$;2Y* zqe~%tci3%1w0(DkcDDxbJ-LBojqn|Egb9pkpX5RzB-IpYY3`YXq1)&VQR6kpYs?s$Z*YuD3YD$h zyK~0Y5U*rBxdX3u#xBS=HP~r|K=vi%)Iu<(+7DX0``zmjq(X-sZJ@w@sSY!ti}e{V z;LGjquaNbPA8?&e z>4!ZoB`eVk##<4oqjLA)ODO?<7kmOX*}B`fc^KePlt9X2d3Xw7VO!U%BcPzW-`?$Y z5D>&`Uw{mXExxEz0>CWn*4KNQ3Op=!R__L`8qZ6$V$CbXN4}MSF2B6c5x<7&7cVB0 z8c`3fS_0CSYK->#b?Y;gqsYyHyH0XVVPz795fgU7bknG!ArJvCrg}xq^%sE}u=UaeLD$XjEc9duX#r~*6+ zxfu5@MazX+7xX!5Lv7h>$(hQtGf1eMo-$djELq!iGV$2JEOw(XIk9}oy5i6E-qdtv zK}D+7?u-Wg`gM?FZjbcS@9JJi z#39XDiZS*?0F#APv7}ZanvFI@))8iBu(>%G&ro1|33u8VB3ztGk1?=(B&w7!SS>$i zom4HuiIv=PaR4`|&;G&OyM%I8AYmTPIR9+otTdoyPD=-be!lZ-TKix*fF=gVcQER+ zNpA8C{-Y{j(O$~$ob8}EkrzbUyWXm8e7n}Jbsl^hk>bE?Y_#zYgBzyQ#HK|40zAPB z%K!o@VfZQ1{RI@_r({Xs;z`wuPDxE?ox?oAB>NCFYL3zwTt1vu(pmfyN;8=362k^Y zkKlYGp$E%|H3GwGLOPhFB$`F=B5o0lBAQow>oSAbMsgcUV2oV{0ei}A>KRGXHN@|{ zlK)J^CKa_87J$@+MgFrCSFL}y7Z)J%wwD$`g6$>wdvTGNTUaWgH(C|eQG~8gKxlh$ z2{hbZz_s(X6k1wFGg=E;M2%=1wc~HpxL8)B_7O#-5BR67k6H`*g&MWLTH{i&Ms*k{ zbe+vOCj$6~LGS{b4%O!#0-@rLK6Af`m7?5esA9xm17h2I2&kvlPjQ$wK=Y7YY*HveWxt?^NA zfPcIBy8!%3uGWY*G`PRt{4ap}g%r-*3O>Vk;#QDJq~->^GK30aCQEIHgU zlf+~=QRx;dI~o4iB~#3P?DdeojLrhB(F73=rQEL%_7O+`@8Q0M!)|vl*r~x#L-6HM zcXRonjd=V}d9VI>*i+|*+|>pgdD{alUG1&~N^k)xu)yR-x)|=I-QbHLKczGZv)!3p zO{zAd2Jm3o8M%|a-6wrgAdDPxM(w^l#Afz42fZpKF)5D@M zMEB<-!S4bGBj~ZQfiK~c1A08zLvNcd`!#XTV;a8wCzXq5urS*iRWl*)|1wef+g_6Z)0N-rB0)Vfl00m4L@N3Q2 z0sNIxU|CWIx7_?T;69VU*}?yFe8q!5|Mp*22EF=~{JB3I>>gbSr~X&YKijEKU5TEo z{?O;6EBdS+UfUr6TibVW`cAgzI^C^Nm+nftNBzMbRJ66OatrPty@y+^47?6|15SG! z*N?&fb}U>6^Rn$8WqiLfvx>j~ka%lbyMqnXV~hcmk9ekT&-O?*sHEss6y^2VxM)kj z(9^07JaP0>Y7KO4OK3fk&SoZ55j~mret>0%W;~qa#DwcN-G<{KaDTKl?$N+wd>yDj zOIK%t?N9`|0K}BRhBv=k7YwJ4~kHqx&wg`z$ zaS!?CpqI)$?hk&bxOer@!iv2Jmz@$wzQ*Hr#`KjC?83h7KTVS9V`(7%!@28Lu z+yxTSItyG07-VbdFE@a`?^Td_J$l8E2=ekUtOpv7F6?qVP*wCtA|phsg8qFQM=jXI z&6f}%2BWS|kZ$K9{#}%Rao2^#-N$v{Ibaauof8d3Fb%j?6ft}YVb*Xs9e>Y+J6kYO zI+sWcvg0Mvb2<|;6BbnK#Pd$j&QSXvsDDkfxOj}>j7=&_r_AnA+!}xdH4VJi?o40| zr9g3|xSKU%fBp-#C)qq^brQL1tY%c7h5pp5bj<*a_Y!U+C>ZI;2%uZcBxe}K$Rf<8 z<8u2HN(bsL8Z;uXYI97I3_-n9Gj(Iiz@hK!CBSG?Q!Nu&R9<=nomr44#OluNITcAu zusPovz(;z2G=e4s-c^h^pEze+i!1h1P0}vzCF{_yVHdG~N=SU2YZJtM0)!|E=`-uW zb9DtohxKd-zJ~J?(={!wvH2PdjBT=?@Xr|T4kid$*BBn{wl;7u)P}oe;H9gY%ATFx zsLNz?h_->_PMo2~6#itP$R#66xPmB=?g0-B4qz5-O|~1j2E*^V`~3*AqyGU=UR$nb za(6V#W^n{H8a#;bFVv+{sjxO7t~;u0ck6T5m$|*nn^{&iPYSEhbLrY}jD+7-dD<)T zHhZ{RgE;hdq-n7RaiO;a#~!RPZawY--1k_z?}mwfc96k^{RPZEm~{Th1|5Httu}`J zt?5Gn0bM!kNUnbTBe|N41ayK6(u0Hg2H2z>Gc3w<*{;_C3x!S!yZvSERW=``VW@wx z`B`wRpO3+uX25vb&o#dYh|k6l-0PiA?#skMPH=Dm! z)}%!cZmu@p#_LZ6F>Q2iT{$x_x)YXXh7t-qTo zN>4!?9>4IFzP(D8K#}DPBia$1rlf)kf zRuF%_;A9a85sN=xYF@-^5r5*>srYkAJR3xWih-OwbF+B|b%=BnUYD#-laB5+zwg8! z1NY(&UU>1xzpEC1Dza)UMB!Y2`>UV&l&Tw!=r-+Ca&+uQfEFitf0zYs6x9dVU=gt`1AW1i|aLr`0$Q2@(J?;&ToP|S<8u*hV zDy@o3&Z>{2XW?3-cK?ONJiRry;B!upgLY{d;HA{c9?hnSCtU1*ywQ{a(BVWk|9Q31 z;{5x35`>7eNjP7OZ796)A72l<9e4|G^_XPk12E7J)I1~;j0}E7qMBXS1LZ%DL00Ar* zS=@GEO7AGb%2cNcIa?!O^e+14SrP$*|7YYbDUTT2o(_f{5K$^nPZi)T*jM7^1)Fk)|DED2QNIUWrCv++fj>!ndF2Ho!FII|%A4 z-o?)YskI5jgoNhQUrW7l6ny6gTHuFrHHA4Xn1O9_L7=4>f~BH>hpgQ9!niO2F0>GW z_G|w=nnJJrBhre$a{LTKp4PZ;#3qo;qQT4P^RsrCO`x7Gbjb1tk=<+$_9f>?>~?&x zP0uV00xBrxHfF>ot;v$AhHkjaAGr`1C$}57jmuX-0OJb~o9ow`cn38=YG@&hsZ%W^ z6umk3cRT%;VDIZ;7e#i{9*lsrl$b`CW!y*S+OI5|dg*i^Gx8D76b2*om6|ozrX@%Y z&Nty^ES`zy8Fup!yaor?A+GSzz|g4ORi`X2H#zBWGd?)B#H|2xLI~wFuCHE*e~}+2 zdJx7~-i_#e?y5{7Qij`hqWw**z=eFGo+Lr->Fq8~z~;;_d)hmOXF|HGtoI%WKJ&p3 zd~H71X;|p2@7NEwC>r~+C-fxjNb9b957u4ynjj~#IeusqJ$pBOKR-E#Em0G?kRyjV z>pe%NU32;%p-~1g@Lea2RDzf|R3)IUu*CS1A7;2;!P`k4uN#s;ygrl7%raSVS{0$w zCWUQt?SgOfGiVdjIXp&0zqFR(ytCdycG(#VB+5>+@3N_Yr@_xqpY1=`X}8CdR(l7V zEs_kkDi3L{pE6%ZJf}G@)_sAO!nGod0||y79nT0AMR$&5HN<>DpgZf-)5ptD43qdC zv;SuiZtGtu2|q+jKMPsiG+2u-$#YpK zPkNzSbN+nwQ4D4oyCJX@7Rkid#hxT#O<;UnfudSMx#cI>mr6zLQK5p`Usf36hMLo^8+W(^MK^ujnq*hWk%UcY+%30HAPO$I{#U_GsIT*K6(i?D;W?6^(VAPSlDjfh}j2_&fz8dhsx8;XtzD&I4 zfNo`xRkU^3j}B#SJn# zlB4RLN;s~B0Syo>vy{_ih zC0k}#E?+(TtR+e|Iu2E61IhdL?j~wGK%nTOBig91Y$YD!0XDJ z7f=u}MqrIDUc@|xB_H1;4534;Neg|B07{6xDq(QPjDU;S6+`^dorC%4ganF0g;BR% zOp#+xp2fiJp}!vJFdGa(Y!m5_e=0;w3Wnwgq4<0sqxMKV%=Q`ZBUM4)9BqdL;?ATw zAj6{LbAD8PvWet>;CU$;OC$&4eZP1kyTj&WCLo%i*KEp=uC?jEXb*D-KDo8K)gX&n z@9b9u17`t|*ye1unPrsFmsth7fi~rd$Bb*q@Frg`qmlxEc7sZ*4njP>!HF%7pS2cI&7Ub=)t$-1>CA9OgWj8& zne#vX?V~^TDft}#xb9LD>5jG8Qp}CA|KcB0X6Ln}1Z^*rFOP}eha=eoPWz7v#^W|JMK_g&bo#tjm zYtCbJyEy?wzT@nV6Cw)uk4yR)A3X;6Pn!Rxq&7!h2J~;6{|-REkap4x$LIM@E~V#RSK5yE_ct2<4}zod AkpKVy diff --git a/docs/build/.doctrees/examples.doctree b/docs/build/.doctrees/examples.doctree deleted file mode 100644 index dede53db9bcde7a70961f993a39a95810500d182..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2939 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 AVgLXD diff --git a/docs/build/.doctrees/examples/b.doctree b/docs/build/.doctrees/examples/b.doctree deleted file mode 100644 index b560c14a7d2f10680cfc133a34845cfc1a5800c0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35853 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 <+=n=glUN*P=)>?IIFm7ntJVK4dAc_!CF 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 diff --git a/docs/build/.doctrees/examples/d.doctree b/docs/build/.doctrees/examples/d.doctree deleted file mode 100644 index 9d800385c1e65c826061e81804531719f035f542..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7767 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 diff --git a/docs/build/.doctrees/examples/robust.doctree b/docs/build/.doctrees/examples/robust.doctree deleted file mode 100644 index 65141b7fe6d3f4511444b17d17452d341c8cb24a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22343 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 Q$}Tw+P>a~3=Np6n0A%lPLjV8( diff --git a/docs/build/.doctrees/examples/toy.doctree b/docs/build/.doctrees/examples/toy.doctree deleted file mode 100644 index 3da8b28fcc9f4f8b3ba9f206626c93ea42f067a5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19266 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�toUdTT)B6Zp7Hdb>KnW_g~rtvf9!qHVU3 zO#0N!BAe>y9W`BKX);L9?LgZ>JDCQ%J&7Msj1=IFz;GQNnMLd<)#L=Arix@gh$nzJ z#!y~4dHMnHbINPh3*A#m*8ROn_b^_KRQ8(gRZTr;@-g5LmW`lo!+cADR)ZBa5azFr zu?6U4TTP8Kok0BAj4d|fZ#aRrt{P^`Kwgaj{T;GhQvFGu7q7;N@tZgtn&ru>{49`Q z?Lyr^vUDAS7xo4&a~9HjiV&M4{)ry`-JRGCY(ab6y6H5b1F>J2BS+zfwL&$XUxcwV zVT|-qoof+P1{<*kEO-OLHFRXOZ?U6w)VikX$Pl(wd`yV^F38(tv+?JEpsRLM__QrH zs5{po!Q0y#$i7UO!&TMfc{iJEF8|EOhXSI_u*SxO|KS_K86;+zu%z_w+2$|W@VqftSEZA^< zbvGo}hSjkSkOm@$aIyT2J{p(5365LufIF*0{u|LpV9)^V;Tj-kAO2Sioch9C@kCn8 cm1@Ft>UP)w=;^k|bB#C1UB{kHAWqf)1DrT~IRF3v diff --git a/docs/build/.doctrees/index.doctree b/docs/build/.doctrees/index.doctree deleted file mode 100644 index b5ce655339b36c2ed4f69b98b2994f4028e2a331..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 274652 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%0Au~=kX714y(P|pqd+its? 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 diff --git a/docs/build/.doctrees/quickstart.doctree b/docs/build/.doctrees/quickstart.doctree deleted file mode 100644 index d36497bbab52b3a0bd0fa6da1e7737d5193f0b1c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 41649 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

P)S`gGU&Bx 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 AX8-^I diff --git a/docs/build/.doctrees/whatsnew/0.0.1.doctree b/docs/build/.doctrees/whatsnew/0.0.1.doctree deleted file mode 100644 index e3c3f8255207846ba7b47e8a9aa367c36b08164b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2185 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 Og%$-yk>@4;fbkz%548LM diff --git a/docs/build/_images/overview.png b/docs/build/_images/overview.png deleted file mode 100644 index 8bf338eef44cb48f6bac3eb488836fcd97c96925..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 127602 zcmeFYXH*km*EX6^RRjzOO4k4iNKrzsDgmVTB3(+5-g~z|6a@_^hTf!vF1<%V5C|Y8 z^b$dOC-iy-pZEFJ`}dr+&c81U7BgYyzW40Duf6Auwx%-m73M1-5Qtjk30xNhqId`b zk-WM@0eoXAwZ{njx$OSrsTT-D`|RQuoF|{_0DQ^ht!V76=Z5h1d**2e^7Hc(bZ~X@ zvU%oiC+OyBpR_K+3t6YJ;fcF`|$;rudE<@?m zZSNPY6ib4K(;Uq0{2nP9lF`>$W3NW%-2^jm(p@Lhe-ZxomitCXSXi>7o0f*3*1meL zx7PH=LcsFU5=Jjq({C83KOEE(zzO@vrGonR!_4hPF$wyg6I6C63pNm@zo|cPsVwIr zM<_;UM>zaRuHkbSj)Id#Bg`Wv!(}4`62*Gg7RvtFuI|Q#3&{R>4RTC+PVFq*-5$Wd zDQOkNs&VgPwf^7RYW2V)G29>x0@oYKYbCIRCy>Naq=HX8nE$&Wudvr|mx~<>kR#*= zp)R{a=zv2J)|F4#D5nCWZd}k&2>(CQ24$5mHq+TzV3HZ)Kx`WS^D+5q7k;FlC-6B% z?A#ODe^*9+_f*am(`7C6K;$eRneM{fyAxCx`UW`{o(nbwuYmT! zVVMoRVae8$v1Go$krPQZsW|BkyZN+S?F~LGG5nq|(Wuge1sp`eqKA5X&RlaJc0+5= ze}EfmNa0H^1|IsFJUa}Y?#6w5@|+Da4mP!&zu~kZo_^x$b`|$E+3SYwyg-~p+cuVp zCrrWB#pL`Z0gWBQa-$DZ1XoOxwx!E%&-u*=5*P^y=zxHdwUrrvC;hcx{`(v?soT=q z$DterU3<9PhBJ+b_dH?ruGuHubpa?JSMX{oI=5=13Q~Gw?zD;YAjGGz>hj-$-e4mu zSf{-=%Vr9$!BKcE?m`zFOzd)^qq~GFv`Lst$eKv`N$C6$1AE;O#0YMD)%+aPim1Zs z#YW&#E#-{(8PBra?Q_m{aHrIZc2|zVpK6ns6FB5L)&$$^Vl3f|5CS`0U4)HXmtd%= z&X=Vf8r%0G+`1K*=g02Ox>=ADxK6^3!Jn!TZdzF+>=uJrDT1l}(=oGOa@JNz(wwBy z5)>&#zG5>zp2uSTH4p1Q;wf;M@rS{RSz*lV)8 zAFy;;6RNQ>csXS~lHj7wDYAyl-i0A4tW&sJflcyw#abUWAtK7OVlHDDX4c#_>r9)B z>z|%oE7*I}o0fbOatxM#E)})zw8dmj+Q4R9+a=~YGUFpxJXR&=E;YBIS^&` zx%t@~UM{fgqdC^$4*xa4f^Q>L!!}+<~_f@#x3)isC zx~|`ZD06-5{#+xRYpEyGruCKDG7?P%K#Sv$dQ>Jk1N?#~gS zjf$i61#8E8N&_O&pFM5%vf@(@?LkJ`FHDZLUr_bwpJn0-hx;UYBI0$Jx&?pX>?`@E ztWrow+Pd`I?EVfMVk4d=&13ky=(un8Z~CcT`IPPFaqTnC;OfM&n8cA{(|Ue)vqkbNZ*7cF*f5 z-Uyr@_@3yRmm#8w3p%BFnI|lkj!@TtapP3|uwz$QB`Xa(FBw?*{Ldk_U6mr4otY6X zr?R_}9#}G|#w+{6@=>(K64s$|n-;vH?w&j>{;8SK*yF`EF?^%?`EbqDiN-PO$b97q zgTHI^HdQ#4(_BfGV(*Sz^TMOcpKYPwL>+BEIJ?~|4^qJOL z_;~9cEL18}jW^49N+p^XW5UWAao1Zy>9oB0rJ(Wx==|xLmuk{lNm14L8!^skj3<#- zJTqzB!=PZ;=u_C$S!MN*uZp#IbzOz0!Ok-87e?#eacFqy`K)S@Bvp+pj8?FJC(4e! z)6P&2F%UX;i-(X%8`+70n#LUOF&PUsH*y70TG-1S6xCBW=c&J#4>lsu_ah_ zhVU6Wlg6VrDw6yKy|4AVSTR1ewVM;}oBfym`2vb@#V`kFdEU*~?vLCyNt8tiSN3{K zp}uCB%6+2Wk6|D7Ri)d1fYIT$%zjq~Ixs<;e4wQ^bMiY3{~g#tY#l(+u-iIFHz*h#ag^Ypj;^*CYTy04Ex$t-Sc zS%4?Y*W}YVDL17?`6+aUgVP9Vt*E-`#J;(l{FvnEjjf7x=p&ciBWx0kSc+??`YE@d z6PmEX$&d<`sqW5L&Vr=BV;>QMh3VphI7=z#$|aM9rLsrS@nkz7BT^10ufqANR5d2v zp=($sNSR8KxyjS_sJQuxqktr|d=8oLa+uM)-nQ3{2E0%m&FDh2*^CbONmhTNwRYHv zZT98~^H@71=|sk!N+rKc`}$7K>5Ep!GcRw%P?%66emY4OYHiVl`j>xo-zUA*|81#w zj7X133KOuKcZpBk?5t5?#}6}Z|disN-n!)kgYti`aw%dY}qK{D7TY4 z-eS1BYAq)uPDjIGcSEBV*YD;WMTkNH%fPJuqvF?<_#~a2OHR3G z7GWZ=@z7#)?UyZalyqb70_;qbeLN$$r8qu6x+w*1R6TNrPz|SS(<;Yz(wY`JNuS=F zn|C|)TTsyWp1rR};%xZ~S6(M^ra!3@bhd&!vC3r=CVF-vQ|gQ=M(5@kS2TOa^q-+? zxnRv7(P=mwCG!gB3@?_L_%`$oEWz8+Ce9BgcC%iXJ6EwfX5;#+PGQl}i1?4P-KlgC zt@S?=^pYsL;MXYPbEy2Ylj)+DQt@uP)mxJ;Bohx08+i08MC)s!iF?(R3-?HqG)rUu z<)InC7*ux%5*a9Z^Ec))5`&;-W&JDgcQn;R-RX{b6`H+ z2`ehHD6h}a=zPE*Qc~QBn^vz-@G19q>wNNo10+;DZC2b+w%3r<$3eZIm-EVT@5m9Z zcyD*Va`xD4X*oF}jLhyVt12)S`DIbbkyGer4TKC*CdmC=1e+#YK9y=1+B2f_1XN!Y zWQj>?Q`XsjE#eGr;D+v{|7ENFxcB{4XhE3Zu8zc7^7jMcAE2ms9Q|!}`{4Ja#z|yg z=~si_`Cs{-1OmA{1XAXkU@+*mSuNFO$ukg)Z_Mtp@xBi63O5oj!o&_e$L9p`1bj?% zVTB}BkAB5(*pCyG;{x3a@QcNUE(K}yYuow%Fb0tQ~Ay| zRogVuMVz76*5}ydC`0nm<|}b27Ga_v`mg~vAqtZ>nr4TXg1g1#H}Y~GE?1qAHR+n3 zK9P!DT{0-y@Zx+H(!$z#T}D8$6%#*oB(CSlGPp)9qGVmj0vT4X&~_CbJ{K=;>t9N2 z>%bM@Mjj3ayEOUeGFX&ET{DCUFd(VL#syzSpkoW7S$EU;)kaf z0xc3;E0zPA$GMgra>u=Lt_w<4zM7ouas`ztacLKiS)eNmT!=3tearxKgU?VqUV~T0r#O?-0$c#5K_5#SV?- zwA7A7&l9(A*U1Z&*q#K8Zah>F&jOp~pPv|bPnjG%{({r z+(Y`ameOyg(5P%AO=nqRFO-b8{*yPF=AUPVDVs2z){i{I`3ch^gzZCyC@3 znX9{mpSFR`)mOs3QwTxGK_an=PcNuGK?as z5_HFo@PaE763`sc2VQXJE6J?~@Nq423(=JJ^(;!KUbi)`(;^bSqMVgs4Ws-`z zKhkKH{9TANY46jI=#B%OTgoEu-2-Usyu0s?aml+qUoYao7N0uJ8RHj@R8)1B6Yh)M zmcj;MKpmw8T3b8ypTFKI!3WguaxJ6Z5Ubd+4ScZU2mRTpREta@d3yh7sk8#Yb(>EM z_k!hY;?8`tQcM1f;gb8v7DGI3)()kx>~Z;diiGSlIZ~P0cBz-1Els1Z8wVe}m+Ky3 zKVSj%7KF;7Q1yRp=m&LZ+t?&V+u*HJ^zUv3ux)x1l5r<8?$>{_CO>65NL!ZWP&G*Z z79fRb1}E$u-j{bPE6ycW>Cz6GNxYG|qkAsB6BdH0W+w~$ZhP-7GKJGRi?>Sog2wER zb{90JOj}QS1s2ZsRW6*?ZAlCWS_iwn7~V5cffv%A2tyO;b;Br)&F+n@95-CH396mG zdXh7|rxAr~h}u$_i!GXpUeHFRS;8KP?k258!CN^4UDV*K;NVE%x7qkTmxy!a4z(@E z1Lem%VI>TcFXNQU~NtSeBLp$f;#?vFSUjrPBc z5li;-r;Y+@&Ecz4PTU3-$!@=;${PL|91!KQ&yJaA7kZ{k+NG-8jwB-nat1TO9XM$w zd4~QeNS{yahT~Z7`PYffu=M=(@d%>h&+0eGz|Fk4HK$&A6AgJ$e!0hoCoFp;Q#80N zuWe!^$8f3;WpG{s1-!K`zK@5a3+GYmfYG5(D_#z@L5Rg31>A5Ca7mzrw^B4#Jfo0p z+&gI*@J=pw>@@k94=++ z?~q^I$I_PPk8;CZ!u_gwwu>280#&LSwFY|qNbl~Kx{2rP$l1@&y-OK;PBXVV`Pi?c zw->x#R3v>1YBANl#c54VNWy!pWJxklsa)nVf8wHAj0^sNYG@3&{&V@=`RPqYO7YWR z55(E?#28{4_O#NcWc}IsJWSB$^zq%jf_2=9fcAM(6~m_Gr20ogaz**e zGMD{rn#ca3e*HYcAgDmnaz{wLPH))nC8fz`(lAU>kU~QHXcUUT+!_D)ygy^r)`BuV z_$q9UKRvbC)_^b$+3NIF=_}A7Ss;lbDe1)pKK2nNT6YercgMU%ir#h9_wj0$yxZ1n zH_x`#2|Ha-mo8Ge9SntWBtCCGxv0sOPKZuyJmMu^<0tGo){CLl5q(&UEO*lVW*1 zLDRmT-DFv<7pJl3|4+ag_bxKp{Lq&TNlD{Q!>J`x#a5zM{$6Xl6A@|wXB}Ju8L)>d zxvg_!`_KU{QRXI-iyJFWXpG}^EaY7;`L`=`^JhMgt?x()F(}P@q&U3QK3pDDuanb! zWE-W>KvI*rbcm^Fsx|Q=QM25)7beaEHC^*CRh@*A{M14TNti?6l*Tp@(GHVi3egVS zv80E%#Ud9JTlXMae~}VUXcNWB^%0T-ZNyNnGZbo=6)fl#v2QoOAzkrj?cu4+nKs;c ztYzg(VG8FAI^~MK_(YQO*M_XlXZ@P8k`fO~Y7Nd_qM9>Dm+*s{DXd^;qtg=@K|_|k zI*CA_j|g*;Qp&yM+)^hnRMcl}-f}mbqsln!+UCNt+Yd0L%myxV8ww;Au!w^2$q0_$ zhn2%&`|0(~?|1ie$4{WUUYYDC{}KU*TR_6r^#wVSyv2E|3T>5!XG#;YK6b3be8!}1 z9N!n?_|?v7yG*`BOSd%T!cS3!i*9vHRF zmp>o*;#s~c(wTg=L204B6maT7$kPmv6ee1zdali<5`^9&&lm64{Y`rssJBlapVaAM zkftGfduND#6-MiC;aj@qXY= zG1riycPb<35aKfxmWV zkMXmgKfaqsd?PUAbM@Px!NSgWd>IP>j=3gWlZB>s_p=I4Q|=X#yjz=4LJJm+Dsx&F z_)6=yOVAoO1x^%6?rTzNxs22AQ^k&>RwT_~fbca|HUFwvH9zq7)E zo{{p5W#lewrIyYFAHrFB&(5}W#&LHgB2B3^x}f)YIdViC+N4s;6n57xF^#j}R*MAW zfe^Int9rRXnySM-^57xdd5ZN?G*S{zJrCpUz$6us1s5;lr+km{88s=HT~>MDNIpcI zfkxuWI8~%-)96a2q+mD1-H=Fu2%&Nj+MjId_q+As{Ot$(B!n&OYsglGZ?i&(J1=*Q z7oWQiyrG==srwUn@UAS{Zl>-fbeCArW0q(OG`DfENqx40$z9R`+*BBtT3=ZdW>1^ds= zkq5)b19rQy+PUy*?H5;fS%uH9LAn%M#UNXnog2E7Q3cbryC%+@uo6;VaA@C>kI2)< zhm(^qnCThY8>9i$nxjqY0mWt$a-`tw5Z*e0^!MH!m20f(WhD^ti+K!=$3={gdc7Ag zpD4qyD7MT0N(bh=#ouMd{m4AmVv9#B0n00)D6~+~o^>(HrgD6cpK6oZ;BC8N;Qn%cvD&qHRL)+2EfU&j_iI_+gX$|L5> z>v)ErcO~#-U9Tz(?A5t;nR&-{~hz9AP{bQ4&!1 zZnB6&2We^}0ACL#_-GXLkfv%$E}VVZ%1U$1ekXHOf@{c7XygFzEobm@{K6H-H7d6% z#rKKz=DsV;ua6Lh&M2S{qu9s#4vx!N=KQRMItLL&W)^I-gSZBV7gFM6P0IVVLd89} z&l{Eu4`r@MBnsE%gceUIqOYuHYwE=*wsv5>>YaO;(1+`e&6Wcp7TMzV^EaT@%Bofk zEH0KnLkqC8fo>p|VPfE(#v-sv@kvqQpkd7q;X!}(#br6v&?HXeo%*uP%ZOHG+Fduz zj_%Ssn??k!BG=Vk3P>5#CK7kz!Lc%qqA04bP)$&s zyz%s^bHRELIo~b+cNXAU=3k}J58I;?s+apuJibMgFz%L67t%UEMAt2qV0ZCPFcBD% z?AV-OrLf$Skdw*M5T$<+t()6CV|EJb{mW}J$;Wnwm>wi4xzjhyJ z+xIUT*Y5?VL{vQfx0l1Ei-x}g8N8L%s(oy^oAbx5|MdJ#?l4{agE1OO%{eoQmBh|E zCMA%b2|;PzAze7FUn29g;{MZv6hT2@l#>*IFS~r9f3xg<<9A^~X)$~MnKq!N|Ic_q zwq1|u)b?jlMt);=XSg%v#7#(=%%4~Ef-K$_G8&Zsp86=EOtNU zC?b~!&3B_=3l-IkYc8=jpF|_jNPp2yd92Dy*Dmk3NH*w<-AmVYE_1R8@?at85R11B z!1Y%FFI^wrg_H@q-*E@KkA){?4NWmYRzM{^xG2iWn-|Ko{I}aJl<3$cP(9%adEjb_ zC>C*>YOslT4V(Tp$_cfgIiW1IM_A~LSAjPJ;BoC&l zVVB^7C0wmh8Mp(rpfyWFTi*0G4P=0HfzK%?XjuW|l(yzS1?td`*Hq$NIHxg}SY(oG z!&aMes_&SC@22BzsBeb1Zm=REwBhI8T7;!f-pp;n8}#A0T*aJXJV;SG8s^o{CeLZD zOz2-;Qb8Zq@eb~45G3O!)97UCm=EMO4{;}&wCxs52i)$GnWX96db=!pblY9PJ^aSM3NI252VV1BT=0h^9>1wZqG$;LTr-cxdNhiduM3cvOyr4t(|F#W>ji6d!lmq`)SD!oK~&u79%hKM!me5Q zPjoT?eu&ij=;2!`{mvqVdR8f_wYNrcx_^({0Bt7se1PRfg!X)w#c8B2A$)j|tv{7p^aEqXYcl4IezgdzziElP?UjTNQoChXwue z&((4L#W7s`5Fv-{*P(~E24Ewwx#3|&h8)b0lBCY7B#<&uJCP1ie(G?u59pM2h8^87 zkdU)UC3sUr^;(8KI>4vs%pjartVl`}7B-Rbww!Z@jPRUr9SE#i&>1{h@=yF9^x-U0 zg5KW=9xMP8N_ozqf>Qeao4YgyX#|ea^HiM}%Ne2M1;11VOY7uV1zvmp?g;3rKjawO zex9Csb0Yx@i|EFPHP~L+9Tv)?K|7n{^P)u~d?LCd62RTybZ)E{udMP=p+GD+^-9C# z8YYQL5*#%=(5mI_gXWUGFekV=_bo0Jg^cA!9u?GQ4K3-jgW0tEi%M7Hkp5u1E4c&0 z#NNquqxWBG5`=&5YT%dgJXuURGd$^Xd3ax#xPcB(Mp&ew6SPq!0wi*i z`m4X>M3ye8((NH~?dD$t#Q{DtC|CQu=Urp^SV>}%mo8>+A`v}oJDh-Ne0Y$+LouY>^$o%~m6wVTSd+Mu00A0k!4>`Um1Hb{f>tMb#lf;q07yh0^Z z{J|o>Ot;&p4=u%i6w*e#JaC5>iuY+65SI0@aW}`A^Z;Z*R3Che(9BaS7MK$I?Sb>2 z4SyqHw21lp171A&6cv;FYAwfrqbTc-5vmG?h=tvtsn=gY})XmPEK zRG9G*oBuGMP@Am`heQ~k-g6(_Nm_sKTqyQNl2{S->I1g+RmI)O2G{)*ND?Pk}eTI7BbAQKjLTU0- z-ujjA{O}GS%ubrI+RYn9+zX%0p$kW4gAW7N4hJavuK+Q}9bNn5R5mqQr+= zr7Jw+ayZDXkX?SLY_K&^=tWE(33c29y&L))xx9~9OZV@qb9_P%mwP`Eh|e$cUH9CN z1yh9&@70^5M7l$bgVqxs1KRw|YaSPXe?-Y9GP)7ZnUP56O-t}4ypYo$J&`@$v}i6@ zZf(Pk#jQz>h0Rno1^x@T$ zpS+SR{&QKbx1TDa?X^kC+S6Fn%@bukXSKUg+UD91s+2oOtePEUT!oeulKfUYo3-?E zCZzbGhD&a7z?g@*aZpoMSUVRWOS^f_>M_THg{yUJq1Xt1?w$}@Tv3{-oFlL-cM{W zp#Xijsn6GmJH8p@;i+H$jg6Hi7{KY!57#&_uUwAHDpJxYKZ`I(dP~JfU*09#h+RbF z;u@%HUU@!~;Q!95lBoUZ<~PZ{IT?ZjsbdWA+$8^)m_B~rsu#oFJRaLAOa!<2lB^y{ z2f=Y*8Vb4b*s6*xRx3L~a*ogLEOm>B@$QMpjY@v}m=^D$#xPmchG{gg&f^w3P{7mO zkpwEfwmphbAighooZo=`tkt-?$!cYQp~5Ujj>jfdZ5Y0P%vABovDa<&*|btD>IM+4 zP$GJQg|gFr*WLqzPA$(mP~1UHvuqpwtLftpEM*! z^k}ZAkv+VSOeUeMTva5vcxhpd$?7f|IRYN}>VU5Y`Y^JF#I9wJgqW{fDv5KEf7*5i zB0#P~Jg+1RZc`j+WCW6y6cei%cJfJQPM@LI6)gk+xPOf#;M z%g*@TDwTc_Y1*3Rr9;l}FlKE)q5H2Pk(`WzW)h3+=PyeYcKvM-Q}~6t-seY$U*23% zZXLtUhHvcGvUTs}s`r|2TqCt(E}VDxMk(y$^NH-txijQ?cwB^^W+ui7qnwLHalNm2 zb}3wB-mtl$cQ=&IzZ7VdBEM|T8^8;dn3SaO@YR%6{ihiMX2@b+h3?mQQ1p7 z%XaQ2xNb~)^IrW7W?;f7(NJS2<@D>jl%?MuMJh-S+R5>$70u~K!fHWS>{X4I43K+@tv1k^U&xwk2lwrsZ;WEa z(1!ymhLbhvV-+^MD$H`0fGdy06r>qtDQvt$j?mQHgOxZK<&5Z+D z_ba8Wn-*3DI2r%90Z*B4$t9oSH*oMj?CS3zZCmKgT8!Gd#l!DI2#+ zx}%~SW;D-cccZMjmLw8;U!HWUo`m zlGsvrQu~EVADagt1fQ)UW3r^K%SWPX(~p#L0bi*3lKgACa` zOJ~5ehfevQNAdY75-SX6o63!{9;ea-J4uacv&}-{CqB_CwU(tYwoTQ4X$j9MUMB@g z!R&m0_E{S$A~2mw3yMu#qNs$qVcXqOQI2(i@xiSA(qE011tDbt0N`hK3;H>C$1G%4 zq%s0&%rWxmP1LVY>Kc~kxUA4irKMWkH89u)y2f}~L@=-63rd9LRLGsKG+G{!B- zf*-&*QrpBtq}b)EP40Yq^;JBC27Klu#Vp#Ls6|{-=ND38*63X+U30^7!|)&8Tn!}q zbwxv7%P1BluNR4bd`KAvkG2*{e~0r=|5+6(iTwKL%YLP4I6aee^YUj%S&K-Ola%OG z@7$`WfI}7Ff_NS+A%r;Kricj58*GF*5P*~_YWOW{hsYiI5zq%Qy1|`=KYYGg9U|p?tb&*lvk?Gbfw!(E-}wCgUP*ad*l62Y7=-`Pvf-C%$ifW1dC_&MV`B$lFTQQJ08Fc_%V z+YF+ImTF|77BB@3rV5sV_8zxigCPtxwMPN6RvXI;S?Dvflqirm_{Lso@31j5tK;B< z@xsX+q6VqcYc2<|Wf7{@maC(Ke_qmri&)-QH%&$2f-fC74`4WxLgf;dI8L{qst;$S zC$IP56tM}3hAt#BcFbd+4S|lY5Wz=>p4bI=S2=Th)ZYZSZ14OI% zbd8oO{PRzv*;{Bqk~867kr!)e9)4>|L;Lj@tJU5A4SIr@qMiUk{}2@)VJ9bT|2=ZI zAiosIpya#TUCp!wmY<~^eHa@Z$pY4xy8qkoN&jFlNlot3;TYD5av(lqFn^)F5*Y4& zR|!XD%LROqG;8!Pim{vTNjb(aIriK#HDGz5vwvo|S1} z(itY>EG48$Bf9F*uD?R;J|CA#S1EFYail`wqg#)@X`SdI$ z0w131!?V4Mb_8<1Q{Tf(pCyr4Hw61hRdu6_Npm|*M4Nt}lTxdG&UX{=;ui@ySP4m} zu51crL+n!8*|LOc)ca|5>uF-dyo`N$(ZGx$epZNb>K=(bMja7k`Ps@Yl`?OR=9A?V zIItn=?MaE!&Kz}AK%rgdqb1m@p=P+IZ~MI=fEbgSzjyW5SN`tF+Fe^dpdqG*%9F2* zp6QwLy0Jr?6-{X6`#VZh1VcncX{>$KF?>3V5H__bKEClpw{FB zcY>tkOZ=kFHZh{=F)D`#=0-YYV0x-g*g+yy43F!O67G%yEH#>k^6TVH@_N*O z)(}ClNdGyHb~f<=@nU=RPg>;<;(qiruCiRD0AOrFfq~mwBoN#q*?f;l)NqNa`sd~Q>)L-$aKY|5W1K4e-Uq}P ze66^2DEWldOKP#j!P{2XMT*0GmvY?U&J2)hke@Ey7kSK>2**Jf))G3?gY>r#nZ`9F zpst?EwcSy4D?U#|);xf&g9X8c4r2}MoAt<=dr(&-a$0!I!+RH2aR7~;jb40@hc*WD0TVmvI zKsLTMjD|VJjnB?vA=nn|U1?Su(N5|UqhT?iDb-AJ2AUX1<}YLxtEZWRE;3-7@HxOJ zq&`8Pu#Z06zicrbY^6Xre5XOvEak4`lW~w>SW?35^X!&v!{vKo?)X8P_)FhD|C++bDD~{n$TR zHZ}A>7{+OxIV%J*#DuywHE$_)`fy=M9~K;wy!Qp2lDQ^a$zF(nwU~6anYsbH}F190K;{YiIz}Mls#hn)^7kY3L_~Y*X+g_ zX|_M$a=3kswj2^BSKO0a?azD)cs%I%+1)&r;cbb1+-`l7UcMkh;`L6n%k9&ZtNYGZIW{tnV zm4ie?As$TJl)v`k)ImZjCT(!I&0oS>m$$*fFxs?QMjyAEO5qRDpO?|``Gt3`hJ(_+ z?j#%k7|E`)6J;Si4J2 zP4sLDwtuORS;4#9K|b8K(asRz;92P_>w5Goc6kfuAQQ>eUBkE7aF@GTkJw5uC6$jw z(nrMAt!ntGtQ}5a?I0d9?y88Y<^f^<6uPw2--IYG2Ys1VnPT&XJF)2TGfPuM(+gof zZ~c_3!4wkl!ccg*K3pckb29MFcUl!)+P&p0HYeIXeXWh$lI5t@Dr(NnOr)O z{@CumK{i9#Q0Mfb57`d-AzSBnO?nR-sW*3#2an(~Uw`f?vHA6d7B5ZmW<8p^4oN}1 zqy7Q!un0n{>Y}nU{Ekr!wcJKa`nEsk5-iV3HOUd>xZs=qRCb0hhpB5M6SI;2T${Rt zyA<+VDwCLX6`5)vc+)yAtTND9j&5Nimj^gTtsnjE^Un@N~8!FoW=#; zcIThXwI%bH+Kl77=4q95?ndh^(Ru}Y9L}NCYN+StG3|XN{6q{^l3Mop2}(qv*xx@T zW*kN|pt>Q*nzJzy@(FF3^S3}o7%IjA=pt{sQEZlsc@kItxi5v3`6cSL9i#hj@CV!p z6;O`x-WQatMZ7lxJCRbsh-Z()l~9Psh|qV!%d=GR$?85@B~|A1kh?&Io>+C-7_A^f zexL|%u=|}t2DPTQI;K&KJo=%G%I>Ih?O>kheW9r+mWzv(?X=Kb+VNOUXUUv`x59W+ z7;YpUE1(9mG*fOR-2V$iAq`OWw`&KarT3wRH@$5JlaR(#{<7{6%`k2UrZ_aFB zqiX8(?tKmkexN~A_W&hw34K_On_wHEI?##A)XE74r%cb@t|AqTLGCNIdd4}=>w7OB zdT_cgsfz;n9oiS4S=m8jnU%o*bUXRNWjuJPk?4UwwCTLA%JCLyPC3c$WB8u^OvYW_ z-5*iKT*R-Us|MMUNFS)|{_XdI6$85T5McqY{Sp`gUzJ(h%aewbacn{fia>YwQMEFP zLIBp=i_0aICOKDFFym-Uq-=O2%>1__q_8>*Y5ZO|#Yoz6SFMuEAzl_sQf&DxaC{8{ zRFGDjz^eGNBb|j)CDBL9=LH$*tvEe%^%Rn1dPovYo$N9{ z)E6X2-M|a$W%CZ=a`<99F9ah>5IzDghD9G6pAN-yt>h}Ub^;rxEIe-S=#4tNkbQog zbzdM`wf($~n|}+7VPeMoRdqz_6;_4Iuby8rNKrK+_wB-&0$c#l&p}?0rw_tH(nbKC zopCi>--0&y$^qh&>0^aF)yQK}!U67tkUq|-(!vLG>&EE`6M3;&5n);NWQ+7@g(Zih z734?}?XFM%(vJlT!Vd?zCN34y{bBBV#Ol?X)5ak`8H|Ga)GO^j2onK#b^B4ZLXq9P z77!!Q0sHCWP?f|GsI@F1P3pR&ea@ILg8~bvV}=?V2CAp6lXZ0BAOK)NGsWaJl|%ty zVk}mR_f7Y)9gOe-dGO@Z;x_;j0&lL;C^mgU)9xMD00APa;Lejsc1Q_2BM0c%Y9yR4 zvdSNfsf*h3MT&v?KcIm*gVC3+Q6^nDTKgQm)F-+dn#qw;FHy=XoqXbY^0INluOCa7 z&s;Duv<9(dBJ-<3Q?W`CXzWPObp!2EX5W6tsz<~TYOQ4z>mbug zfi;58tjcL}jxPPMhin$fu>q@ORDY2?dDb_^)`bJww|LkfD=jTZlEz{yZZJflbgI^ct}DToMvP>od%v#`NGswCaWX_h_G zj^~%t8U8y95WW&2kN>=aX=i~E|HxI9eR{L~CO9N9R!F5^yUuf~4(RoRgu=R=EQqOb zT5^Zq(T>1tn*A5eBC8ERSSjfJZvCK~&WjiF2MU=FJxGdz!o`%_-m%o`6xH*>ydo3F zG;=|}N?^n>CZ{(5hVVC%yTH@07>n6@SPxw(t{gHE0?A3gybws@+g#EVR7yAI>BZ0& zO5`+#Obo1PyZSsv-hN(t|I&M;GI-pVN4Vf$>0CnSR9xB2J`8g-g~BXf1HK9+66C#1 zR!ep;q%NAxq5eV;0DHS|vG(&H(Y5zs@*mN_tFHx7vIjb&VK3G$IMP)yEo6}tg&xoU z)dRTq;2HHwU^dp_?cQ4HS|+X`pv|P8lHy^`=(+ty&ukW7NqcNq56(8KG|JppnBI_K zA7d5GVm>kMYCmH1_pk`TXCRHzGJ#u zwn=j*XJ3$+wc@wYwJ?>QV|)WLAhmWsTLrN`L6liQBGXuCO(SZjXZO!nEI0STPN zy~#W{9<+V2z4lQq+;sYz zVf8U7KN!XDMk4yKxa9!O55Cxl0rHWRpr61il;@aYv}KzJutSUdEE9uTHwJEIP1HAV zo4B^3ZeS>ODA6QCbM^IO`#x1S_Af&Imlw!>-G?ycVVq>&wFA%ZkY5h2-mfY8cIDMB zNQK0p=*~wn58=Loi*>$mp)YxRGljJkJQVJx7N5{g$LzmFa?4+AaZQ;gx~}?g^DuZg z@Oq3&V*(3PwfQYTMkYyK=51Br4S$9w!cR%K0xUe4Se`b&{&lgJz(l8|;`4TC7HRKA zcP{NO>k`0H*-xm%kcIDj?yhf(Nwdd>*&XdHeVe#t%3DB?nn0=J=|6D(<`Y6kZj-rgN(o%N_r0fcR1Qfrbp zJ(RChZcM+jEFlQZ#8gpbuepztdpcr{x-ahJz0c$xG?}y>K*2vT zFiJrd{|HaHc3Cn3^p9sA97qi1E4E*1pXjmzPd6;(B=MuC#Q5Er?vZJ3@?8T~%Xtkv z)YG;5nNCK>|Qx_p50zq^{==Cfrp>)T2- z0ugdg(*2T@bllCD(rWvb{NbS81m7co#twfdiZ*#!c#Z>OG7CIB;}buS3oh6S(_*Yl zP{TIMM7Oc3!&Reb~p4 zZJ0m;9vYbb_Gryc!mKlX^n21U?Dh+d)nJdb1#S~*X9^!z)GiPRBmWFisUqiMZjqYY zl^|6M&sKcOt*cD7EbG9tPBtzT+;IZH-Z{9N6Y(lR-?p zP*Q!Llmsv!r3X>JicSm!-VE0ncBxu%f5fbV8SB*1s|Nh@dUoG`n`2~tM*LMSrzUND z6ujm4453?mX}NuJ!%l0v9m+=H7G9*=O&4EkD4PLT7(V)r@|uTEDOe7x%^c$}iS zJ(yz9W-~4;45SxJL?gYyy5KLp08c24??+3JW~D3C)!pWiYXtVDU{|uPSX<0tfn>-} z)-euTq+Mk`N~$kp@4KvEldp9K87y`Wcn znf$WQ-k@kNm1=za3Hj6^8YtdP;dLR5U;lgEaVDuHo^mvsA>FONhn#*Ne)BL0y#Ca^ z`K&9Mk}M{uojQqA(~B$wxofrY&nodcH;-R!YCU3?*R7#6SQ1>vC+R)oVniO=kU2_O zuD$bmBLWbvT}JKhNlr$$%cxn`xaqpRu?9Q$ED#%!I)Se0&db1A7yUGYOLOE&+3hg! z*nS`qS-ibmx8VKH37iD&j$L*wjwQ?g-N&9?#?vN5<8YOdb`L2t=U0TlT-sN4@|Z|) z=uCbku>BRSN;jayH%ZKNp|en{YAC&#dcbq`Kbhol$clwqN!ma9w#9%_#pUENFGhHM z`0R5f@WeE7&`1~Xo>(+PjceGUBk~<$k(cT6!t*kWb`a$*oWZ?J1CIjX=&2h8w zJDw8$HTs9i@lHk$rm4;`IY2~*Ck=YgT+6`py(pDKL16%UKGu} z&3NE1Hn@9k-5?nQPCPrZm@;_&Zz8Tm@aV0H@j@0`H&X2?C2+fQyQ=E-S-yXc2CqG$ z0sVr`#;cQg$VJH~;_>=P?*aLsZ~|`Nlkcz^&S$RUh?cyEijhf5J5rw;QbS~Yu2L>*aIvs{8WB=GxLV-RIzG4k!h zggS#%F-(Rw!((_!@%UupIJg{NPe`|lh*9VBx#;|)O!Q;)~B=VJG0@4!IL=vDsb%@|!UMS$pC^o%Z9V?uquSTMX%^-mF0dPH zG@kkl(KuG6B*9#Jz+3}eGhBKXynHJYgJ?X(6|m7|#3u}0ZNfe&9`L*vd|_DcGx8B6 z1y<4+uXfAeWj|Jv0{SFGt>S3DdKxQaNIas=K)AU=Y#;2*Owqd#C-XsVG?7JXiWmX# z9oOw0-_=M%dSsR!rc;f~e?v&0@qBg9k)Tc|R(yljk>&-zhaZ%hiKHiz&VVwNz}~De zpNA0kri{ie!B*Oq{41!30w4kN#vh8LgwjKjw&E0`{g>dax@)8V&qGDFL&0|P{C7fG zH8ZXN`W$!DxaB1tRVmtjX;#r6&k0#EwArZLyLDPU>iDtL;k0J@RQeLt@e>zbf2iE( z_pB&^{P#^L=eEM{%Wyxj$!PBzl3IOFHz2FVFM#arzetw{#{tgz3`DhZS(Ov-=mWj{ zVdQ@r9miT|#2kCUxk|fc?6mw+VBB?u+6}Ofksc%d8E4_#J#9~(vY2HeZe0Q;cGivA z@8l1x45QQ*f)PfS#S!gICYUP}AO$5O_Rvk-Qv?m6N6n$#^r`FL6i#*5Bi~5*;^|oo zQpZit@%kbHF-DV)u^0n4eO4)C2 zApsU7@NTku|Dyu~@~4>>L?oSAZf0t}s0WwC0hFXY3OA@1YsWG|tveE|+*GD|ys;T! zeBwl%6W%GmDIzI{pZH|W#_wxnN!`|ga0&CFh*M^Sy?O|_M~!q%b`F9YFH$-PdSy#c z?~su#s-pR&T|_@)X8L%gh4t{{-3iIh3W2rhh}&z;?K*Qgw|($3X9VW1F)CzgF z4)`HdFWs;$)aaao`ll$D9+#sX#?SQqTMN6;^LK17D-ytGopxv0 zF{z#Qk&Q2(z6?`%=qshg0*VCXhGz^K7VRl?HZCi|5+~**E5S^5ysG&h9 zDk^Ge<=5E%kb?s|i?6~?4pvljSsh`*L-{Q~f1_QIm6U}siY)9GT;UrOLIR2DkfLUKf#LhND)+o&8`jVRIt_xL)S=`NRl}9 z5!QT!3_cQbur_oc;~ws{;yGmSPt^v{%=$7;~$$J4H|!qg$_l1@kRfR0q<7%_(R7Va?Ta5w&8?%XVXh$p@t=np0s<{K8j4G z%DfTs@V%?#Mg}_g&YXcH6T(lT@-7%qG=%B46oZbhMk|o&$O@s{KCZ#X+oY zHm&{L+4d+&g5Rv8i;fzBt}IUKXW<^p)h0~%3@_s;dKzb~RMb8>V00|YHATWAlG+FI zvj0eF?KvhV?2;{JEiwu3^*p5Fixl|{ntQd)+8!tDgM9rU&jC_qMy>H%$PrHnR8g)g zOi3Cxzhz~-JHBn+;SBM=ca^nAiJfP863YLuw;KuCotqAdFzG#nLETbp&X3(%cpvhq zdm^fEwlTG5kf779_+MIt;-#g&qPaOs3pP=%e!0oX{$f_PT(ID~DgG~n41MOo3c*nA~Nz(R+NB421WPu zh|a!#Ik9Q4v7b`EMk5OKKKQsL$-xXKn!Ohn!(R?!Gsd65{lO}4z@$@$l<*!xkL#v* z8PgH3b$N|w#hx3Ta{-XF5w4`U1i*!6vF%u~XY(5zVuxFTO$<0uJ#~G5ljBT5!mnR` z7D4SUkAe#}@V!m>jca+Hb%P3&2>6k6-hIm4b$2GA>{XMtfx#3nDg6Ko z#Prelc$KwgS0n=-D=BM2Lc-2MOWLa@_X_h4EEQE%!&YC>yu7@fsfv%Gp}1Vqym@ar zoQaw4nxEfbW`LEF(^w>)ZV4uNv=g(%7n=}Q<}hvve?Jq$aER7;O@B<6aeREthst=u z&lAUrXe@1I+WHI7FKNsm;^nfHajCk^A)M@Af2er$Jrx(9Uwz)@^i1(&gru;8B<_hS zL6$;6686U^KshuB?Sp{BcjaC3pm7+5G4r6VlqLn1%4h~3BDWx(i$T=65WdeAA54fBs;dOuUm@HlrM0^{55HruDQ?-Y_EmW>{vOjeyKwFAVYW1}e z4HXNYzFnZ3zJo-O{zo*69JPce|3@r>obP{jHRqoO!~axRD2lo7^nj@AnyRo!k?;~k z0pV3+H(B{+fL5=}xHsVLm}$ZP`n}M*DVf|A3xr3>H{11DW+}AKl0Ce%P>n2R(ObpX zaSN1I8KH~0g{0J4goGZ{W0AJoDQn0h1AZf08f0yEDx6Nn+|cf2Ao|W40{Qi$$!X?! zK}k<>v4%=Y{b6}4?XB6=_pqv)pmiBJf_bqnb1X-g;GlK50Hbp;S_PTsc(KgLkJPU| zYEXY{<4r-UYQ)T55cwm#&sc~`;;n=not+;Xrnm`-yqd#@5d!(Ypljw!+QG{Y{^-Cw ze5kdHE!6+0_q|Q;*;600$Jc3c!hA-TNLD)K{3qUizR_tdMp4jx$AD1!#xYW4<-r#M zx;Nrtg7Jt-tA5J6>&5${y{7%6yX*Zb%U)8Dk2|dwgD;P8dv~Qj%%NKJ{MCQ1ciusq zRSL7?yXkD;_uv#2(a(f;udZ7EPCjf5Hcw$Ci9s{N8@!dd&qJ7=@#pI0J*94jMk~^P z84vbvs4w9u65azDcpuNXyu;DhqScA5SdT|}Lo`AF(5<<2A(JcxVg1s@wrLtWGq9TT zyDvUyYya8@7=Mk}zuQ@q))aS5mfMbHszJ0KtE%W59Cc8~RX|zsMEb4zR1g($m8uo6F7klm2Oag&}1(|hrXKHjyjg`i?&kwBDSN5kOnpqTM z#Lal7C9#(F|6u-O8gc)1P$4*zp%wHv(#2P5@f<}pu=@D~QT62nA#FUjXoIvzIz-n|KNhpAb_s1h;^rpe zIVZA+v`R;X_I$M&&7W33(o=#CqTKxzTvveAI8SBiP~y&)^zqSuDYh7vIqVtl7s}n5 z<0w8#9j(u?j*m}hi4H{)AA%u0zUit0deMbwTASudnN{4IC!XZ>1LiyYOO`X9yU+L% zus@O!D=QzNdonG5SaF=5A!k6o|K8F)YjV#Cz}DKBl1C^M&R(&=)*ZB}&f3Oy4TxyF z_s`>!()ue*uLR@R)mJW7qpZgYwGt2BayYxV&>*t}HqpkIj%HqMZDM7mASIv4?+=)G zo|o%M({ zFW8QP85A`ZnOBBXT&nZ)t}f1;ZQUDI>*4RP3Dbn$zl`wEO0l$gF8#+s_f)ccrPp=Y ztQY<3qK)H=>1{FwJ!8FEz661I?2o^kENT8Mk(E4J#7zvoPwt}zL<<{`Sop!&okm=x zD=z0o?4l^6!){+d7ce8;lASZ*t`%ZCkM&;~`+kA*74;GYc|8!u=&<6B^D+j9r25Jz=|vz4iy?58E1&Q*>RIUUpaJ5$3AT8qDt zQ>`MXzX8){1+dy9e_jKKb=vlx4X^@5_=OY@;h3IcR z+Y>~-cdo(qses;k=<_s5W5m&44(0>z!E85eiTKUhYwDyKXbfl_3l|Y{hLH>S1pgaN&l~ zYg4R#{X~kS(e>|7xJBeztSawvCz+<@!O{=Va21FfkM@Ba=zX&F1GyTz)uU72&C$as zAFmvCGi_#gESUeBAlUK0WjT9%$pOmTi1`{ur4PZcq*+wE%!SkkR>P3U-k19#a`#-d7SG)2|qR$ecY}}Mhk5`C%(Jy|U znS9Qv?>TLM8ub&rZFaJl$aa0>{NFm`?iIyjDrR{haB{S?K(t^^Ro&AEAlJE=r17)- zaXH@DWzH~irVo1m=$_8l@XWeIv;`<%q%kNVlj)3vIwm^fIE-J$5QaEB$3;+wsO@L> z+0K9Q#@-o3PK+;|U(<*W6bReuH(Yo zxM3q337?;@!ZLhvLLI&N=}nfL)NJg!?85~H*dUATe#4!Yh#6ik*^3bd8J|3aPf&qz zK0Pla5yd7bM}0QZ&iv?M{?Ga8n8xKFM+Z!g0b6DBi+w5m2E}s(xxL)4VH7*pL()@6 zJ@?=J28W9790j~knUF~=Mv>9{S184t|Mf0?z|A43e4MN2*PNW3%UA!(H$M_dncdx7 z8v9?ayY9|~%tUZcT@Ec)Uh++9A8veup4)%S-3=EiBKKslHPS&BBK zC#0Q@SBJ51aphfV_EYk!qDLN2kC$g*tD6b&No^@(Ux6w>09}h>-BuB1B|Om|2YS&M zVwy1eOf6(@y6f(MPM0@Dv&5O|ZMgsKm4HQ+J0e(Pm897cjWy=3~0X}Kun{|3t`rxBgFtDT`;&fd!&YZiMV&G%3Z@;t- zjJB(3!+Xfu0ny8bpgrTtRMV!!RfoB~o1i0GJ}?t${yqA2I|1us(t{&-ha-I!Jq6d} z+o%FrzzBc5>XS1HG7jd9D&C%yz~?Ll@7lWsC%!2>;1yu!aPtR3Mw?QiO2X`XbCBBT z`yjX_>Sm*wSAQ&1*HeX%z4@+8kIdJzI-^CNtLDDXC_a7YXgHlP@>>2(RsXN7iCWyf zgiTs)W_@jq-?E4J&F|zN$3xOXE$0jUTB}_og~gWpJ}%RDC;09yH_XHHX)JrjZ+dfw z7zZrED8(X+Z8anq+eSK~)tqk|Vh-IK@GLFv@4OId0B_u|z3L?jj6FJPLk(m2;zz6B zoxu&L2CU8h!fXbpxkB6BaVH^b#%5)F;5`IsE%5Cnpcei7i5gecr>x~yC9n!_wL!8C<7p?lvbx-}v zS8VXWN?qr;J=@{)i;&!xlCOTvEtU1B+*BIO&MOQ`-}`!>ZYS&!N7#%lwD_bvu_kQ0 zzuh-%bmgo7``f+eO7FtO(3Kg|_LXenA!`-=#_Ry+bn$$C2~`XWfGSmXvw8|pU)F^z z`VD?7?vVKglKmW&HplO4lz(UlI}$D|JqxQ{s|sZOG=ThA$yF{IQQS4e!^!8-v?rwg z;$C

*GGUE8F2h8+yq3eU@(~<`~L&yT2LUcM=1l64qf;kFf5=4+1tEkb9ItSLy{K z@*>-WV3s@>^E@gwBi0`CVeWi1x08c`1-*?{6(ifOOOq2jag2R?NW16KBQxqfKRiNM z1e^!c1f4S4;L;?ibCoVGWRA2^U}n0H$Rbtco11PzOK;}+1~Is6H*olyq6=^-Ij$$@ zk7UbXpQBU9$>QSSrHHw4A=B9L#=t75RO_X63ppzTiqmzjsGk)xRJ#QV9!}fiVMZhg zb&Bg0iMkSZyORX}T0QJ-Hzw*3RQ`%^B1yqib4eZ{OUADb>#9ciKdxZG>&uPUJO~iL zs(6E4=h@Pyqoq2$Uqr%^rvR2b7MO-YAngy9EJ@GN6wp5grL$&QJUQS!ApI@_lUAFk zi0FkvMkp>qfhIqrbA+@hxFZ^C{3(ibykg_zEejEiy!QeN-T`y7dnyl=I z;;{byBy%GKVF=t3y&%r>HKXRrPmYAVOXnbqZE1V7v#_43_QgP|_a1N?yY2g~L8p|X z#!|T8hRaip-NbR-=EDaybow$pKih-QFYnIVhJI0*s%dGFNM*rdo|WnV3X#g#5w#%G zn@dyr_UV5iRr`*HqI@79v7;`=;K9;>-VF)baSfi?<9zN_f~|-pBsO>mdq%kp{iM94q@g`rynVo?5_4teO$3|r+cS~-@r6KSW z4kw}=%O%#YKB1b^X`MbfF55$C9k#gPq_757JUy_WaKAurZcg|4f9Aw=`0<|0irj|q>>O^Hy5<`^qZGL)mECj*@t0cle%Ga}J z|2QD91ML+_K32zaaH<~~iK(aO7A{Ffi4uVmBVj4etzuOa_9waQ>lbD34_v=LCJrN{ zYqT9-NKF4$N)kiZe%YSajv@Gsqat=|z=!W39P!eEXO#Wv(N!hYRuSSE z9T95ZM%OhZBcXFq$cQ1-o-#(z3|xtk5_c2Wsdt=(YA0`*2*+3Ukm+I#G9ncTO=uI$ z&(yAR$C=%n8_cX@;%E&JCgaes1Q!m>`RuoVn)`kt5EZ@tu#3*{yBVrZz8cF{5-w@a znD?4`8p9;z;rS*RqfzI5~hq(_h!p~iMAX~xgc;TKv<)f$bgoI+b5T; zn~$6D4rf@JE1kfbMaoYKfW@zD-6!3vb*MhHv^tMMFK&6)n`fvFQLI+lY zn$4yt;U-<*RG z2i$eC8pW*XkG;t^Ri_~~WAAUHmpg(FliF@RW8zUd&N+1(HgJz_ggp3R77beK57wDp zU%o|(g#u>!UBH=!``s#IPSdD~d)q7Sh{n2Sy5s%+M{!wGwH*_GY0R4XFP@!Fy1dr| zet=MR6^O8spEEjQ(C8~|MNYkE_|J7y`k1T${x@o}E>Ysm&A!+@d>Pg~r$EdVd)DAU z1zqzb@rvwR=~fMVbAP`Z^P~N?or~lWjBbuHL<nBaes4c>^^P9>g`NB+L{h11c~dNsyW}| z0aq>_fX)eOCEe&iODcQ3FPlm^m52E*O1S#+CXmp}%PYx?A_|CGrRaCtf_d2dzrHy( zbF7fXEQ&;O4+X2Jn%eeq`d)O4;Jft{mA)U2ylVS*;~-P9X__Tvyzk%RPuAb;Ys4`F5Z3)%JM1HcX|1T z`UA;PXYaLMGsC|u=gc;{tWMoqxJ#2V-+a!9WWzf#H*C$YUnu9eo2%b$UMoHI>SNK$ zDdGD=M2&%;y-sDakE&n1jr~|6QXrE!rY&x(YBXBxYZ77)&^|&P-htKrw57<_dB<GieyNLxUFecP=&vgqUD3i<`*2ozC8D5OXSNP$Xj@pmLIIze^0LT5|l4Bxk*On6lt z7yod7t+OPGzFXdsf*8mHsa8cVX-H^r<5!zS++q-nyMQIY!B#E9xQ**@RJ&~zVB^*+ zQ5qM8Qd8jvFFN!ds($?8@L(mrGc?T6Rds0iC0vPbi7|aK;OV3k={d?oY`vF}&V7x_ z*T%cWLDs%5Hx4JJuhPVbdv8@};5~YNU3aW({%O&@_?*(pel|;$?kO&jTpzW)(d+Q@ zy$(s#BT3R(Y;~Q&E}X<0^pWH4(ydRf>B1RM)(5{aUN&A^QH8v*yvI^0YFjEYWgAbg z#|^4z$7#1|KV)_Hq!0ZTbPio(U-Gb>wut)yWo1g<5nN|e^-n(IGBNs%|qe`{9Z?v3Q>#$L;hz^82wJPxE4HOFIk(#KVVm>RSdt$FLcWqzKnTMhg-HoK^rDDa5E#yy(DxyMx$BX^j$ zb_buV5j|G-_sj;&)Ntj>5)pZ%t=SZn{@%|P%79}1Hk2c-CH?A>?T={YOV7+mzT+B{ z4(#l{WSTWwQX-Z9II6@GDM4=7t{M15e(g2v@q2roF3&aJ^f)GzC?5)?{EArKly!O1 zV(D~av)c!RF;UX7o-FFYd&R*7c2ooZiX#y223ThI_62>_fYuY{g*)tby1=k5A1XXjt_|z-2=XSKM7KzSDa}Z@acs+2if5 z3VpW3Oov+}!sMTp2>a!po#l;BCUiN^V8^@t??RUp!NnU-8jY$VuAfAX^_$H6EE3I~ zoDJjKAwB%0dENIi$FWRCN++Xid0|UH}%Y>nXRb;B=-_{@hj#LsyjqJ0E>Y}WdhXaUz9|yjofJqPj%MA(M>2@# zi$Apxe5t2L2{=HuD5*p-$F%iVfAUKRH6b5{--Oc#(}3HVPdM+(u0r8z z>{{$sopQc!2@WJeq%ebvwn59l37b#cp_bN!B^7TEu)2RpSAQ*Qsk4q6KpcZD&nnJ_ zN;`^nT297Mujcgr*NDv|^`Sy`6DLlZWTwFX5w6b!a3< z#XpM`76~3)3AFGs)8#{MnEEVc8KO*UJS%#O?1+w(%2Hi`+S3Tynp(LOZi7YgS0)Fw zG42wvee04V@Haz4n@z@$T_b-qq)?U6!$UPC%v41vnF;8fZxkn^%S4tmF!Zq}u0) zDDWE9!anUgzRin#sWx*F7X~+0%#pHQWS3$^yTN==v@HyCGeo?$BZMKnHYgo7S3_kF z531jPenzwLj+8q-U1Ax=+-3Qpv9x&l@Hbz`&Rh?igiYdV>zi8U&IF{JdUb8^l5Us{r1)0=~?{4iLf!Tnk4< z8adc~DS{)qeyBD(gh(9cq7F`<*w_;;YDv`?{+`Y0zHGh{L+MQ;(|Ie!Bsg3~B>2Ji zk$n__`l@46gJs1oM!!aFm4B88Ee@Y3tQ-fvhP7zJ^b2?!6LrQ35Z){ySR?8UC`af- zp*@;9bSVPr8}7?Gm=XXybmbb&CyoPXGYNI~`(5v}>ba3(EwTa!89Gs*bOtmfUU!$9 zqJU)kgTQr{I8VD`g(q~V)Bu0ZPNaCb(~EK5L(iMnz>^6suh5w)b#-ByX@A}$;!HJ2 z;Jrvxihn=Q?-|>x=!^BX!z$r(rjxI*7rnN2NDs==V*4j{DNCjUbhBi{pziogJZ2IG zLJXT4bxw73j}9|PSe`Y0qh7T2Q5l!_N?Ndp%KNnC`Wa^7a)42pLH?BRvb{ z=rO!*+Ih^8Guk(GOy?tCsGcWMQe~m0Z$B;DZYp|~6wPR2(u(fe=9-x;&C4KK3EQJ4 zj(JVm8?~(N+jHEm1iO7@w=D|%{<^2Z?fQXHX$R4F?f)j|s=e5og;@Bvv$Yn9^gmA$ zTgQYBKEDWf6jh`tO@I2Q@UsOY?eV&6_q2*J{JN~98&F(2z^UkR+ZuCdCmE6xf%Bz< zXgO~9YkBS(Mju$13&5>_Kbdgz6tORP{OHe^vt|Iw2SjQa`^jUyMV?!__GhfLio$PF z;d7}g-@~0;2&4ZA+OLUX}>yeB(*`0?b5^u*Ndort$mHIhy!IMV%H! z@VM!o!pwNSf5jQ~LE#Hi;;+%FdHl^fg0b0RK5|lt)jz|(E;52Fz-z4I8zbZ8S`XoZ z{3KTcENBX&c^$@_(nrdi@-M4hk$2UUEJn%%b2RajimLwSzJ3la@Q0+t9-9Kgy*V$} z;uz089IV%QEb$u!k{FZ&@;yyN))bL(4q~!8L7^XUg}p>hD*lr8$t$RT`bu=TlXFbJ z0b9r@0aGTJK^dLYzd4cRg-;V||3XdU*xXHhA z<@{4^+2YIzH2Qxyfxt79~iW#TF+&eWr7JAwkAsH(6I?~>+6$m zZpKc{%Yfzxi0l%BiVy4kNyp2Y)w&A|*E z(lA7&-6XHn-Gznw&XlZ`6&sN8=jMzUJ;3Gi^ zk_kkXu*%1(U134m+4-w*KBd5c88Z}KfT>6xDqRA z2>#XOP{2YwDKGm+IGo6U0N**8lxHGtZai#{BgD(tkN9VjP_g)R#PiY05wM{Z!xm79#`^#P=j~EN@D3WIB*WyiA%Y z9Fc>Tp}kp|Yug~}58|sy`24k3$abRe?jj|``OOm|5{k7!zsCK@XF8L)jn#g|ED&Mz zHpdj_4~W)Xm_$mS+kT01lVLml*LL$8T9Srut>&pV`7dn#a!DOq9{xxczzi}dspF&k z$BH1yvbAF6F6OFhY;1gdcKY_i;-BiZZq;_o_m}5dFkv_#@}&bUjPtJo6`__N5xht2 zViqD)n`_txm)xU-$i}~AUowJtGg$hDWi#DnkcG)&y3)$`ylK%2=qvx3@g4vpSo>y$ zLAa+xB!V=Gsrl{)5Ma~NRFS(sS;6OY07 zKniX>`uOOO?p64M>FH_Lov9ckDLO1qb(m1@`+1>-u66Uo%c%C<@^*3g8xT3_R}0cj z(S6`o#Kphl{NivmMbHYjn<>CIj!dpUiEk6wDc%5n4Or%mWsd&FWhwJe z%E3Z@k>2u1UwU2mN}&azG&D50{vG)YX2AYaWLKl4GjnqC=Q?aNEuth7X`Z}sJRT6% zX>djL`WVUV(ViTiQQk6J(BMnI50y6Ua8TEM*1vylim7%kBsi*#prwkrR&K_&Q$o2Q z3E3DamE&74d)gqZlcY+elFP8sTs642c;cc8R{Lz0q<&~nJ>e<%3LmknL@Im9{SVohx9@a~Nc z2KntG;mGp8Z;Z63bf)d+b0ZEs^U2j_MtpTDkN+v}4BDOp8Q=?GHI^54b`)SO{QwGI zLm<+q#OYOj6B;;@TigmK~F^89f8NjyEctR=dy_jewOBDNts=fCF0w+6yhM zA0UPdn%o~#P*CXV>e63GK|cZKCQ=b0fwiVrstAN?&yFS~s zJ6grV!xIG(_vPaKttm*9!*8Fz1E}g|=>CQXxHg?`8Qz7ar_%$ISU*v~g&ezPrkbp* z>Yk*?EUh1kw?nctc?if;X>=#WrMl2;ZO(S+SL%xa+`gfnCPd(Q@B{lvCF)_l zba;R08dM`x^`^KztiQG4_n})&3rUOytNlyS_e`@y^!bRU<}id;-^U+PPL^zhVPf(P zq6UnuPhgvx{e;n)gABL>vZ8g_0-r12xA;WR-ftJvc*HgP>tFt3wclteLT$}Q4CPB9 zeltT%u`otI)Q=x+uJaVUNS_oc+@1t0a#tTL+dz9B z>~#5T`k5(ZmYQq|zAF~77rBt0 z$D>D5&W9@q@=WRXIMM4JUkDDb(ep%h{^%{wvMnEcED{TFfy1*pedfA&bI#B=5!%ZhuLuqChL<%R)=X0TDy~95d;dn}g}i=1G`3UJU_S0vJTsQ_iX??l zsMXj<+2N>Yiu-hHL3|1b3rfHzH29QA;!%753ckX0vM$&88(if=bb1s@y{d5ej z#;{t4#ld(^9naMWVM5xbtL@?xQI`!W_h+CcA)PGa`lbV!lGsTFq8rH;$v{~3yE?Hs zX+~ne0_oeovch+$zEVuUSh|*M5or$g|73SI38V=3{RN~0#<0>7$D#F-oq_^;b6)-v zNLUQor1_PVu|TbkoUXEFIyns?<2VAgDZlJGc?m}A<)5E@SLqgkbLgY6G$Fl6G*Sc* zut?RTv;pPz=Av8r&0xAHwtE87z-naQ@Y$}cVI#WFR{oooiSMC2GQTGBX;yP0QzugA zR5iVd{b%8^JM#;uoqeD^>PGhyl8Q-6>ITVg2-IiUN8~w*QH-6h1&}86Pzr7X_Rl$u z|K|m$eoM07c7I1jN(E2^vM2yNP@v3K@w$TAq4^LCDGxTe`!z1jZXO?k0L&^bYYYX} z11;eD8_W=&ZuWWtFbR)Ib8_9Hf7&y<3Hoa8zeoLi)*HW5IR6smAdpqU*kj%eqwyqv z^YfDjuJ$i+gj}{1FlwE3&01#Tg&mr9Ys25tif=D#Nz11wbO?X6L#N%UvD_v#;@2&2 z#TZr;NfMsN!q*+Q4L+;}M2BK`%>B|IVcB6-)xN&F)IREw6cp4)+=RCpdCQ@U;GXx2 zt?${zdRA&Uf7w|VP`H9Z5Lc1dELN-}qIjNI=b6k-q{=y73()llt*CHZl1;aEKY4X_ zZIklcqm$Y(X(&_=RgU3{G}@Qi$!oW)$>u?Lmt7m$oWHq4i9_NWwXpHUv4GI7I3|~% z{hCb<9oRg!8k*2k!Bbb-w&jTC2n~(AGzAOaX`yo@_q>BQCWUpb9(f^`@i821B zr?+>x-}FupT+P6W^qvt(9H30T@?ZdtBu1pq1-O{ZK@mmDlg*&ropbCUIQciZ-@Xb< z_!UNlgoPDv22$Dm?is{fm-@KNZ+_lq0gKngt*P(O{_&*<_&W&6qR01D9+}Hp2}X3S zlWL?RTk5j1FO*ntAYTguKYV3|O7D~jN2G*90WF9zI8swVO*=OvlEZVyC79v_f`GlCht;Yf$(ko0{zU)xPA zSbt&~n!gfK92~*t3qDaK4;37b)|8_zjY{=qYTv7#@6Eq5X#@L}9{VzZTR$JDzO1aQ zj^K|i@VjokSnxZ4g|tAg^~Pn~F(LX^euXKkoeXtg5qJ+`KDH|0}=j&H~n(S zn8^nc^TmOAhXwd*=hBalm%xmj zA^1AU*ck`NWZ%F*&u2=LP_Qq+C&F*mj>1EU2Lc|G-E|N=1DOQCfILRE_-VT(eVYmT zCcWSacQ4RB*i2Wlfn8UCig+EdViPg4K6x@~qhQkF?S@Re$a)b@^Q0b_2GdRZK`(=J z!7qTy0#PM_39S>7ddT{!0(i*r2)zX9pE^EY{Rxm(#9(oR}Xn#{6 z_<~RKVcd3ktag0riAsyQYzmuV>CKz+H`Ept28@I+#J;4D#oeRN-H+g$WALU4c5qYc z69q)6`GTHzM3HsM=k9-#H(VL?_KDZXLwe*Lw%`7dk>&36p~>-efau zl_E?r*^5Ua5Um7i$HaOR$w_>V^)`A%5)L2yDa<_dMine?5j=7(!OeH_(KK?_8CyQ{?AjXX^+lIPsWL`{C3YghuOXws{)^Fav);8Yj zzA*pQd?>&Jbvw9SCsd$peDIbZ; zwYYRKH$B3Zmo>J{_jlL$3}Rz8Cw^acc94*~19YC3OCO1pR8*X=j15Zlz<2!u$E{&C zQrtKn21cxZ0K8?I6yfJVuE^eNTQl-aF$&GJ?)Pss_r1BlXZ7G^z7R1D0%OY>52+y! zCA)fR=YVk2ydt+C-)Rg!DB@z)balI{1}AvFo?@dC!w?mkpY|Ma^*GokcJ$P=5&!vg7X<%=%7h-n_?$^+Tpm@ai02SvNsm%Et2RFC zw($pBMj#P!ut?v{bq^nc<{9C;!Fzmx-fo`2c#@-mJR#~&)xZgEdg@?gTqp~87x#k9?e18MjgFK*gv zKpn}~>xjz(i-w>GG=XNcp_bQh>>18@)^ zxR9_C>NWKee1OJ?q;H}@>v0G!q!R>L18J}1f+0FVQBhfJ^;1?;%LUebB;M)gYn$`B z0ntn&>HQRBij%9BPhY-Jit0h@H&UxU7H(2b-^eC#!M4CV5!tyEG+@75N&e#WVxD^v zVQcUimjVlepY8mS!j~OcjANO0XHN0v9rN4i5h2Xj2@!ARrLvBheE0rBnGKzhPIit> zc%f0;Ym%${U!C!}y7Q_sCBeycx~Bs&tU8H3`knQ`&FoqaGs$AyQI&cfo~BIZ(zIsW z^(b7>cW2euhTlivxv*E>5zMp}CL3X9QssAOL^!-iM@x839 zEVyQ!477Q@Y=ic7Pu#Y3k^20|=xD|4t_VFLJs~zAdrAzezJMXLFu+^%iOQ3Zko@?B zLk15EbIIHU+DJ3lI{N}<-yhP80WV&>Ky`?If}FQ3(kW={`6v&C@`K^IEPvDgAo<~- z`2HWjcA)(O2Oczl_2fC*V?`Zc3)KMUgx5KgEbx)Z{{l4-pkwVKZ8q@x!FdMx9o!*C zgzU&9&*wUTvEc30cNRd$xg7>iSKE*=`JKc}?t@{_+2V`Qf+26VtV4`Lj=DK#Jh1JM z^CgX)lzjX|Y2_NP8-J-8&`^*jnH5F9TDDtq@c8!u-$tPL^SOofIyLMT^A(JjZqKpcO49Kn_X@&8m7I6(k1x!xp6`r5YiG-6BKltcTN@-r{XfRv2nRLn~ z6Fr!2MA?j<7)!XgrEJ9KW*iT1@B zpJ%dr?kl7u%%!hAt(!!cImHraEfo;|@uL9P3ST9{nlKpkJu{fm9z&W(H{n7&f`Nzc z)j02i&$e?d!Pu-{e^pov0&=8oXUCpq{+w%2`tTZ*PAd?Ud93{ij*lk>+fa&a0N@?=5_{@jZFs-mnI93t6Z zf1-gn!r{)VQY@oR5fM~HY%>c5OS^M>OB1r5k zg~FW&2V|4AdCqF;8H`s7W9pYcsbqfJWM8J9OptT6eRPvb5thV3e}9_L%;~ zmLRwBhkhNg=_Tn)2r87;6#9pRtgOB#6<<3ciaO!-1JLi}Bw9*&?<@gSUTD*mes#J()ccC?aNK7*`Z>B5aneyW-|%Bzf9-ZQ}&LI;E&(U zlk5}%sb9*xwtxS;xq#ds6IaRQu#J)27wbOt_&ZH8#nS4z?5#(eZs_i)_E97#`q#OY1``2%@Q74l(2h12;? zgZ#4SbsKy-DVGZ5CD|LlUJ>LMfo7)P>b<)GBpDS*o@>^cbUG_y^_?NhZi5Nf<80iz ztbcV+jjm548(Dny4oEBwqD**;9~pPkYvy)o)`_j^{rNy%Z7SX5wD-l#Vwp_-3tGzc zUpgn{ikx&0G1zDJ&_8~+{2CK6Mft`|yH}j~CPx3aW9QbqmiQK1BU!ysPoF!Iu*5n^ z@TZ%arjgNR&00D?T{lVPxES()D&ILM7ROg}UXTQbM;hmVc})uGSKRx>?1`SLqeuUj zwH9n#CtG$LYy0+-~e(jTGVOnWFf;$jA>eT<;&$daa+!wL$wZ zXK=gpK`kE?7R6G3ZU*-)U|Bl{rlUwi{Xs8}f2Ohi@xMvu zhklx0ytXwVCj~Wz=tCTWM34}8U%tuD&tM}2w7HO@irkh%2J@jXEv%R1c?HPD(aZEg zwS#h6;JNv00M#wuBqb%(zD9)t3NQ@stXkJjg8b_`d|T_@cP> ze5?DAO$K|R<$#%3e?0RW0|$?)Hld4VsZ!$9?VQ9pOYhF5fHtS<7%YOEV&aGop8~Jm z$S)=E`!72rp0gREe|z!@qm16#E+T@X?Zn_^ht)o7(m!2VmhZ zO~ibr%b>cEZr^!vd+$?P_}BnJ&&GUQBSy;w&Xf9<1$j1uR8$R%_Dd>ClMa(%h=91k zzG@wpYeD~`k1(wJ{h}Dn!Z*TKN11@2)uN?Pr6Zc6^8C$@$ORoP9L(=3Cvg$WR|W;v zpG#ELt~TSe_(czDxymVJYB-C}Q+lxFcjjl&BVu?TzIa4MMTHW$Zp}8&o=iMSd)SF8 zYM&fO&8+Ee;A&`S@MZ0YO}St~Yjb{aG%J13&C;JEl?F%gp>BZy)e)J$*cJs%UaDdR z#EU{-s;|zsCu1KTogeR`x?+dt(`AMnX%l;p^X3=4U7MCxR)ky^l%bExsX)9pO%b%| ztV<8f>&p~BJq|rL z?_%>6NL$xBPjh~JBY)@HVP#KGM(_ZK)7igS<&1Tw>HO&Fp;CRez!gSjl9p>kR-3_s zm;D9OiMzON43>osCJa7&0#rG2I;$ejUhcm-las*nxVw{g&fxs$!)vYHH_0+R4M|cg z(wMhS?39$*l?P)#taXj}-MzdVdXK}zV>J4H?AOa^6Ev=@eq1k_ce9+#bk~0AXcH$q zwoDHHXl(SiL4L__=0~H~#AT5F{u;A1g$O^TK|z69xd1`lhRxbCqqAL@+Ky(->#tqj ztGp%$CAB+3cqRqN28@)rNDU1uInV4jZ{7q^N>Zet+6>1L&ZhGNEh93Lw{VXAnW9nm z-kXv|41WLaxxex8{%w(G6UlRPmgKyqOH++blb?B`DERIEKPqVS?*8#%W`sBg395Hm z8!A|zsuzZnUja}}#Brp%BW!x!WpC2C$sy!>Z|}mVF>@Q}&IUs67HOuW16Aui<6AQM zwh?j#na}qelSVlS|5K5`%XMxhkK*(i$5Cz+atVDiyx^~tmP(PrVKLl9bb?pb!YM8E{ zpELmMcJhR;L>)&M#lQxNZ6iqrdfP z`yEI_MY-qpgt~@|Hd>AZ?ZJ)L?h{&!>Qt_;v)##{&B^^ml%l54EPt#VMqgQ0#%3*f zV-D|gZ0mR7e8u->Pd+vi2Jt7>;_t>9$~z-?qkhV>-EG3E2!GF{L-e6)p0OIV-1x`|I!?#=A_aB5?kZKn^9LS(1gC@bLOrYT ze_ppkFT9p`r64k-H15MS`;%YRUTe6R2;wz;>>zjFC%uaz9 z`%XI~G!&nZhfc}->}b~>bSI6Mr<*WeDTe{6@CtM!!<9B&iWj%Hyrk4(v!`+K2?+85 z>jG5fH9V`(jA#LhRndGYiI0y@?+y_LyEQ^#gqI+^0jaI=&rdDCv+dgZ?|)&aE~yG> zs<5%JgzhhP2}7WkWE_zho3%n8)(!dq0?OvRzWQNi`;VsY(X$N1+n^d&=CKSLy;a0U z^}@(1pM7gLw*w+ICHNDJG#uG2$b{1-oWI}M zq(PcWNK2oupcNZ&&Q2fa=;+rz+zT3Yti0p^n1xOjJ@NXl#UOL^-VP0D80=fN2U7rP zGYttuGujqh=W=c@Eb@%h(AlQX$u!NU7lx#xCVwq+&cjF3%nWW9lL{QZ5G1l1EOpG3 z`w)n}&+Tg{vV(_V7a5V2Z`G3|z%d^{c0pD8uw5zfHo4a3cmF$Sk4eqlu9lV^hq8j1 zb$rSk&-5OwO@v9{?+4udZcJGwZ;O$K&7Dy73Q|o&Kl(rFcNW*DNYagZ@B9}so$a@; z4-80Hlk~A8e*Nw^P}B6#cGUFv(^fw5iEwM!8;v+&rzHl5i9os#NfDM&lb3Pb&-tSh zlP+$})J3*$s5q?>SME|ut??JNr~h`nMI4QWuf`5|RBgKNSX#ZgDJaOLF_IfK>L@y8 zMsy2&z=g0hr9V%OA?Wn)rZ7nC0gAI))6YlpRjH9jz3lE*2T{{vw(1%rm>6oZ_f)3J z&@fAZ6vYZE!`fk(*$~!&zJlNuY(sCMT}~v3k1W!jWn(pfI<5h8s<9SF|Kc? z!|nkISi})L_Uukp^&BzhrNab06;))1H4_I%*CU}Nvm|$2RKP;HL1|CW=zZqUSB*4m zZ43Lx*f}}7`F|l$I4m^%*aQ~AEhlFVV#^g69SY%U4kreJLiQAA59D7>q7~^5pXktF z@fG~kB`J~bj8LDGy`}PwnLPBn--*Z_|IJ$TzLMxS3aQ2lQ!y5=5}pLM>ZV=tJ8^iT z-N)5F8vevjc~G>;z&xlvL&qB&j+vxC1oOSh^0Dv!p^*o=o>4{OL$C6SR5)#hKlV;4 zZ1uVax*I)=)yVwNXL#BdW~F}J6W-} zcKE=VhGSrDOQd|1w9Wi>S-HyC8K6%{eAPRE*$SF)Tb3 z(an>6SSs=p@IFG`=;Ndxdd4cj&;S{wym`a;4KAjtc#$-g$fkwbGSLHzkD$Cn)5}cw z<_NFKDM4v!JeAFRtN4-t@Z~z0e}LAmj9CQ!J#B27>)$QGGHxj$NMnC#-JyUPRr#m3 z!}>Sv8;@%m+gYczuisLre?-dCeGKcp5f!9^vw0nV&RxZHaV`VYrpn`xnuIYdhZ+ZG17#ym8G-Lg|5q9Si7a@X9wHA~fd610Tg!-KuwdBjaQe==fN#*_8k!7HQrKvH+7wJyj3DNkuh zF5i1+7elomQs2k^o`*uhO*;QtPUi&s%q{X@FNszrEiNV*gq*-N0Y{c;qI4n}S!G1+ z{O?VhcM-{1idkYyx+V{Ac0b`3Q88IdyZ7MAorBovqZ5oOW&-yWSpdPnzE-0Z!ld*H zH3>JJZt$R%JwSR69^I%X>Tvw@ldK&X6 zZIUd;666Ms#lvB&?n4a0#4sdIGC_SaJoHM4zdVipd=#&q(%03$Np;||)N1D4jqEk! zCwlUPbn;bLJ^r(c#E}!Ln&uaH$LxBM$twK~KZLXc9?c9tULrhU@M2$$zez#C)tz;# zl1%5VzvE(haKPQZ-3WDFX_~w^z0pGoOtBLV(w;+vtD4SS8QQV|vd(psTZ-7_;oSM` z=1g$Y2O@!=7t+{%)c;}g)K5C7$G5#GNcR(&nVCaiXMn*cWP(hwW5TolX#sQlrWSo8_<@S)eAu<$`QZn2_l1L z@i7BK!-waRK)f{y8RDWU#yTh`f#ZGyTh#iq#Nxo0Q`++9`_XLRATaEUpSrqF4$gL) zZ9qk%YV^`tyEffNt!DJTzcRvN%wS2i*{bE05}q?v7?#w#SYwP-Jt_r68m1ggnAx@S z$ywiQg6saorHgha${)V3@Kco>1S643s&x-v-Q|kOGFvPtzo1!U@0QzZthHTW17LQr zIVvtvJ+k+rV=$5-@_>70mxNz^BkNC-oZA7Jb&48sqrYA$a?N=EaPh%0TbVT@a|~L6 zANlf`N>*KKBO&kEZLH|dbQ&}w9L_YMP`0rE2EDfOQ00pNQYy4g3{^v%tMK14I}`^O zM$%LR*GWm5DQ8j~jmWGXXqcHQm$0(2`qVx!35igD_9j%J8_ZAUx|8jN*(3&MZfJL$ z`N&@Lb$qj~`~i4m+Q1d$&Rj^mpowc`OIs3M(8-g{0l~9W!v(0Cu6}-g_8|Agjs%?Q zwQSM$SB(`tpP%^#nxZ;$plt|RAnk5f;m>@2Hfi0%caq3c(OA{;1kiS9GI6ETgfD6B z)wQ+T=Uq^ieTZw^B{HD_pXaFUIw*A(r1iH*xNIXFCeOO;0=w_kpADNYQaMg?b8=9J zx0{WIf8$0m@Wv{c)RJlA2=dyb!vqrrlvq;Cd^iGnQa`!)87Rr_Md5b+J z=H6)X)e6(Vm-0%!As2LfJmH`(I9R0G6_7wpccG!F-QPS``*{8cKO>*Gns*uZ$D^HJ z9o9!8+lwS5Wg0WAAtVI{Vw*aC(a1|88=DP+mN2v;!=U2BtWKtm%sY~*d~N=@@o~SW z><=|uyFXgfQojy8agAEg)KaSF@MLgj7{r9xAUa77V{?6F^@I>%+C}I1)?e^O6buE+ z4~GhGF)>%RFoqJdIiD7cc)UyzGx|$2M;IC}VCfh1lM7K=U|URn%hAN${p%18ufuce zr{vD4GN6YwR*Fl`LnG$ov0ljk#O%fPCwNpPu9`hJ@1az>Fk_)ebC@b&Isl_C1qyuF zX}$_Tg#*lPPA8(b60Goh*o{1R}5=tz5ufqI0AOmIr z{}K}uAx=ClEf6^`Ia?&y4k4~kMBnNr3c7klzT+LIDLiH@;~J;V~a*HXybe zhr@YROE?(a9g@O+9L%q{GM3{DR~HLT3|b$zK*8ODt-%tf~H`C#jd! z>&cF4o2TrBU2;)jLQLzyg_yaR7fMsG=?9wpo%3+BaiC;`NKDoxs?dhq45AywFe4KP z+UcW9FmwQ_S`ImXec%`xpXrk-^W~$Sr+2koSZPE9$!t|iIi+)Uz&oTIHg^VLdcqP_ ze|=qj3yPeDg>az$yx@2?QS;Vodji`WRivSW zxbOGuVIzA{uLYi;fbwJQld*vgB^&q@IKst1HHqrwsYSXC%YeR_dC4u%Y&_(eOD+4iLal#0GTU*R&)XQ%%&F~2 z`m6~I1N5w2*Rq2+5P13y4(o4rGSl1V-vqi2@-piL;a*d`<#W5a@>jcVsiUO8Fr#u% zTA}SZR|Cajdb6ma)|PNl$2;t|#m>v5)w)u^WllcL=@OJ^?e+UJRgbh}&-avIpzDP^p`oj54{|INn=$Fs5VP2I zxX}gL!{uOHdKYqCMI|K^S$>^bWDe$d)WjDZUCr%_lI#LYa}5_x=^AlYlP&8X$POw!WXT!zJZ4PMVs#E;Z&_E)k}qq3W!I8@iy z$>Yi^nlgcJ$p$Pf?Fgj`0g2D`Jd54Db66U+HCapaQMFF7I6}iA#8y}iYDI|Mn*k>co?bDWI>97kt%CZ>aIsS=B@6eh5EwpBX@mr8()cf zn-O{7>+zwn`o-&|G&%@6XC(M}S0#A7o&8V#WkOaZt5g>(T@l-!e@h|pj6D$d-QmCI z7f^1N%$q?~r ziO!avHWxRV70-zzVG|=o+kxp0@3YGMBg^wo`-G`)-aNqc|8DKV(79dBfWu8fn)EZ| zekfkU0yV&ZfJj&Ntpu1XLLTwn&qJxHbY=b~N0InI9)CPlCkUn7)9W%kEDUAZpxE25 z1275TL1Riuk5YHiD>H{;=ui)SC=s2UJS4jw)$t8b0fL+$agQ}(h`hq;ZukGtZg3nJ z7#Kvrz-dsViS0&p=V^N1t!|h~C`BD_0UVSMup$am2kD4Z^NQGv4+~1N24E^UvYlK7 zg(?u`<4H$enTVMO(Rp*nmz{dRFUVciuNG z36H4xyNr$aMC$Y}(I~_H_lJijO^xQ2B>S9nDG$QZ<%v^LQ$Or|&07A#6_d&8^WrW^ zJ+{El`hJYufBzcUJCqP{Xh|r-qMM62tBu?=y3Oc4o3PC2PeRAr!%H_5q$!Fzu^3Yf)SjA7ELb*d6U4hN$zZKw-1za8u{p?( zyPH{o{H@=OgQy_>YvlZgtrF)k`m0^$b6xUm*474@cu&S@pLA?I1sBNGS@YFlpXl8@ zzS5-xfDDGeFG2#}2T`All`u-pe6F5D^3hQhE> zc?E=L`*3CEfA|NanxypfZlL*E;09%oGth{8ZBc?$@zLLn>hGUX>O+u<-yZ2(%!6%$ z6vr7nTW9Wk;MH2HU(IEal>E}-s`Tob6_msPu8_jQ!abl_tng!4r8h!0*YP<2-d2kw zK5C|6uCj*=XMrP7WL>$p^U{kv2GI^imZQo(P|&k!(UuKEa0; zbNr!yW7!^s-TP@)>3{Y%y(Zb-=BGhcXJOGRz*0?Ze*WC(C@eA~O-glB^DxyMT&qdW z6d2-i!7ciRHAHvvC9e{Pi6LX+D?0_Z0)mfutIF=~Y;?c& zY+zwdf}~_xTR2ftPR{o5CQ2@%M(^A1@NL^g{5~|J;0qu^b-|l2^&$C#vBUwzO##By z4m3h!WF(WYFiJvnkau++PRcQG>5EcRug^9IzU^GRTFSerj|Qy&e%<~KFKC#q(MzX; z8?Qp%95t&#B|=5a0P|hf@mgmFlxPJ&a-$Ds8Q@L2MNM(@<~Ojewf-H;yPzBx7(f9k z(UgKAF!8v6JbS3g{{?D^HFyAWTp>9YK_&dN^*af$4`MPh6(1jQP|2cn&7eISFCzX6 zQ?~mkToBU_w9QA*T4KB`$*0UzQ&T&fcv3+^Prq|;>fC(M3HzN7qI><-ot*ekjBrLq zM%aj>{L3hv6P`c=ti!`G3O=*@?3s0_LQ#Uuqwc^vcs|wO+L7>-Yp@ZmPAoXMJgBLu zA^Xb<)!(DyGBV%2$0X!L#t$T1dKqnBXgh8c%P%iRn!Okxm=bY7zWnv_t5XZz(zD_Q z8##fYKKIOQ4rHdv%t$H;dKQL>&yk|k$KLW#*1g;$Ub|0tslx|ME?Elq5n(;5s~XMx z7Xs$JmSv8v{loqm^J3+`oY2^Go9)reFUJc~&Yp{O9aF4@v|_|9c_zPLRU376o{BB} z8lc;IbPa==@|`or3KlzAlDq!sFceBE(jcQ=Z0Nfh@(m3+LYnTqBaN^!R&i(7#1FW2mq)Xq_pm{)mu8_~z8sgJ4uEtU>f-+hK zUPdNYZ=XFd{JYaxdz4RJ;+5Fs;|D9PFN4P0}ThJwvUM zN3DW}&z>%s+Cx8L2_z_N&}mU2Ux$G=nocS;EDY-sj31T2bfNTZDECZ*H$Q~NJ0QzZ z4h58B2q4dWkhp%){s12JSN~_-P&p(q2eYHFJ$dq!95hn=je8-3gz{(!2?;RqWP$7Z zCLm~4D9sw^3%XI-A@5m#<0Xf9C`EfqNxD_Aqa5wqw{Mg}wh>VhK32f@MgUwlghcS9 zjfuhd56V`DU+<_O3Rj``WtNc0Ksnx__r3!c3P3?bfqm-g>MmT3^5$pRRu%-=%%N+ym;fr z&C-beRQP^H=&HR^Tv(3mG@4kh$Lr+G^*G`7;^F}#PY?b3I=MAFT*-rU8;{Adnm zbiIz>uq$Iy$s?#EiV(i9+x0Z$wxEdaz3JiHhb_hORUy@~Y=cC_oR3}Zy0m7I$T9Ip zu>CdKpw-{E#mJ@I!rO_T5F1@w&0%aNKRIPC|A|vfRpxb^wG*U2KS6`YBBb9h+0W7F ziElPZ#iGQQYW{${x}gWOb4_}BpUaPF^nGS(oGtQ%lpzO)+2rC6#LmPC^DVbR<42K> zP9M?)!1v~B`ex@?6(NPv(`lP(YkPWrB!6bGq7v znXF6fUw+4`-(JKBZyT}(i~)V}-2vG_$o)*SU$!ZhYZksEPSs*sRLRy}%_}U-wdi?N zVM`d_jXa;YRwU5V`G3VcDcjo|=8+T~&DNA9GO)2O&X+bHH~lzG{=DPg_N$33=9||F zgXRx^z-q63-$Dns+$EX^99CPS&%-%1`4>@bvM$CX5Gh6SRzC+CT(9a zhRR?SPxAir;`(a%k8HUSfMy$)x{R7rT%@FUec-{QO5|T$<^$fjfh!Ke(gI|sO$+;7 zR5Ddj{(`O=c$==p6S=`qtCw_>EzoF3>`kh|{TGM}K6$Q;It68JG^rr1Yu`Q~Mn9oz zmT4!Fle)i0_T!4q{C1COqE1S^x7Mbr!NQyuU$Xds^2VDcB>5Db=spb;^*?Ust8wB@ zrz}Y0@^5fq$>X1ekz=dsckkMPt^t(}FV2oAdKe{POh?V)aEhqqTX|#{AXI?v%@$q- z_8$n9`4lTpJw0O2jgfhfwG{&kL@zdVb-Kxqk|cq=4J1j%3DEXy(wU85E$ z4Ql^+@&<`2$f)KHwMzl@h|D#4?M@&i@4Nf^dci8;~22yuP~zQefg6XhFI6octfuhtp!jE+ePc6zcq4SZsehv9BsnK zbEha+i>sWk+&=K!(m^9RA*chLImes#}zMi*G9HoTedm{t`*TSui#ZQ!{d7G`O41$!W?z#OJp8>+W7&|5_hU z%#=L^MTA=H;#Wp3;D}D0gfb1JUeL*r$uSOUKfJ3!?!^9kpw)@=!FIlO$}uKMJ=Xa3 zx`qVPQe;t8aCObX<-la2b^$VP*_d$p!nF#mB1*mdoJ2b5po5f>Lhk1G1+{f~M77Ei zTXczhE}HbFiFpufSJ&9*rSZax+Ti^HjjLahy7I~ol-5lO&J>34+F+{Pul$uYbQUYG7Dyx;%Y? z`hy1I(_VO62)gYqNVC3o0zM4DF<~oWQ?JOAzxsIIIGMA&k|7@1ME}P2{9AET*5{7F zm_U;BIX>0+J7pz?YDxAOPKjOW2mjEfE-*ghoa$@ivqp7TdmrtyI0`n%4Uj7E)Snz| z?DwWzk0NKj`I;;EVd`;2<8E35S9~h-PgTfBqjsO}H+zcHz7Ee1Led|tG`j9~B9a(2 zZY7j&IXaWc@n5ch+WkRvY!82c_Tl~WAi8_+#Mu7c<#yZ0WIWkf%08~&FA2gUdP}2; zJWkM+o4TUIO{XYT?j>BoQiol#*4@JOcb;4O8X;!!^fcMg<&}}>Qs~}dZwP7(M)N6K zvao`fwS&ilIT07UE+#2XUO**fl2M=5aqD94e3E?~G4WoodhE%K%^-2*ClBj02g=Aq1W4TnqZ$Txkuk7?pyS6Sl#lcr!DPAri zxEibrc*vgaZul+rfLMmcg;LNO3;gB{^Mm>@*rKv4)Lik9wz8qW_}{2M?`>RU`gF0S zE_&d(&Z_e;pMmPF;uID+^k26$l`WY@dMO0%UY>D~eeGoI=Tkoe3(Pt3$97E#<^yhl z5ymBA;`d0kMj3C%r&}H3HF`RJ!CXTQWiRjYr{9W6UQ18G*d{PJ6=vrhRTo4fp~5*I zW3+vbG=E`^pLu+Xq@F_HdFq1?$Z3oOt@Ekl(4dlpL0^rF#8a|mzwav|<<_K=WAc6O z=CbU}wNC2|k761Y7gpMJZYGpSXI~yMUjJfca~0DNmDnd2nMc!1B(OEE?{U|yc?rEk zqM4sK!DDKYdJC5iF`Az-pMeIobc%&}5uJs!esO8~{1%_nGlLc41dX5}+)g0`@9U-l z4K$L3uHZ5pCfLnY5ZqfLk_2TsOUW1U=55^F4Em&0>g@velUpPwWG=POb1v=wrv-@e zpsl-)(8U#CBZYpTOpPvE^D3jw;ympKBOw?q?b;(q0(iC4lWFYCNeRDW0a#+>7QoBG!h+fXS!VwAi`9OcUG;w(J)W;I3F$u4FVb=5{@h4cnXZU= zS!mPkwP6}t|Im0;5XKwD`t;WkSq#Ryv{m>5;COJxud11vdQvSxMi`;a#+V|#=YPteT}-EKIVwS|`&^iWCU@>XAqe2P ziaI-=%e`f`mdOjr0Gw!8*RxgMXV*{m0z=egGw0_ z6QdOqd#Rc-=m#Ed+sfU6WhrG=@}mx-AQesW5D|VBCK{tk4^jZ}7)`3?24o^8e zRjm0vG0JxuMsEikXS_~Sp$lCIk64=6{^yO6o@k-5lXTwj`gx*aeYcgn--PwOsJ$Ro zM6doR>5|48wV=B42cCf*5`w=Zh{u^f>mrA0Vk1esUhos}2cXf9(!8=ZJ3nr{9gr-0 zu)G$N$%sukzbkFM(qYtfyo!tVsZ?$GB{(~b?r;X687Ut#2RQkqxm!eM(Hw=8EZ}|| zbFBO$T4P9mG--)UVTvSnb$0n6GD4J>d&QUb z3rV}wnCYOc<=dKGw0}n*WyOd!fF{*wS4{c!H8NtiB{EtY+OT- zBIvVc35iMfep`8|*RaxkMZd*Bn}yu;H%htL4=Cbj#C8T-Y)L5rS>wl%CiDEz`yu|B z?WLc>TOP-^SS^RQ6gFJv+!v9oUhvGs&M?#tq5PN1dlUI(YC1E*sMWo- zZ@9Bcqi3JqH&JzGjg47#*lbnjBTJo3u1>2yB93L}dikAxENKm`aC9xw71pWi#BySn zR0_F=F8z6qqyMtbp3W?D;j)A{PO$t+d8Q0k$ymQoQ|3 zS~|1r%G%ycFThS57TU)fe%)rv>xIL!EpdJ!(ZkuGx4wKoqyn58x!{_uxALj2&qX?X zWNRiv(lDH4wTpB>+DGwKW)(Xo;*;Xb;oV>}Q=g!nnCZ{o-`ivCvFd%dyl_W|O3oBw z>5tx?;|+}`pe*;x4!n`?O(yuqO&6VT*Zi^WOwJUM&zREVh}Qv>@GjdNBtMBBwjX{_-5wS8K+Yn~}O=n`<${#hs{U_+{cAt=(6+vF?yJ^43mgxh{ zXWL)Cl`n36PB-@nZP|K(A-8LMFW@uMiO5KZeWn0;7IcEcBpN(}u36Ilo1Sd+N9;M? z&raPm^)bf2@&L)Blb<9u(<>*AnLZimKJ5lfA>3krID~fCg>-Y5U={WfEQ4A2<6tN= z&|WAGcO-uFSU14AM%gmo7D)Q*qr|9`%xlp`O^p&Sg&#kjrxRGO`F?SL8oFGiU~PQ$ z(1bjyh@x|_293Ytd*tS=h-^(M0yz5xeA-}+HEV6eeq9vv6-VP63@RmeNrP6y@$}U9{keW zntAf97fW4!T%wfk!7J&%WGWRx({DC-yxaS_^h-HqimLcLag$!6h!GAs3( z4RPYjRpb|q^*OSGM$;)*g>K6tK+1o&A0#<{l{FK$Ms(4Eid!N;^6KR0n5B*&Uvfrz zdUmL2J^{j+T3dN5hE^)K6_}duu*XB~UaG#~yU55MIiSU@0OgZD-)q~N4GjAD>U)`2 zA8`nh@-zaf4CSUmnRH`Ax`58#N`8&tg6kH{az)~ ziQD`Yd$1yKg6`K8k!VLJixVbHCexfDtVXh_(f!eOD)>f5NoQNy6&5`EWOU40=z-g% zOPtTW7ytYbk;}PiBu?nH6n8o+K<->Kl4WOKM%Q}jg7iKWgBk7HIxS5_;{gH8;PzJm zhg9F%3pr5@D(e1I>vp_LS-0ef^j}wlGdW#q2=h3Gt8A&Hm@tGq355Y(PnZUpO8H~# zcb>CkV^ww5@3kIGI&N27pKu)IS%inD=;A0h!reV+ME&FE6o%!6-8u;x!)7Y6qcPrs* z5Eb95nnokuuWtH4jHy?n_1k|O#46k0qa9s$Tz{+4l~0{X{{`dtVQ*xsX;|BeZU%#6 zSG{Yb=Fbz%fKQ`+-oNY@XZ}t0qiv)0c;Lpcb#$COI6RQU^^)B)OQ*pLZ}{8S`1I#z z!#T|Cw@UlcrAVi*t1-8knNwQA+xZ_m;i#5wtj;`owfy!^{eLuO0L11FrfRowt8k`7Z7IvPH4~#0SdEG@yrC@APc3fv|C5Mq z!p(_1o|dejUcV!FMEc5Pb6U|U6V`U6m@f}!U?t4Gn``5Y%ng@&n-aP)P_en67plBu zH>bwObVon~HqpB1^O%{Q^2Zk>NweViaq8IiaTEs zTjn96x3+G^3%1;!qTma7IddyQc_Bb2s#~VTmye=O4Z*L@W>w%G*=^I(!^cEwa7wK+ zSM$5%&3!coa{)dhaj2dUNPNq00!X;rZTueuqbH=Darp zNt)@RI#kbB#F|aE9+~HGiA&vQjX5CKOJMZK{r6MjZO>cfYNaotBCZvvLco^K~Q|QVDY3JdC55J>tRpj9E|F-&mXYfLo zOUpCj<)q?cD@r<+)Vz@SMM}So3NB9izSoGn!=$|PFxWA%2T}o>7uCe00#&KVDyL~l zREWccWeRQIUM}6B?tGKKFo}O**~FwVv(IL^Z^TE2`|xGSeO(4{1Rw;u<&Q2 zj!9u$2YLFE;)K${n_=$P>YO6U`aOoF=g(&R0&rgC4p#rzO%@BYPY(am-rHOj^nii> zaL$I(A+fqI_nP!R#UGkL$j^zw^DV?;iO4vF$C zhSObQuhuF=EwZgaCU10fw8wizzV2h5mVC~DQS3_S> zz&7+NX~F~Ip>X?9yzpaZ9Qqg7m^ZS55g!j-V^vqk&VD8BR-qx3$Ub>S-LETn9*|9p^dTXrhyCPjq$L{l8ssjbvqnyKvBshty{Pliu+Z>Ag`&&Jk# zcU&KWf0BA49mFCv&L+MQZl4@#j3%@=@pYAtMxBsN%YT%tvry6LXlrf8#ohAh&%(f) zi&NcgU013z%s(e489Wd~tHW0RW4)(IA~6+Z8@=@DqD89)xp-=HT1#!Rexs>gXrbKB zCq=!O7w#ual{ca08!i1N`XGux3-kKlqx$!`y^6EwuOG(F&VCLZ6o~ey@L{I4U*(;O>%`uIP6>VuSgxT@Q)w_+V3 zNxz?QeLknGe|2WQ=kvClF#_RPw3<^>o@08JU8>E|s^zT`m!|6bcxrm_`Idzv;u%Kq z;tWAKo==@j!*|TTfAdn+zS%!`EI&t-Sf^q_RNQA&N3NyW%RJxL_if%Ya)3A?$;COX zA-G+bJo@&pe>YaI%oM$_@2XE;C_A@h2xcxso+JM-6k$%jn4MVvH2V53`kj1Qip-nO z3%-tN7P{SA*2hz;Ssb~#H8YPmrc=Hk9^DV=pexSyXphi^D=%T<5(wx__gK zxn#7eu)ht*_Oq6{gTI4At?Bpd?Gax=aqOdwD(wE7B(;u(^Ix@GoXP$Ox}>SqQ&Qz4 z^Uwyrgwft+UN&D&($M!)^E_tm9cGT^CJMLTk#aV-q5gT0IT=dSa$C1bAez3{SS09@ zv{-Pjy}Wz&g$R$F#dnmz*tLtU3nlylKRb3iDOE1XlLc_?IcNV`lW|pu3*j^LF;BJ_cid$F z+>?(eyc`2ghuuB+vr2rVsij2)l14K3!%)vn-mpf2hhnAzo~_{_=f!j-JBgEtS!=rm zUx4S*3qVr^$yU`g z8~*3c3hTN0`4*E!tmXmnQCJwb$b)-RXpa;utqQB6-j8n|C@xy5GKm;x!WHWB^@xZ;{?OwS}0}kGZ-Fvrt9hrX; z-p6m>6co}$932X!=4AfBmI1udl)Wr!MF#9 zc~{w}o5~s+8}HuzAuz#D9diJ#ZC8Mm4p4%l7|=y-sO4Sg=0EOFxbOQi=l{|4)lpG> z-`g~T)X<28L$}f$I)nlu!qDB}kOI=(-BKb*4xQ2 z)E_>IaCkNQr-@}GS-uJWM}6kyrn6doSig1Ms4d^EPY!~%pN9L%sQMV^dxg&?8r@^8 z6W%9h>c=6!|NQ2uziBSKuh+B}q&gZJP}y0qA8pp0Miw^PP-nV122^gT*Liy%Mb$#$ z+fmn>gIds|ge1_KL+c4y?l4bdNUCWkU%KApWGto$>lG6|N_Df~tIV)Q>~Wv_etXfKK!Gx^>Fe8r z7Iwxbq+aeU!F^f*Ia-;;@j>(YNWW$S5g7o7d=^Q(x1Tdf(9KU$sixR^eNA6C94cuc z%8>G1x|Sv4)wObiYpdl`msvFN6*x4+xEAsa95QX#nf(i+ zw^zKQ0FKTwXav9kH+^v6YZM=;UJOT<}pq^FHTZ7jJXt>Np`2DUf@RN`=mHFCz! z^I(~QevG13&h?6-vUByk5t=a0)#swN^{JARgSA&mO}MNbG0mesqgG`r>by}jJobf< z2=eueRV)Iz89k-gIh+5*0fU)R zUg@^h9xpG7dL7mJVozCLDau(`n040(&Xg#x-8MXkKK@@iZC1ZBDA7 z+UBVjmrK}75H-dQLq<34qE#hl%+U!AiidkD!KoEyuu4!qJcqfS(K9V?abx^wer%87 zv!==&5~}VZvg<5OKpw9OZa%xcz2*wKUc^viJ%VZMvP6>dCjxkcmzVsE39Y8d482PF z`>2BW8D3ZLgU04)qmD(2s_8#cBc9o&mCg^{!Nm4{Wwof9i*wMh+D&FAgS=5QPVPE$J>P1ypafr@FUo|&}!d=Sc z*{J54uwz4V_KI9}c4pZ{Q77Y8*siQg25IbkSPAK*pM(X(aaY64X-83+;pV#l2n6N9I!HVnZCq(ahHfRScFS%kaIsQ#eU24 z`ul};Rb}maD^hk@vjF-~_9)EyG9BIAeksmKsg&TZEzuPBo?7oBZCt!?l4|0~5(H*k zJkw7+B6Jinx%ZE)Frhu+dT-9kz|x5?h0u`4x=36e4`fivnpRF1&$@ zM@y$6xsU$;-%D4Hq{?WAWRhhvvhysr8SRxwsvSpxf+8cW-`a9&O-et+iKLIGT(4ZU z3@?j9C%bRPRSq`T(TdPd29bPlNqyzj(teN-KV{M8WK}=WYf8)CsyDq}aQseqsY| zu>@0G`X3WT#Iv;_W!Wu5DVLhoAd<;-)B=dHa4^swyRXD&z8`rBB6fc_yX_4Qj{lQO zPfyos`S1+*HH*he-3s4Zt^(f(h1ayVJ}+2tX>cY(Bc8;eumDZCHuoa^P^BF_hdNe>@FO-lv zBZa=j`-2+HZQTBLY~CX&VHgLtVz%%sH7<%LsH~{?1Enxmuv%_}LE?O-?{dq-b@S^R z80bqf!e($XKlZz`i%Red{9&6VhpjLzG&>SZOIIPePoCy;f2l4wB$72mn-P`wPBUFk z@^To&p1ulq)j`F880OV(dj}6YzE~hMkFT`e7{!5^31#ZjdNMy~HGunW$h?wB3CqL~ z|3tq{3RfmIeeVde?K%)-9XQDJ{*LNW2=~JlT%~_Oy7uttboI91(_9tPfKuT1!MWnU zTF3KaLOg~V%Cn{6af@_K*d(z>@DEvg)35ygQ>0{Mj=fJp9RSJA8E`cDfRf9}N$IO5 zgA0hE0ls7bfXbKFL+cp@oLQ@Zr;l`8rZ{fISx%)F+J&d4$!bP`uI78`!MFWh+0DV~ zLzyB+k1Gy0Ub9=k^<;?MXqBdSW>%(!mhW@+A2C!r69`$ko(C$5=~>MOakq!70Q)+)FU z1_{<)ebEa#ieVfhG_=hS6x^x$HzHep!^|fGYs2(Xy3UpzLT)~zE%;-ebl2)-pFMv@ z`*e~?i7e}JI{Br}V&xGoy|nj6(O$$PPh${&kIAs=H`z$Z15P$mF$fiUi~m&wx*rDs zn-=)L(13#aO=L~3#3xI2fw_n3U#KDR5`Ik5E#{dZ(w=S3JW28--(M>1w>DSHBT2ey zU5BMikx%t$#PK=8trE*OXI`@K;+aDv}spj8tFo-R%Wa+;OE+|9sagXxp^sWzZ^x{sGSlGlc>vbcSPkVZ|$b{>YG zUlA~0aFfZ^ACN2`Utg>cMN*qipMq3p&mCWJr4rrZ(&Cmk!(w4~*L7JDl9Pp>hc4`u zeM;o(yvgII{ppw==;C|H!zn!C-o`QjFYm9655)A~hQ|P11n{PE!;oiI9`}VbG zaktfs-HYlr!vEs}kcPKBflf?tm3vCk$gU2bMRP~}t=b5S`bW(|77R^ zq>;d3>(C(qDY*fTAXx|3N`*(O%AZHLUJu*87<~>GyY(p~mqytfK)WLq=ALu(*X(}; z4ITa)e)lhAxw?!<123 zxU;xzuzU(#Kz@bG_zjsvnK*IU&Z

8Zh1 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 Vr_EQ`6wfS**zdWocu!Eue*yZe>_`9r diff --git a/docs/build/_images/overview.webp b/docs/build/_images/overview.webp deleted file mode 100644 index d4cc81bb05b1cd8f33292aaecf84bc2dd34df2a1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20496 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 X0Kyw`5fpw7Jf&a&0000000000R}=h6 diff --git a/docs/build/_images/poly4_lifter_A.png b/docs/build/_images/poly4_lifter_A.png deleted file mode 100644 index 35ce631bdb56f420b0c430b2d605c71066b8ad10..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11563 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 diff --git a/docs/build/_images/poly6_lifter_A.png b/docs/build/_images/poly6_lifter_A.png deleted file mode 100644 index b6f900ce7e0607bc545f340066b748a2a84c9f76..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10319 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 Dl+W(f diff --git a/docs/build/_modules/index.html b/docs/build/_modules/index.html deleted file mode 100644 index 94616f9..0000000 --- a/docs/build/_modules/index.html +++ /dev/null @@ -1,285 +0,0 @@ - - - - - - - - Overview: module code — POPCOR 0.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - -

- - -
- - -
-
- - - - GitHub logo - - - - - \ No newline at end of file diff --git a/docs/build/_modules/popcor/auto_template.html b/docs/build/_modules/popcor/auto_template.html deleted file mode 100644 index 2884553..0000000 --- a/docs/build/_modules/popcor/auto_template.html +++ /dev/null @@ -1,1508 +0,0 @@ - - - - - - - - popcor.auto_template — POPCOR 0.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - -
- - -
- -
-
- - - GitHub logo - Go to GitHub source code - -
-
- -

Source code for popcor.auto_template

-import time
-from copy import deepcopy
-
-import matplotlib
-import matplotlib.patches
-import numpy as np
-import pandas as pd
-import scipy.sparse as sp
-from cert_tools.linalg_tools import find_dependent_columns, rank_project
-from cert_tools.sdp_solvers import solve_feasibility_sdp
-from cert_tools.sdp_solvers import solve_lambda_cvxpy as solve_lambda
-from cert_tools.sdp_solvers import solve_sdp_cvxpy
-from poly_matrix import PolyMatrix
-
-from popcor.base_lifters import StateLifter
-from popcor.solvers.common import find_local_minimum
-from popcor.solvers.sparse import bisection, brute_force
-from popcor.utils.common import get_aggregate_sparsity, get_vec
-from popcor.utils.constraint import Constraint, generate_poly_matrix, plot_poly_matrix
-from popcor.utils.plotting_tools import (
-    add_colorbar,
-    add_rectangles,
-    import_plt,
-    initialize_discrete_cbar,
-    plot_basis,
-    plot_singular_values,
-    savefig,
-)
-
-plt = import_plt()
-
-# parameter of SDP solver
-TOL = 1e-10
-
-NOISE_SEED = 5
-
-ADJUST_Q = True  # rescale Q matrix
-PRIMAL = False  # use primal or dual formulation of SDP. Recommended is False, because of how MOSEK handles this parameter.
-
-FACTOR = 1.2  # oversampling factor.
-
-PLOT_MAX_MATRICES = 10  # set to np.inf to plot all individual matrices.
-
-USE_KNOWN = True
-USE_INCREMENTAL = False
-
-GLOBAL_THRESH = 1e-3  # consider dual problem optimal when eps<GLOBAL_THRESH
-
-METHOD_NULL = "qrp"  # use svd or qp for comparison only, otherwise leave it at qrp
-
-EPSILON = 1e-4  # fixed epsilon for sparsity-promoting SDP
-
-
-
-[docs] -class AutoTemplate(object): - """ - Class to incrementally learn and augment constraint templates until we reach tightness. - """ - - TOL_RANK_ONE = 1e7 - TOL_REL_GAP = 1e-3 - - # number of random inits to find the global solution - # we always try from ground truth, so for low-enough noise - # that should be good enough. - N_INITS = 1 - - APPLY_TEMPLATES_TO_OTHERS = True - - def __init__( - self, - lifter: StateLifter, - ): - self.lifter = lifter - - # templates contains the learned "templates" of the form: - # ((i, mat_vars), <i-th learned vector for these mat_vars variables, PolyRow form>) - self.templates_poly_ = None # for plotting only: all templats stacked in one - - # constraints after applying templates to the parameters. - self.constraints = [] - - # templates contains all the learned templates - self.templates = [] - - # contains all known constraints, computed only once. - self.templates_known = [] - - # contains the currently relevant known constraints - self.templates_known_sub = [] - self.constraint_index = 0 - - # keep track of which constraints have been tested any constraint twice. - self.index_tested = set() - - # solver results - self.solver_vars = None - self.df_tight = None - self.ranks = [] - self.dual_costs = [] - - # tightness dict makes sure we don't compute tightness twice. - self.reset_tightness_dict() - - # currently used variables - self.mat_vars = [] - - # so-far used variables - self.variable_list = [] - - # can be overwritten later - self.use_known = USE_KNOWN - self.use_incremental = USE_INCREMENTAL - - def reset_tightness_dict(self): - self.tightness_dict = {"rank": None, "cost": None} - - @property - def templates_poly(self): - if self.templates_poly_ is None: - self.templates_poly_ = self.generate_templates_poly( - factor_out_parameters=True - ) - return self.templates_poly_ - - @property - def A_matrices(self): - return [c.A_sparse_ for c in self.constraints] - - def check_violation(self, dual_cost): - assert self.solver_vars is not None - primal_cost = self.solver_vars["qcqp_cost"] - if primal_cost is None: - print("warning can't check violation, no primal cost.") - return False - return (dual_cost - primal_cost) / abs(dual_cost) > self.TOL_REL_GAP - - def duality_gap_is_zero(self, dual_cost, verbose=False, data_dict={}): - assert self.solver_vars is not None - primal_cost = self.solver_vars["qcqp_cost"] - RDG = (primal_cost - dual_cost) / abs(dual_cost) - if RDG < -1e-2: - print( - f"Warning: dual is significantly larger than primal: d={dual_cost:.3e} > p={primal_cost:.3e}, diff={dual_cost-primal_cost:.3e}" - ) - return False - res = RDG < self.TOL_REL_GAP - data_dict["RDG"] = RDG - if not verbose: - return res - - if res: - print("achieved cost tightness:") - else: - print("no cost tightness yet:") - print(f"qcqp cost={primal_cost:.4e}, dual cost={dual_cost:.4e}") - return res - - def is_rank_one(self, eigs, verbose=False, data_dict={}): - SVR = eigs[0] / eigs[1] - data_dict["SVR"] = SVR - res = SVR > self.TOL_RANK_ONE - if not verbose: - return res - if res: - print("achieved rank tightness:") - else: - print("no rank tightness yet:") - print( - f"first two eigenvalues: {eigs[0]:.2e}, {eigs[1]:.2e}, ratio:{eigs[0] / eigs[1]:.2e}" - ) - return res - - def is_tight(self, verbose=False, data_dict={}, tightness=None): - - if tightness is None: - tightness = self.lifter.TIGHTNESS - - if self.tightness_dict[tightness] is not None: - return self.tightness_dict[tightness] - - A_b_list_all = self.get_A_b_list() - A_list = [A for A, __ in A_b_list_all[1:]] # for debugging only - - B_list = self.lifter.get_B_known() - X, info = self._test_tightness(A_b_list_all, B_list, verbose=verbose) - - assert self.solver_vars is not None - self.solver_vars["X"] = X # type: ignore - - self.dual_costs.append(info["cost"]) - self.variable_list.append(self.mat_vars) - - data_dict["q"] = self.solver_vars["qcqp_cost"] - data_dict.update(self.solver_vars) - - if info["cost"] is None: - self.ranks.append(np.zeros(self.lifter.get_dim_x())) - print(f"Warning: solver failed with message: {info['msg']}") - max_error, bad_list = self.lifter.test_constraints(A_list, errors="print") - print("Maximum error:", max_error) - return False - elif self.check_violation(info["cost"]): - self.ranks.append(np.zeros(A_list[0].shape[0])) # type: ignore - print( - f"Warning: dual cost higher than QCQP, d={info['cost']:.2e}, q={self.solver_vars['qcqp_cost']:.2e}" - ) - print( - "Usually this means that MOSEK tolerances are too loose, or that there is a mistake in the constraints." - ) - print( - "It can also mean that we are not sampling enough of the space close to the true solution." - ) - max_error, bad_list = self.lifter.test_constraints(A_list, errors="print") - print("Maximum feasibility error at random x:", max_error) - - tol = 1e-10 - xhat = self.solver_vars["xhat"] - max_error = -np.inf - - assert xhat is not None - assert X is not None - for Ai in A_list: - assert isinstance(Ai, np.ndarray) or isinstance(Ai, sp.spmatrix) - assert isinstance(xhat, np.ndarray) - error = xhat.T @ Ai @ xhat - - errorX = np.trace(X @ Ai) - max_error = max(errorX, max_error) - if abs(error) > tol: - print( - f"Feasibility error too high! xAx:{error:.2e}, <X,A>:{errorX:.2e}" - ) - print(f"Maximum feasibility error at solution x: {max_error}") - - assert X is not None - - data_dict["d"] = info["cost"] - - # sanity check - final_cost = np.trace(self.solver_vars["Q"] @ X) - if abs(final_cost - info["cost"]) / info["cost"] >= 1e-1: - print( - f"Warning: cost is inconsistent: {final_cost:.3e}, {info['cost']:.3e}" - ) - - eigs = np.linalg.eigvalsh(X)[::-1] - self.ranks.append(eigs) - - if self.lifter.robust: - x_dim = self.lifter.d + self.lifter.d**2 + 1 - wi = X[0, x_dim::x_dim] - print("should be plus or minus ones:", wi.round(4)) - - if self.solver_vars["qcqp_cost"] is not None: - cost_tight = self.duality_gap_is_zero( - info["cost"], verbose=tightness == "cost", data_dict=data_dict - ) - else: - cost_tight = False - rank_tight = self.is_rank_one( - eigs, verbose=tightness == "rank", data_dict=data_dict - ) - self.tightness_dict["rank"] = rank_tight - self.tightness_dict["cost"] = cost_tight # type: ignore - if tightness == "rank": - return rank_tight - elif tightness == "cost": - return cost_tight - - def get_A_list(self, var_dict=None): - if var_dict is None: - A_known = [] - if self.use_known: - A_known += [constraint.A_sparse_ for constraint in self.templates_known] - return A_known + [constraint.A_sparse_ for constraint in self.constraints] - else: - A_known = [] - if self.use_known: - A_known += [constraint.A_poly_ for constraint in self.templates_known] - A_list_poly = A_known + [ - constraint.A_poly_ for constraint in self.constraints - ] - return [A.get_matrix(var_dict) for A in A_list_poly] - - def get_A_b_list(self): - A_list = self.get_A_list() - A_b_list_all = self.lifter.get_A_b_list(A_list) - return A_b_list_all - - def generate_minimal_subset( - self, - reorder=False, - tightness="rank", - use_last=None, - use_bisection=False, - tol=TOL, - ): - def function(A_b_list_here, df_data, verbose=False): - """Function for bisection or brute_force""" - if (len(A_b_list_here) in df_data.keys()) and not verbose: - new_data = df_data[len(A_b_list_here)] - else: - new_data = {"lifter": str(self.lifter), "reorder": reorder} - X, info = self._test_tightness( - A_b_list_here, B_list=B_list, verbose=False - ) - dual_cost = info["cost"] - new_data["dual cost"] = dual_cost - if dual_cost is None: - print(f"{len(A_b_list_here)}: solver error? msg: {info['msg']}") - new_data["eigs"] = np.full(self.lifter.get_dim_X(), np.nan) - new_data["cost_tight"] = False - new_data["rank_tight"] = False - df_data[len(A_b_list_here)] = deepcopy(new_data) - return False - - elif self.duality_gap_is_zero(dual_cost): - print(f"{len(A_b_list_here)}: cost-tight") - new_data["cost_tight"] = True - else: - print(f"{len(A_b_list_here)}: not cost-tight yet") - new_data["cost_tight"] = False - - assert X is not None - assert self.solver_vars is not None - - eigs = np.linalg.eigvalsh(X)[::-1] - new_data["eigs"] = eigs - if self.is_rank_one(eigs): - print(f"{len(A_b_list_here)}: rank-tight") - new_data["rank_tight"] = True - else: - new_data["rank_tight"] = False - print(f"{len(A_b_list_here)}: not rank-tight yet") - df_data[len(A_b_list_here)] = deepcopy(new_data) - - if verbose: - print( - f"dual cost: {dual_cost:4.4e}, primal cost: {self.solver_vars['qcqp_cost']:4.4f}" - ) - print(f"largest 10 eigenvalues: {eigs[:10]}") - - if tightness == "rank": - return new_data["rank_tight"] - else: - return new_data["cost_tight"] - - A_b_list_all = self.get_A_b_list() - B_list = self.lifter.get_B_known() - - force_first = 1 - if self.use_known: - force_first += len(self.templates_known) - - if reorder: - if self.solver_vars is None: - self.find_local_solution() - assert self.solver_vars is not None - - # find the importance of each constraint - _, lamdas = solve_lambda( - self.solver_vars["Q"], - A_b_list_all, - self.solver_vars["xhat"], - B_list=B_list, - force_first=force_first, - tol=tol, - adjust=True, - primal=False, - verbose=False, - fixed_epsilon=EPSILON, - ) - if lamdas is None: - print("Warning: problem doesn't have feasible solution!") - print("Sanity checks:") - B_list = self.lifter.get_B_known() - X, info = self._test_tightness(A_b_list_all, B_list, verbose=False) - xhat_from_X, _ = rank_project(X, p=1) - xhat = self.solver_vars["xhat"] - - assert xhat is not None - print("max xhat error:", np.min(xhat - xhat_from_X)) - print("max Hx", np.max(np.abs(info["H"] @ xhat))) - print("max Hx_from_X", np.max(np.abs(info["H"] @ xhat_from_X))) - eigs = np.linalg.eigvalsh(info["H"].toarray()) - print("min eig of H", np.min(eigs)) - return None - print("found valid lamdas") - - # order the redundant constraints by importance - redundant_idx = np.argsort(np.abs(lamdas[force_first:]))[::-1] - sorted_idx = np.r_[np.arange(force_first), force_first + redundant_idx] - else: - sorted_idx = range(len(A_b_list_all)) - - inputs = [A_b_list_all[idx] for idx in sorted_idx] - - B_list = self.lifter.get_B_known() - df_data = [] - - if use_last is None: - start_idx = force_first - else: - start_idx = max(len(inputs) - use_last, force_first) - - df_data = {} - if use_bisection: - bisection( - function, (inputs, df_data), left_num=start_idx, right_num=len(inputs) - ) - else: - brute_force( - function, (inputs, df_data), left_num=start_idx, right_num=len(inputs) - ) - - df_tight = pd.DataFrame(df_data.values(), index=list(df_data.keys())) - if self.df_tight is None: - self.df_tight = df_tight - else: - self.df_tight = pd.concat([self.df_tight, df_tight], axis=0) - - minimal_indices = [] - if tightness == "cost": - min_num = df_tight[df_tight.cost_tight == 1].index.min() - elif tightness == "rank": - min_num = df_tight[df_tight.rank_tight == 1].index.min() - if not np.isnan(min_num): - minimal_indices = list(sorted_idx[:min_num]) - return minimal_indices - - def find_local_solution(self, n_inits=None, verbose=False, plot=False): - if n_inits is None: - n_inits = self.N_INITS - np.random.seed(NOISE_SEED) - Q = self.lifter.get_Q() - y = self.lifter.y_ - qcqp_that, qcqp_cost, info = find_local_minimum( - self.lifter, y=y, verbose=verbose, n_inits=n_inits, plot=plot - ) - self.solver_vars = dict(Q=Q, y=y, qcqp_cost=qcqp_cost, xhat=None) - self.solver_vars.update(info) # type: ignore - if qcqp_cost is not None: - xhat = self.lifter.get_x(qcqp_that) - self.solver_vars["xhat"] = xhat # type: ignore - - # calculate error for global estimate - self.solver_vars.update(self.lifter.get_error(qcqp_that)) - # calculate errors for local estimates - for key, qcqp_that_local in info.items(): - if key.startswith("local solution"): - solution_idx = key.strip("local solution ") - error_dict = self.lifter.get_error(qcqp_that_local) - self.solver_vars.update( - { - f"local {solution_idx} {error_name}": err - for error_name, err in error_dict.items() - } - ) - - return True - - def find_global_solution(self, data_dict={}): - from cert_tools.sdp_solvers import options_cvxpy - - assert self.solver_vars is not None - - A_b_list_all = self.get_A_b_list() - options_cvxpy["accept_unknown"] = True - - # find or certify global solution - if self.lifter.TIGHTNESS == "rank": - X = self.solver_vars["X"] - x, info = rank_project(X, p=1) - x = x.flatten() - else: - """Try to solve dual problem.""" - xhat = self.solver_vars["xhat"] - - H, info = solve_feasibility_sdp( - self.solver_vars["Q"], - A_b_list_all, - xhat, - adjust=True, - options=options_cvxpy, - tol=1e-10, - # soft_epsilon=False, - # eps_tol=1e-4, - soft_epsilon=True, - ) - if info["eps"] is not None: - cert = abs(info["eps"]) <= GLOBAL_THRESH - print(f"global solution eps: {info['eps']:.2e}, cert: {cert}") - data_dict["global solution cert"] = cert - - if info["eps"] and cert: - x = xhat - else: - x = None - - # sanity check: try to certify local minima (should fail) - keys = [key for key in data_dict.keys() if key.startswith("local solution")] - for key in keys: - x_local = data_dict[key] - x_local = self.lifter.get_x(theta=x_local) - H, info = solve_feasibility_sdp( - self.solver_vars["Q"], - A_b_list_all, - x_local, - adjust=True, - tol=1e-10, - options=options_cvxpy, - ) - if info["eps"] is not None: - print(f"local solution eps: {info['eps']:.2e}") - cert = abs(info["eps"]) <= GLOBAL_THRESH - data_dict[key + " cert"] = cert - - if x is not None: - theta = self.lifter.get_theta(x) - cost = self.lifter.get_cost(theta, self.solver_vars["y"]) - data_dict["global theta"] = theta - data_dict["global cost"] = cost - return True - return False - - def _test_tightness(self, A_b_list_all, B_list=[], verbose=False): - from cert_tools.sdp_solvers import options_cvxpy - - if self.solver_vars is None: - self.find_local_solution(verbose=verbose) - assert self.solver_vars is not None - - options_cvxpy["accept_unknown"] = True - X, info = solve_sdp_cvxpy( - self.solver_vars["Q"], - A_b_list_all, - B_list=B_list, - adjust=ADJUST_Q, - verbose=verbose, - primal=PRIMAL, - tol=TOL, - options=options_cvxpy, - ) - return X, info - - def update_variables(self): - # add new variable to the list of variables to study - try: - self.mat_vars = next(self.variable_iter) - return True - except StopIteration: - return False - - def extract_known_templates(self): - """Find which of the known constraints are relevant for the current variables.""" - templates_known_sub = [] - for c in self.templates_known: - var_subset = set(c.A_poly_.get_variables()) - if var_subset.issubset(self.mat_vars): - templates_known_sub.append(c) - - new_index_set = set([t.index for t in templates_known_sub]) - old_index_set = set([t.index for t in self.templates_known_sub]) - diff_index_set = new_index_set.difference(old_index_set) - - self.templates_known_sub = templates_known_sub - return len(diff_index_set) - - def learn_templates(self, plot=False, data_dict=None): - from popcor import AutoTight - - templates = [] - mat_var_dict = self.lifter.get_var_dict(self.mat_vars) - param_dict = self.lifter.get_involved_param_dict(self.mat_vars) - - t1 = time.time() - Y = AutoTight.generate_Y( - self.lifter, - var_subset=self.mat_vars, - param_subset=param_dict, - factor=FACTOR, - ) - a_vectors = [] - if self.use_incremental: - for c in self.templates: - ai = get_vec(c.A_poly_.get_matrix(mat_var_dict)) - bi = self.lifter.augment_using_zero_padding(ai, param_dict) - a_vectors.append(bi) - if self.use_known: - for c in self.templates_known_sub: - ai = get_vec(c.A_poly_.get_matrix(mat_var_dict)) - bi = self.lifter.augment_using_zero_padding(ai, param_dict) - a_vectors.append(bi) - Y = np.vstack([Y] + a_vectors) - - if plot: - fig, ax = plt.subplots() - - print(f"data matrix Y has shape {Y.shape} ") - for i in range(AutoTight.N_CLEANING_STEPS + 1): - if i == 0: - print(f"getting basis...", end="") - else: - print(f"cleaning step {i}/{AutoTight.N_CLEANING_STEPS+1}...", end="") - basis_new, S = AutoTight.get_basis(self.lifter, Y, method=METHOD_NULL) - print("...done, analyzing...", end="") - corank = basis_new.shape[0] - if corank > 0: - AutoTight.test_S_cutoff(S, corank) - - bad_idx = AutoTight.clean_Y(basis_new, Y, S, plot=False) - - if plot: - if len(bad_idx): - plot_singular_values( - S, eps=AutoTight.EPS_SVD, label=f"run {i}", ax=ax - ) - else: - plot_singular_values(S, eps=AutoTight.EPS_SVD, ax=ax, label=None) - - if len(bad_idx) > 0: - print(f"there are {len(bad_idx)} bad basis vectors (with high error).") - Y = np.delete(Y, bad_idx, axis=0) - else: - print(f"no bad basis vectors found.") - break - - if basis_new.shape[0]: - for i, b in enumerate(basis_new): - constraint = Constraint.init_from_b( - index=self.constraint_index, - mat_var_dict=mat_var_dict, - mat_param_dict=param_dict, - b=b, - lifter=self.lifter, - convert_to_polyrow=self.APPLY_TEMPLATES_TO_OTHERS, - known=False, - ) - if constraint is None: - print("Warning: found an all-zero constraint; not adding it.") - continue - templates.append(constraint) - self.constraint_index += 1 - - if len(templates + self.templates): - # we assume that all known constraints are linearly independent, and also - # that all known+previously found constraints are linearly independent. - indep_templates = self.clean_constraints( - constraints=templates + self.templates, - remove_dependent=True, - remove_imprecise=False, - ) - else: - indep_templates = [] - - if data_dict is not None: - ttot = time.time() - t1 - data_dict["t learn templates"] = ttot - data_dict["n rank"] = Y.shape[1] - corank - data_dict["n nullspace"] = corank - - if len(templates) > 0: - n_all = len(indep_templates) - n_new = n_all - len(self.templates) - self.templates = indep_templates - return n_new, n_all - return 0, len(self.constraints) - - def apply_templates(self): - # the new templates are all the ones corresponding to the new matrix variables. - new_constraints = self.lifter.apply_templates( - self.templates, self.constraint_index - ) - self.constraint_index += len(new_constraints) - if not len(new_constraints): - return 0, 0 - - n_all = len(new_constraints) - n_new = n_all - len(self.constraints) - self.constraints = new_constraints - return n_new, n_all - - def clean_constraints( - self, - constraints, - remove_dependent=True, - remove_imprecise=True, - ): - """ - This function is used in two different ways. - - First use case: Given the new templates, in b-PolyRow form, we determine which of the templates are actually - independent to a_current. We only want to augment the independent ones, otherwise we waste computing effort. - - Second use case: After applying the templates to as many variable pairs as we wish, we call this function again, - to make sure all the matrices going into the SDP are in fact linearly independent. - """ - if remove_dependent: - # find which constraints are lin. dep. - A_vec = sp.vstack( - [constraint.a_full_ for constraint in constraints], format="coo" - ).T - - # make sure that matrix is tall (we have less constraints than number of dimensions of x) - if A_vec.shape[0] < A_vec.shape[1]: - print("Warning: fat matrix.") - - bad_idx = find_dependent_columns(A_vec) - if len(bad_idx): - for idx in sorted(bad_idx)[::-1]: - del constraints[idx] - - if remove_imprecise: - error, bad_idx = self.lifter.test_constraints( - [c.A_sparse_ for c in constraints if c.index not in self.index_tested], - errors="ignore", - n_seeds=2, - ) - self.index_tested = self.index_tested.union([c.index for c in constraints]) - if len(bad_idx): - print(f"removing {bad_idx} because high error, up to {error:.2e}") - for idx in list(sorted(bad_idx))[ - ::-1 - ]: # reverse order to not mess up indexing - del constraints[idx] - return constraints - - def get_known_templates(self, unroll=False): - templates_known = [] - if not self.use_known: - return templates_known - - # TODO(FD) we should not always recompute from scratch, but it's not very expensive so it's okay for now. - target_dict = self.lifter.get_var_dict(unroll_keys=unroll) - for i, Ai in enumerate( - self.lifter.get_A_known(var_dict=target_dict, output_poly=True) - ): - template = Constraint.init_from_A_poly( - lifter=self.lifter, - A_poly=Ai, - known=True, - index=self.constraint_index, - template_idx=self.constraint_index, - mat_var_dict=self.lifter.var_dict, - compute_polyrow_b=True, - ) - self.constraint_index += 1 - templates_known.append(template) - return templates_known - - def get_sufficient_templates(self, new_order, new_lifter): - """Use the templates in learner to populate the own templates and constraints.""" - template_indices = sorted( - [t.index for t in self.templates + self.templates_known] - ) - new_templates = [] - template_unique_idx = set() - - # The index list new_order contains the indices of constraints, but we want to track back - # which templates those corresponded to. - # We thus create the set of all template indices that are represented in the - # sufficient constraints. - all_constraints = self.templates_known + self.constraints - for i in new_order: - # the first constraint ALWAYS corresponds to A0, whichs not part of our templates. - if i > 0: - new_index = all_constraints[i - 1].template_idx - assert new_index in template_indices # just a sanity check - template_unique_idx.add(new_index) - - # now we can create the new templates by looping through the sufficent template list. - for t in template_unique_idx: - # find the template of the requested index - other_templates = self.templates + self.templates_known - template_indices = [temp.index for temp in other_templates] - idx = template_indices.index(t) # raises Error if t is not in list. - template = other_templates[idx] - - assert isinstance(template, Constraint) - - # scale the template to the dimensions of the new learner. - # (not the known ones as those where already through other_learner.templates_known) - if not template.known: - scaled_template = template.scale_to_new_lifter(new_lifter) - new_templates.append(scaled_template) - return new_templates - - def get_sorted_df(self, templates_poly=None, add_columns={}): - def sort_fun_sparsity(series): - # This is a bit complicated because we don't want the order to change - # because of the values, only isna() should matter. - # To make this work, we temporarily change the non-nan values to the order in which they appear - index = pd.MultiIndex.from_product([[0], series.index]) - series.index = index - scipy_sparse = series.sparse.to_coo()[0] - # don't start at 0 because it's considered empty by scipy - scipy_sparse.data = np.arange(1, 1 + scipy_sparse.nnz) - pd_sparse = pd.Series.sparse.from_coo(scipy_sparse, dense_index=True) - return pd_sparse - - if templates_poly is None: - templates_poly = self.templates_poly - - series = [] - - variable_dict_j = list(templates_poly.variable_dict_j.keys()) - for i, key_i in enumerate(templates_poly.variable_dict_i): - data = {j: float(val) for j, val in templates_poly.matrix[key_i].items()} - for key, idx_list in add_columns.items(): - # if the list is not empty, then indicate which constraints are required. - if idx_list is not None and len(idx_list): - idx_list = list(idx_list) - try: - data[key] = idx_list.index(i) - except Exception: - data[key] = -1 - # if the list is empty, all of them are required (and more) - else: - data[key] = 1.0 - series.append( - pd.Series( - data, - index=variable_dict_j + list(add_columns.keys()), - dtype="Sparse[float]", - ) - ) - df = pd.DataFrame( - series, dtype="Sparse[float]", index=templates_poly.variable_dict_i - ) - df.dropna(axis=1, how="all", inplace=True) - - try: - df_sorted = df.sort_values( - key=sort_fun_sparsity, - by=list(df.columns), - axis=0, - na_position="last", - inplace=False, - ) - df_sorted["order_sparsity"] = range(len(df_sorted)) - return df_sorted - except Exception as e: - print("failed to sort:", e) - return df - - def generate_templates_poly(self, constraints=None, factor_out_parameters=False): - if constraints is None: - constraints = self.templates_known + self.constraints - - plot_rows = [] - plot_row_labels = [] - j = -1 - old_mat_vars = "" - for constraint in constraints: - mat_vars = constraint.mat_var_dict - i = constraint.index - if factor_out_parameters: # use a and not b. - if constraint.polyrow_a_ is not None: - plot_rows.append(constraint.polyrow_a_) - else: - if constraint.a_ is not None: - polyrow_a = self.lifter.convert_a_to_polyrow( - constraint.a_, mat_vars - ) - elif constraint.a_full_ is not None: - polyrow_a = self.lifter.convert_a_to_polyrow( - constraint.a_full_, mat_vars - ) - plot_rows.append(polyrow_a) - else: - if constraint.polyrow_b_ is not None: - plot_rows.append(constraint.polyrow_b_) - else: - plot_rows.append( - self.lifter.convert_b_to_polyrow(constraint.b_, mat_vars) - ) - - if mat_vars != old_mat_vars: - j += 1 - plot_row_labels.append(f"{j}:b{i}") - # plot_row_labels.append(f"{j}{mat_vars}:b{i}") - old_mat_vars = mat_vars - else: - plot_row_labels.append(f"{j}:b{i}") - - templates_poly = PolyMatrix.init_from_row_list( - plot_rows, row_labels=plot_row_labels - ) - - # make sure variable_dict_j is ordered correctly. - templates_poly.variable_dict_j = self.lifter.var_dict_row( - mat_vars, force_parameters_off=factor_out_parameters - ) - return templates_poly - - def save_sorted_templates( - self, df, fname_root="", title="", drop_zero=False, simplify=True - ): - - # convert to poly matrix for plotting purposes only. - poly_matrix = PolyMatrix(symmetric=False) - keys_j = [] - keys_i = [] - for i, row in df.iterrows(): - for k, val in row[~row.isna()].items(): - if "order" in k or "required" in k: - continue - poly_matrix[i, k] = val - keys_j.append(k) - keys_i.append(i) - - variables_j = self.lifter.var_dict_row( - var_subset=self.lifter.var_dict, force_parameters_off=False - ) - assert set(keys_j).issubset(variables_j) - if drop_zero: - variables_j = {k: v for k, v in variables_j.items() if k in keys_j} - variables_i = {i: 1 for i in keys_i} - fig, ax = plot_basis( - poly_matrix, - variables_j=variables_j, - variables_i=variables_i, - discrete=True, - ) - ax.set_yticklabels([]) - ax.set_yticks([]) - if simplify: - ax.set_xticks([]) - ax.set_xticklabels([]) - else: - new_xticks = [] - for lbl in ax.get_xticklabels(): - lbl = lbl.get_text() - if "_" in lbl: # avoid double subscript - new_lbl = f"${lbl.replace('h-', '').replace(':', '^')}$" - else: - new_lbl = f"${lbl.replace('h-', '').replace(':', '_')}$" - new_xticks.append(new_lbl) - ax.set_xticklabels(new_xticks, fontsize=7) - - # plot a red vertical line at each new block of parameters. - params = [v.split("-")[0] for v in variables_j] - old_param = params[0] - for i, p in enumerate(params): - if p != old_param: - ax.axvline(i, color="red", linewidth=1.0) - ax.annotate( - text=f"${p.replace(':0', '^x').replace(':1', '^y').replace('l.','').replace('.','')}$", - xy=(float(i), 0.0), - fontsize=8, - color="red", - ) - old_param = p - ax.set_title(title) - if "required (sorted)" in df.columns: - for i, (_, row) in enumerate(df.iterrows()): - if row["required (sorted)"] < 0: - ax.add_patch( - matplotlib.patches.Rectangle( - (ax.get_xlim()[0], i - 0.5), - ax.get_xlim()[1] + 0.5, - 1.0, - fc="white", - alpha=0.5, - lw=0.0, - ) - ) - if fname_root != "": - savefig(fig, fname_root + "_templates-sorted.png") - return fig, ax - - def save_templates(self, fname_root="", title="", with_parameters=False): - - templates_poly = self.generate_templates_poly( - factor_out_parameters=not with_parameters - ) - variables_j = self.lifter.var_dict_row( - self.mat_vars, force_parameters_off=not with_parameters - ) - fig, ax = plot_basis(templates_poly, variables_j=variables_j, discrete=True) - if with_parameters: - for p in range(1, self.lifter.get_dim_P(self.mat_vars)): - ax.axvline(p * self.lifter.get_dim_X(self.mat_vars) - 0.5, color="red") - - ax.set_title(title) - if fname_root != "": - savefig(fig, fname_root + "_templates.png") - return fig, ax - - def save_tightness(self, fname_root, title=""): - labels = self.variable_list - assert self.solver_vars is not None - - fig, ax = plt.subplots() - xticks = range(len(self.dual_costs)) - ax.semilogy(xticks, self.dual_costs, marker="o") - ax.set_xticks(xticks, labels) - if self.solver_vars["qcqp_cost"] is not None: - ax.axhline(float(self.solver_vars["qcqp_cost"]), color="k", ls=":") - ax.set_title(title) - if fname_root != "": - savefig(fig, fname_root + "_tightness.png") - - fig, ax = plt.subplots() - for eig, label in zip(self.ranks, labels): - ax.semilogy(eig, label=label) - ax.legend(loc="upper right") - ax.set_title(title) - if fname_root != "": - savefig(fig, fname_root + "_eigs.png") - return - - def save_matrices_sparsity(self, A_matrices=None, fname_root="", title=""): - assert self.solver_vars is not None - - if A_matrices is None: - A_matrices = self.A_matrices - - Q = self.solver_vars["Q"].toarray() # type:ignore - - sorted_i = self.lifter.get_var_dict(unroll_keys=True) - A_matrices_sparse = [ - A_poly.get_matrix(variables=sorted_i) for A_poly in A_matrices - ] - - A_agg = get_aggregate_sparsity(A_matrices_sparse) - - fig, axs = plt.subplots(1, 2) - fig.set_size_inches(6, 3) - im0 = axs[0].matshow( - 1 - A_agg.toarray(), vmin=0, vmax=1, cmap="gray" - ) # 1 (white) is empty, 0 (black) is nonempty - - vmin = min(-np.max(Q), np.min(Q)) - vmax = max(np.max(Q), -np.min(Q)) - norm = matplotlib.colors.SymLogNorm(10**-5, vmin=vmin, vmax=vmax) - im1 = axs[1].matshow(Q, norm=norm) - - for ax in axs: - add_rectangles(ax, self.lifter.var_dict) - - add_colorbar(fig, axs[1], im1, nticks=3) - # only for dimensions - add_colorbar(fig, axs[0], im0, visible=False) - if fname_root != "": - savefig(fig, fname_root + "_matrices-sparisty.png") - return fig, axs - - def save_matrices_poly( - self, - A_matrices=None, - n_matrices=5, - fname_root="", - reduced_mode=False, - save_individual=False, - max_matrices=PLOT_MAX_MATRICES, - ): - if A_matrices is None: - A_matrices = self.A_matrices - - n_rows = n_matrices // 10 + 1 - n_cols = min(n_matrices, 10) - fig, axs = plt.subplots(n_rows, n_cols, squeeze=False) - fig.set_size_inches(5 * n_cols / n_rows, 5) - axs = axs.flatten() - i = 0 - for i, A_poly in enumerate(A_matrices): - if reduced_mode: - sorted_i = sorted(A_poly.variable_dict_i.keys()) - else: - sorted_i = self.lifter.get_var_dict(unroll_keys=True) - - plot_axs = [] - if i < n_matrices: - plot_axs.append(axs[i]) - - if save_individual and (i < max_matrices): - figi, axi = plt.subplots() - figi.set_size_inches(3, 3) - plot_axs.append(axi) - - if isinstance(A_poly, PolyMatrix): - A_sparse = A_poly.get_matrix(sorted_i) - else: - A_sparse = A_poly - cmap, norm, colorbar_yticks = initialize_discrete_cbar(A_sparse.data) # type: ignore - - for ax in plot_axs: - if sp.isspmatrix(A_sparse): - arr = A_sparse.toarray() # type: ignore - else: - arr = A_sparse - im = ax.matshow(arr, cmap=cmap, norm=norm) - # Use sp.isspmatrix to check if A_sparse is a scipy sparse matrix - if sp.isspmatrix(A_sparse): - add_rectangles(ax, self.lifter.var_dict) - cax = add_colorbar(fig, ax, im, size=0.1) - cax.set_yticklabels(colorbar_yticks) - - if save_individual and (i < max_matrices): - savefig(figi, fname_root + f"_matrix{i}.pdf") - for ax in axs[i + 1 :]: - ax.axis("off") - return fig, axs - -
-[docs] - def run( - self, - use_known: bool = USE_KNOWN, - use_incremental: bool = USE_INCREMENTAL, - variable_list: list[list[str]] | None = None, - verbose: bool = False, - plot: bool = False, - ): - """Run the template learning algorithm until we reach tightness, or run out of variables to add. - - :param use_known: whether to use the known constraints of the lfiter (must have get_A_known). - :param use_incremental: whether to keep adding the learned tempaltes to the set of known constraints, to enforce we find orthogonal ones. - :param variable_list: list of lists of variables to consider. If not given, will use the VARIABLE_LIST parameter of the lifter class. - - """ - data = [] - success = False - self.use_known = use_known - self.use_incremental = use_incremental - - if use_known: - self.templates_known = self.get_known_templates() - n_known = len(self.templates_known) - print(f"there are total {n_known} known constraints") - - if variable_list is None: - variable_list = self.lifter.VARIABLE_LIST - self.variable_iter = iter(variable_list) - - while 1: - # add one more variable to the list of variables to vary - if not self.update_variables(): - print("no more variables to add") - break - print(f"======== {self.mat_vars} ========") - - n_new = 0 - if use_known: - n_known_here = self.extract_known_templates() - n_new += n_known_here - print( - f"using {n_known_here}/{n_known} known constraints (only the ones that contain the current variables)" - ) - - data_dict = {"variables": self.mat_vars} - param_dict = self.lifter.get_involved_param_dict(self.mat_vars) - - # Set the type expectation for the dictionary if using type hints - data_dict: dict[str, float | int | list | None] - data_dict["n dims"] = self.lifter.get_dim_Y( - var_subset=self.mat_vars, param_subset=param_dict - ) - - print("-------- templates learning --------") - # learn new templates, orthogonal to the ones found so far. - n_new_learned, n_all = self.learn_templates(plot=plot, data_dict=data_dict) - n_new += n_new_learned - print( - f"found {n_new_learned} learned templates, new total learned: {n_all} " - ) - data_dict["n templates"] = ( - len(self.templates) + len(self.templates_known) + 1 - ) - if n_new == 0: - data.append(data_dict) - continue - - if plot: - # turn the current list of templates into a poly matrix. - templates = self.templates_known + self.templates - poly_matrix = generate_poly_matrix(templates, lifter=self.lifter) - - # make sure we use sorted column names - variables_j_all = self.lifter.var_dict_row() - variables_j = { - key: val - for key, val in variables_j_all.items() - if key in poly_matrix.variable_dict_j - } - - fig, ax = plot_poly_matrix( - poly_matrix, variables_j, simplify=False, hom="l" - ) - w, h = fig.get_size_inches() - fig.set_size_inches(10, 10 * h / w) - - # apply the pattern to all landmarks - if self.APPLY_TEMPLATES_TO_OTHERS: - print("------- applying templates ---------") - t1 = time.time() - n_new, n_all = self.apply_templates() - print( - f"found {n_new} independent learned constraints, new total: {n_all} " - ) - ttot = time.time() - t1 - - data_dict["n constraints"] = n_all + len(self.templates_known) + 1 - print( - f"total including known and homogenization:", - data_dict["n constraints"], - ) - data_dict["t apply templates"] = ttot - else: - self.constraints = [] - for temp in self.templates: - con = deepcopy(temp) - con.template_idx = temp.index - self.constraints.append(con) - - t1 = time.time() - print("-------- checking tightness ----------") - self.reset_tightness_dict() - is_tight = self.is_tight(verbose=verbose, data_dict=data_dict) - ttot = time.time() - t1 - data_dict["t check tightness"] = ttot - data.append(data_dict) - if is_tight: - success = True - break - return data, success
- - -
-[docs] - def apply(self, lifter: StateLifter, use_known: bool = False) -> list: - """Apply the learned templates to a new lifter.""" - constraints = lifter.apply_templates(self.templates) - - if use_known: - # if we set use_known=True in running AutoTemplate, then we learned only - # constraints that were not already known, so we need to add them to the - # overall set of constraints. - A_known = lifter.get_A_known() - assert isinstance(A_known, list) - return A_known + [c.A_sparse_ for c in constraints] # type: ignore
-
- -
- -
-
-
- -
- -
-

© Copyright 2025, POPCOR Contributors.

-
- - Built with Sphinx using a - theme - provided by Read the Docs. - - -
-
-
-
-
- - - - - - \ No newline at end of file diff --git a/docs/build/_modules/popcor/auto_tight.html b/docs/build/_modules/popcor/auto_tight.html deleted file mode 100644 index 78601b7..0000000 --- a/docs/build/_modules/popcor/auto_tight.html +++ /dev/null @@ -1,657 +0,0 @@ - - - - - - - - popcor.auto_tight — POPCOR 0.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - -
- - -
- -
-
- - - GitHub logo - Go to GitHub source code - -
-
- -

Source code for popcor.auto_tight

-import matplotlib.pylab as plt
-import numpy as np
-import scipy.sparse as sp
-import scipy.sparse.linalg as splinalg
-from cert_tools.linalg_tools import find_dependent_columns, get_nullspace
-
-from popcor.utils.common import get_vec
-from popcor.utils.constraint import Constraint
-from popcor.utils.plotting_tools import add_colorbar, initialize_discrete_cbar
-
-
-
-[docs] -class AutoTight(object): - """Class for automatic constraint generation.""" - - # consider singular value zero below this - EPS_SVD = 1e-5 - - # basis pursuit method, can be - # - qr: qr decomposition - # - qrp: qr decomposition with permutations (sparser), recommended - # - svd: svd - METHOD = "qrp" - - # normalize learned Ai or not - NORMALIZE = False - - # how much to oversample (>= 1) - FACTOR = 1.2 - - # number of times we remove bad samples from data matrix - N_CLEANING_STEPS = 1 # was 3 - - # maximum number of iterations of local solver - LOCAL_MAXITER = 100 - - # find and remove linearly dependent constraints - REDUCE_DEPENDENT = False - - def __init__(self): - pass - - @staticmethod - def clean_Y(basis_new, Y, s, plot=False): - errors = np.abs(basis_new @ Y.T) # Nb x n x n x Ns = Nb x Ns - if np.all(errors < 1e-10): - return [] - bad_bins = np.unique(np.argmax(errors, axis=1)) - if plot: - fig, ax = plt.subplots() - ax.semilogy(np.min(errors, axis=1)) - ax.semilogy(np.max(errors, axis=1)) - ax.semilogy(np.median(errors, axis=1)) - ax.semilogy(s) - return bad_bins - - @staticmethod - def test_S_cutoff(S, corank, eps_svd=None): - if eps_svd is None: - eps_svd = AutoTight.EPS_SVD - if corank > 1: - try: - assert abs(S[-corank]) / eps_svd < 1e-1 # 1e-1 1e-10 - assert abs(S[-corank - 1]) / eps_svd > 10 # 1e-11 1e-10 - except AssertionError: - print(f"there might be a problem with the chosen threshold {eps_svd}:") - print(S[-corank], eps_svd, S[-corank - 1]) - - @staticmethod - def get_basis_sparse( - lifter, var_list, param_list, A_known=[], plot=False, eps_svd=None - ): - - Y = AutoTight.generate_Y_sparse( - lifter, var_subset=var_list, param_subset=param_list, factor=1.0 - ) - basis, S = AutoTight.get_basis(lifter, Y, A_known=A_known, eps_svd=eps_svd) - AutoTight.test_S_cutoff(S, corank=basis.shape[0], eps_svd=eps_svd) - constraints = [] - for i, b in enumerate(basis): - constraints.append( - Constraint.init_from_b( - i, - b, - mat_var_dict=var_list, - mat_param_dict=param_list, - convert_to_polyrow=False, - known=False, - ) - ) - if plot: - plot_matrix = np.vstack([t.b_[None, :] for t in constraints]) - - cmap, norm, colorbar_yticks = initialize_discrete_cbar(plot_matrix) - X_dim = lifter.get_dim_X(var_list) - fig, ax = plt.subplots() - ax.axvline(X_dim - 0.5, color="red") - im = ax.matshow(plot_matrix, cmap=cmap, norm=norm) - ax.set_title(f"{var_list}, {param_list}") - cax = add_colorbar(fig, ax, im) - if colorbar_yticks is not None: - cax.set_yticklabels(colorbar_yticks) - plt.show(block=False) - return constraints - -
-[docs] - @staticmethod - def get_A_learned( - lifter, - A_known=[], - var_dict=None, - method=METHOD, - verbose=False, - ) -> list: - """Generate list of learned constraints by sampling the lifter. - - :param lifter: StateLifter object - :param A_known: list of known constraints, if given, will generate basis that is orthogonal to these given constraints. - :param var_dict: variable dictionary, if None, will use all variables - :param method: method to use for basis generation, can be 'qr', 'qrp', or 'svd'. 'qrp' is recommended. - :param verbose: if True, will print timing information - - :return: list of learned constraints. - """ - import time - - t1 = time.time() - Y = AutoTight.generate_Y(lifter, var_subset=var_dict, factor=1.0) - if verbose: - print(f"generate Y ({Y.shape}): {time.time() - t1:4.4f}") - t1 = time.time() - basis, S = AutoTight.get_basis(lifter, Y, A_known=A_known, method=method) - if verbose: - print(f"get basis ({basis.shape})): {time.time() - t1:4.4f}") - t1 = time.time() - A_learned = AutoTight.generate_matrices(lifter, basis, var_dict=var_dict) - if verbose: - print(f"get matrices ({len(A_learned)}): {time.time() - t1:4.4f}") - return A_learned
- - - @staticmethod - def get_A_learned_simple( - lifter, - A_known=[], - var_dict=None, - method=METHOD, - verbose=False, - ) -> list: - """Simplified version of get_A_learned that does not consider parameters.""" - import time - - t1 = time.time() - Y = AutoTight.generate_Y_simple(lifter, var_subset=var_dict, factor=1.5) - if verbose: - print(f"generate Y ({Y.shape}): {time.time() - t1:4.4f}") - t1 = time.time() - if len(A_known): - basis_known = np.vstack( - [ - np.asarray(get_vec(Ai.get_matrix(var_dict))) - for Ai in A_known - if get_vec(Ai.get_matrix(var_dict)) is not None - ] - ).T - else: - basis_known = None - basis, S = AutoTight.get_basis( - lifter, Y, basis_known=basis_known, method=method - ) - if verbose: - print(f"get basis ({basis.shape})): {time.time() - t1:4.4f}") - t1 = time.time() - A_learned = AutoTight.generate_matrices_simple(lifter, basis, var_dict=var_dict) - if verbose: - print(f"get matrices ({len(A_learned)}): {time.time() - t1:4.4f}") - return A_learned - - @staticmethod - def generate_Y_simple(lifter, var_subset, factor): - # need at least dim_Y different random setups - dim_Y = lifter.get_dim_X(var_subset) - n_seeds = int(dim_Y * factor) - Y = np.empty((n_seeds, dim_Y)) - for seed in range(n_seeds): - np.random.seed(seed) - - theta = lifter.sample_theta() - x = lifter.get_x(theta=theta, parameters=None, var_subset=var_subset) - X = np.outer(x, x) - Y[seed, :] = get_vec(X) - return Y - - @staticmethod - def generate_Y_sparse(lifter, var_subset, param_subset, factor=FACTOR, ax=None): - from popcor.base_lifters import StateLifter - - assert isinstance(lifter, StateLifter) - assert lifter.HOM in param_subset - - # need at least dim_Y different random setups - dim_Y = lifter.get_dim_Y(var_subset, param_subset) - n_seeds = int(dim_Y * factor) - Y = np.empty((n_seeds, dim_Y)) - for seed in range(n_seeds): - np.random.seed(seed) - - theta = lifter.sample_theta() - parameters = lifter.sample_parameters(theta) - - if seed < 10 and ax is not None: - if np.ndim(lifter.theta) == 1: - ax.scatter(np.arange(len(theta)), theta) - else: - ax.scatter(*theta[:, :2].T) - - x = lifter.get_x(theta=theta, parameters=parameters, var_subset=var_subset) - X = np.outer(x, x) - - # generates [1*x, a1*x, ..., aK*x] - p = lifter.get_p(parameters=parameters, param_subset=param_subset) - Y[seed, :] = np.kron(p, get_vec(X)) - return Y - - @staticmethod - def generate_Y(lifter, factor=FACTOR, ax=None, var_subset=None, param_subset=None): - # need at least dim_Y different random setups - dim_Y = lifter.get_dim_Y(var_subset, param_subset) - n_seeds = int(dim_Y * factor) - Y = np.empty((n_seeds, dim_Y)) - for seed in range(n_seeds): - np.random.seed(seed) - - theta = lifter.sample_theta() - parameters = lifter.sample_parameters(theta) - if seed < 10 and ax is not None: - if np.ndim(lifter.theta) == 1: - ax.scatter(np.arange(len(theta)), theta) - else: - ax.scatter(*theta[:, :2].T) - - x = lifter.get_x(theta=theta, parameters=parameters, var_subset=var_subset) - X = np.outer(x, x) - - # generates [1*x, a1*x, ..., aK*x] - p = lifter.get_p(parameters=parameters, param_subset=param_subset) - assert p[0] == 1 - Y[seed, :] = np.kron(p, get_vec(X)) - return Y - - @staticmethod - def get_basis( - lifter, - Y, - A_known: list = [], - basis_known: np.ndarray | None = None, - method=METHOD, - eps_svd=None, - ): - """Generate basis from lifted state matrix Y. - - :param A_known: if given, will generate basis that is orthogonal to these given constraints. - - :return: basis, S - """ - if eps_svd is None: - eps_svd = AutoTight.EPS_SVD - - # if there is a known list of constraints, add them to the Y so that resulting nullspace is orthogonal to them - if basis_known is not None: - if len(A_known): - print( - "Warning: ignoring given A_known because basis_all is also given." - ) - Y = np.vstack([Y, basis_known.T]) - elif len(A_known): - A = np.vstack( - [lifter.augment_using_zero_padding(get_vec(a)) for a in A_known] - ) - Y = np.vstack([Y, A]) - - basis, info = get_nullspace(Y, method=method, tolerance=eps_svd) - - basis[np.abs(basis) < lifter.EPS_SPARSE] = 0.0 - return basis, info["values"] - - @staticmethod - def generate_matrices_simple( - lifter, - basis, - normalize=NORMALIZE, - sparse=True, - trunc_tol=1e-10, - var_dict=None, - ): - """ - Generate constraint matrices from the rows of the nullspace basis matrix. - """ - try: - n_basis = len(basis) - except Exception: - n_basis = basis.shape[0] - - if isinstance(var_dict, list): - var_dict = lifter.get_var_dict(var_dict) - - from popcor.base_lifters import StateLifter - - assert isinstance(lifter, StateLifter) - - A_list = [] - for i in range(n_basis): - ai = basis[i] - Ai = lifter.get_mat(ai, sparse=sparse, correct=True, var_dict=None) - # Normalize the matrix - if normalize and not sparse: - # Ai /= np.max(np.abs(Ai)) - assert isinstance(Ai, np.ndarray) - Ai /= np.linalg.norm(Ai, p=2) # type: ignore - elif normalize and sparse: - Ai /= splinalg.norm(Ai, ord="fro") - # Sparsify and truncate - if sparse: - Ai.eliminate_zeros() # type: ignore - else: - Ai[np.abs(Ai) < trunc_tol] = 0.0 # type: ignore - # add to list - A_list.append(Ai) - return A_list - - @staticmethod - def generate_matrices( - lifter, - basis, - normalize=NORMALIZE, - sparse=True, - trunc_tol=1e-10, - var_dict=None, - ): - """ - Generate constraint matrices from the rows of the nullspace basis matrix. - """ - from popcor.base_lifters import StateLifter - - assert isinstance(lifter, StateLifter) - - try: - n_basis = len(basis) - except Exception: - n_basis = basis.shape[0] - - if isinstance(var_dict, list): - var_dict = lifter.get_var_dict(var_dict) - - A_list = [] - basis_reduced = [] - for i in range(n_basis): - ai = lifter.get_reduced_a(bi=basis[i], var_subset=var_dict, sparse=True) - basis_reduced.append(ai) - basis_reduced = sp.vstack(basis_reduced) - - if AutoTight.REDUCE_DEPENDENT: - bad_idx = find_dependent_columns(basis_reduced.T, tolerance=1e-6) - else: - bad_idx = [] - - for i in range(basis_reduced.shape[0]): # type: ignore - if i in bad_idx: - continue - ai = basis_reduced[[i], :].toarray().flatten() # type: ignore - Ai = lifter.get_mat(ai, sparse=sparse, correct=True, var_dict=None) - # Normalize the matrix - if normalize and not sparse: - # Ai /= np.max(np.abs(Ai)) - Ai /= np.linalg.norm(Ai, p=2) # type: ignore - elif normalize and sparse: - Ai /= splinalg.norm(Ai, ord="fro") - # Sparsify and truncate - if sparse: - Ai.eliminate_zeros() # type: ignore - else: - Ai[np.abs(Ai) < trunc_tol] = 0.0 # type: ignore - # add to list - A_list.append(Ai) - return A_list - -
-[docs] - @staticmethod - def get_duality_gap(cost_local, cost_sdp): - return (cost_local - cost_sdp) / abs(cost_sdp)
-
- -
- -
-
-
- -
- -
-

© Copyright 2025, POPCOR Contributors.

-
- - Built with Sphinx using a - theme - provided by Read the Docs. - - -
-
-
-
-
- - - - - - \ No newline at end of file diff --git a/docs/build/_modules/popcor/base_lifters/poly_lifters.html b/docs/build/_modules/popcor/base_lifters/poly_lifters.html deleted file mode 100644 index cae85fe..0000000 --- a/docs/build/_modules/popcor/base_lifters/poly_lifters.html +++ /dev/null @@ -1,325 +0,0 @@ - - - - - - - - popcor.base_lifters.poly_lifters — POPCOR 0.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - -
- - -
- -
-
- - - GitHub logo - Go to GitHub source code - -
-
- -

Source code for popcor.base_lifters.poly_lifters

-import numpy as np
-
-from .state_lifter import StateLifter
-
-
-
-[docs] -class PolyLifter(StateLifter): - def __init__(self, degree, param_level="no"): - """Simple univariate polynomial lifter, mostly for testing and pedagogical purposes.""" - self.degree = degree - super().__init__(d=1, param_level=param_level) - - @property - def var_dict(self): - if self.var_dict_ is None: - self.var_dict_ = {self.HOM: 1, "t": 1} - self.var_dict_.update({f"z{i}": 1 for i in range(self.M)}) - return self.var_dict_ - - @property - def M(self): - return self.degree // 2 - 1 - - def sample_theta(self): - return np.random.rand(1) - - def get_error(self, t): - return {"MAE": float(abs(self.theta - t)), "error": float(abs(self.theta - t))} - - def get_x(self, theta=None, parameters=None, var_subset=None): - if theta is None: - theta = self.theta - return np.array([theta**i for i in range(self.degree // 2 + 1)]) - - def get_cost(self, theta, *args, **kwargs) -> float: - Q = self.get_Q() - x = self.get_x(theta).flatten() - return float(x.T @ Q @ x) - - def get_hess(self, *args, **kwargs): - raise NotImplementedError - - def local_solver(self, t0, *args, **kwargs): - from scipy.optimize import minimize - - sol = minimize(self.get_cost, t0) - info = {"success": sol.success} - return sol.x, info, sol.fun - - def plot(self, thetas, label=None): - from popcor.utils.plotting_tools_poly import coordinate_system - - fig, ax = coordinate_system() - ys = [self.get_cost(t) for t in thetas] - ax.plot(thetas, ys, label=label) - ymin = min(-max(ys) / 3, min(ys)) - ax.set_ylim(ymin, max(ys)) - return fig, ax - - def __repr__(self): - return f"poly{self.degree}"
- -
- -
-
-
- -
- -
-

© Copyright 2025, POPCOR Contributors.

-
- - Built with Sphinx using a - theme - provided by Read the Docs. - - -
-
-
-
-
- - - - - - \ No newline at end of file diff --git a/docs/build/_modules/popcor/base_lifters/robust_pose_lifter.html b/docs/build/_modules/popcor/base_lifters/robust_pose_lifter.html deleted file mode 100644 index 4731549..0000000 --- a/docs/build/_modules/popcor/base_lifters/robust_pose_lifter.html +++ /dev/null @@ -1,775 +0,0 @@ - - - - - - - - popcor.base_lifters.robust_pose_lifter — POPCOR 0.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - -
- - -
- -
-
- - - GitHub logo - Go to GitHub source code - -
-
- -

Source code for popcor.base_lifters.robust_pose_lifter

-from abc import ABC, abstractmethod
-from copy import deepcopy
-
-import numpy as np
-from poly_matrix.poly_matrix import PolyMatrix
-from scipy.spatial.transform import Rotation as R
-
-from popcor.utils.geometry import (
-    get_C_r_from_theta,
-    get_noisy_pose,
-    get_pose_errors_from_theta,
-    get_theta_from_C_r,
-)
-
-from .state_lifter import StateLifter
-
-N_TRYS = 10
-
-METHOD = "CG"
-SOLVER_KWARGS = dict(
-    min_gradient_norm=1e-7, max_iterations=10000, min_step_size=1e-8, verbosity=1
-)
-
-# TODO(FD) we need to add a penalty here, otherwise the local solution is not good.
-# However, the penalty results in inequality constraints etc. and that's not easy to deal with.
-PENALTY_RHO = 10
-PENALTY_U = 1e-3
-
-# the cutoff parameter of least squares. If residuals are >= BETA, they are considered outliers.
-BETA = 0.1
-
-
-
-[docs] -class RobustPoseLifter(StateLifter, ABC): - LEVELS = ["no", "xwT", "xxT"] - PARAM_LEVELS = ["no", "p", "ppT"] - LEVEL_NAMES = {"no": "no", "xwT": "x kron w", "xxT": "x kron x"} - MAX_DIST = 10.0 # maximum of norm of t. - - @property - def VARIABLE_LIST(self): - if not self.robust: - return [[self.HOM, "t", "c"]] - else: - base = [self.HOM, "t", "c"] - return [ - base, - base + ["w_0"], - base + ["z_0"], - base + ["w_0", "w_1"], - base + ["w_0", "z_0"], - base + ["z_0", "z_1"], - # base + ["w_0", "w_1", "z_0"], - # base + ["w_0", "w_1", "z_0", "z_1"], - ] - - # Add any parameters here that describe the problem (e.g. number of landmarks etc.) - def __init__( - self, - n_outliers=0, - level="no", - param_level="no", - d=2, - n_landmarks=3, - variable_list=None, - robust=False, - beta=BETA, - ): - """RobustPoseLifter is a general class for point-to-point, point-to-line, and point-to-plane registration problems, - with starndard or robust loss functions. - - The goal is to regress an unknown pose based on extrinsic measurements. - - See :class:`~popcor.examples.WahbaLifter` for point-to-point registration and :class:`~popcor.examples.MonoLifter`) for point-to-line registration. - - Implemented lifting functions are: - - - xwT: :math:`x \\otimes w` - - xxT: :math:`x \\otimes x` - """ - self.beta = beta - self.n_landmarks = n_landmarks - - self.robust = robust - self.level = level - if variable_list == "all": - variable_list = self.get_all_variables() - # elif variable_list is None: - # self.variable_list = self.VARIABLE_LIST - - if not robust: - assert level == "no" - - self.landmarks_ = None # will be initialized later - super().__init__( - level=level, - param_level=param_level, - d=d, - variable_list=variable_list, - n_outliers=n_outliers, - robust=robust, - ) - - def penalty(self, t, rho=PENALTY_RHO, u=PENALTY_U): - import autograd.numpy as anp - - try: - return anp.sum( # type: ignore - [rho * u * anp.log10(1 + anp.exp(hi / u)) for hi in self.h_list(t)] # type: ignore - ) - except RuntimeWarning: - u = PENALTY_U * 0.1 - return anp.sum( # type: ignore - [rho * u * anp.log10(1 + anp.exp(hi / u)) for hi in self.h_list(t)] # type: ignore - ) - - @property - def var_dict(self): - """Return key,size pairs of all variables.""" - var_dict = {self.HOM: 1, "t": self.d, "c": self.d**2} - if not self.robust: - return var_dict - - n = self.d**2 + self.d - if self.level == "xwT": - for i in range(self.n_landmarks): - var_dict.update({f"w_{i}": 1, f"z_{i}": n}) - elif self.level == "xxT": - var_dict.update({f"w_{i}": 1 for i in range(self.n_landmarks)}) - var_dict.update({"z_0": n**2}) - return var_dict - - @property - def param_dict(self): - return self.param_dict_landmarks - - def get_all_variables(self): - all_variables = [self.HOM, "t", "c"] - if self.robust: - if self.level == "xxT": - all_variables += [f"w_{i}" for i in range(self.n_landmarks)] - all_variables += ["z_0"] - elif self.level == "xwT": - for i in range(self.n_landmarks): - all_variables += [f"w_{i}", f"z_{i}"] - variable_list = [all_variables] - return variable_list - - def sample_theta(self): - """Generate a random new feasible point.""" - - # make sure random pose is looking at world centre (where landmarks are) - success = False - i = 0 - while not success: - pc_cw = self.get_random_position() - success = np.all(np.array(self.h_list(pc_cw)) <= 0) - if success: - break - i += 1 - if i >= N_TRYS: - raise ValueError("didn't find valid initialization") - - if self.d == 2: - angle = np.random.uniform(0, 2 * np.pi) - C = R.from_euler("z", angle).as_matrix()[:2, :2] - else: - C = R.random().as_matrix() - theta_x = get_theta_from_C_r(C, pc_cw) - - if self.robust: - outlier_index = np.random.choice( - self.n_landmarks, replace=False, size=self.n_outliers - ) - w = np.ones(self.n_landmarks) - w[outlier_index] = -1 - return np.hstack([theta_x, w]) - else: - return theta_x - - @property - def landmarks(self): - if self.landmarks_ is None: - self.landmarks_ = np.random.normal( - loc=0, scale=1.0, size=(self.n_landmarks, self.d) - ) - return self.landmarks_ - - def sample_parameters(self, theta=None): - if self.parameters_ is None: - return self.sample_parameters_landmarks(self.landmarks) - landmarks = np.random.normal(loc=0, scale=1.0, size=(self.n_landmarks, self.d)) - return self.sample_parameters_landmarks(landmarks) - - def get_x(self, theta=None, parameters=None, var_subset=None) -> np.ndarray: - """Get the lifted vector x given theta and parameters.""" - if theta is None: - theta = self.theta - if parameters is None: - parameters = self.parameters - if var_subset is None: - var_subset = self.var_dict.keys() - - if self.robust: - theta_here = theta[: -self.n_landmarks] - else: - theta_here = theta - - # RT below is R_cw. (c=camera, w=world) - RT, t = get_C_r_from_theta(theta_here, self.d) - R = RT.T - - x_data = [] - for key in var_subset: - if key == self.HOM: - x_data.append(1.0) - elif key == "t": - x_data += list(t) - elif key == "c": - x_data += list(R.flatten("C")) - elif "w" in key: - j = int(key.split("_")[-1]) - w_j = theta[-self.n_landmarks + j] - x_data.append(w_j) - elif (self.level == "xxT") and (key == "z_0"): - x_vec = list(get_theta_from_C_r(R, t)) - x_data += list(np.kron(x_vec, x_vec).flatten()) - elif (self.level == "xwT") and ("z" in key): - j = int(key.split("_")[-1]) - w_j = theta[-self.n_landmarks + j] - x_vec = get_theta_from_C_r(R, t) - x_data += list(x_vec * w_j) - dim_x = self.get_dim_x(var_subset=var_subset) - assert len(x_data) == dim_x - return np.array(x_data) - - def get_outlier_index(self): - if self.robust: - return np.where(self.theta[-self.n_landmarks :] == -1)[0] - else: - return [] - - def get_error(self, theta_hat): - - theta_hat_pose = theta_hat[: self.d + self.d**2] - theta_gt_pose = self.theta[: self.d + self.d**2] - return get_pose_errors_from_theta(theta_hat_pose, theta_gt_pose, self.d) - - def get_vec_around_gt(self, delta: float = 0): - """Sample around ground truth. - :param delta: sample from gt + std(delta) (set to 0 to start from gt.) - """ - if self.robust: - theta = deepcopy(self.theta[: self.d + self.d**2]) - C, r = get_C_r_from_theta(theta, self.d) - theta_noisy = get_noisy_pose(C, r, delta=delta) - theta_w = self.theta[self.d + self.d**2 :] - return np.r_[theta_noisy, theta_w] - else: - C, r = get_C_r_from_theta(self.theta, self.d) - theta_noisy = get_noisy_pose(C, r, delta=delta) - return theta_noisy - - def get_cost(self, theta, y): - if self.robust: - x = theta[: -self.n_landmarks] - w = theta[-self.n_landmarks :] - assert np.all(w**2 == 1.0) - else: - x = theta - - R, t = get_C_r_from_theta(x, self.d) - - cost = 0 - for i in range(self.n_landmarks): - res = self.residual_sq(R, t, self.landmarks[i], y[i]) - if self.robust: - cost += (1 + w[i]) / self.beta**2 * res + 1 - w[i] - else: - cost += res - return 0.5 * cost - - def local_solver( - self, t0, y, verbose=False, method=METHOD, solver_kwargs=SOLVER_KWARGS - ): - import pymanopt - from pymanopt.manifolds import Euclidean, Product, SpecialOrthogonalGroup - - if method == "CG": - from pymanopt.optimizers import ConjugateGradient as Optimizer # fastest - elif method == "SD": - from pymanopt.optimizers import SteepestDescent as Optimizer # slow - elif method == "TR": - from pymanopt.optimizers import TrustRegions as Optimizer # okay - else: - raise ValueError(method) - - if verbose: - solver_kwargs["verbosity"] = 2 - else: - solver_kwargs["verbosity"] = 0 - - # We assume that we know w! If we wanted to solve for w too we would need - # IRLS or similar. Since we just care about getting the global solution - # with a local sovler that's not necessary. - if self.robust: - w = self.theta[-self.n_landmarks :] - - manifold = Product((SpecialOrthogonalGroup(self.d, k=1), Euclidean(self.d))) - - @pymanopt.function.autograd(manifold) - def cost(R, t): - cost = 0 - for i in range(self.n_landmarks): - residual = self.residual_sq(R, t, self.landmarks[i], y[i]) - if self.robust: - cost += (1 + w[i]) / self.beta**2 * residual + 1 - w[i] - else: - cost += residual - return 0.5 * cost + self.penalty(t) - - @pymanopt.function.autograd(manifold) - def euclidean_gradient_unused(R, t): - grad_R = np.zeros(R.shape) - grad_t = np.zeros(t.shape) - for i in range(self.n_landmarks): - Wi = np.eye(self.d) - np.outer(y[i], y[i]) - # residual = (R @ pi + t).T @ Wi @ (R @ pi + t) - term = self.term_in_norm(R, t, self.landmarks[i], y[i]) - if self.robust: - grad_R += ( - 2 - * w[i] - / self.beta**2 - * np.outer(Wi.T @ term, self.landmarks[i]) - ) - grad_t += 2 * w[i] / self.beta**2 * Wi.T @ term - else: - grad_R += np.outer(Wi.T @ term, self.landmarks[i]) - grad_t += Wi.T @ term - return grad_R, grad_t - - euclidean_gradient = None - problem = pymanopt.Problem( - manifold, cost, euclidean_gradient=euclidean_gradient - ) - optimizer = Optimizer(**solver_kwargs) - - R_0, t_0 = get_C_r_from_theta(t0[: self.d + self.d**2], self.d) - res = optimizer.run(problem, initial_point=(R_0, t_0)) - R, t = res.point - - if verbose: - print("local solver sanity check:") - print("final penalty:", self.penalty(t)) - w = self.theta[-self.n_landmarks :] - for i in range(self.n_landmarks): - residual = self.residual_sq(R, t, self.landmarks[i], y[i]) - if w[i] == -1: - if verbose: - print(f"outlier residual: {residual:.4e}") - assert ( - residual > self.beta - ), f"outlier residual too small: {residual} <= {self.beta}" - else: - if verbose: - print(f"inlier residual: {residual:.4e}") - assert ( - residual < self.beta - ), f"inlier residual too large: {residual} > {self.beta}" - if verbose: - print("qcqp cost:", res.cost) - - if self.robust: - theta_hat = np.r_[get_theta_from_C_r(R, t), w] - else: - theta_hat = get_theta_from_C_r(R, t) - - cost_penalized = res.cost - if self.robust: - pen = self.penalty(t) - if abs(res.cost) > 1e-10: - assert abs(pen) / res.cost <= 1e-1, (pen, res.cost) - cost_penalized -= pen - - success = ("min step_size" in res.stopping_criterion) or ( - "min grad norm" in res.stopping_criterion - ) - info = { - "success": success, - "msg": res.stopping_criterion, - } - if success: - return theta_hat, info, cost_penalized - else: - return None, info, cost_penalized - - def test_and_add(self, A_list, Ai, output_poly): - x = self.get_x() - Ai_sparse = Ai.get_matrix(self.var_dict) - err = x.T @ Ai_sparse @ x - assert abs(err) <= 1e-10, err - if output_poly: - A_list.append(Ai) - else: - A_list.append(Ai_sparse) - - def get_A_known(self, var_dict=None, output_poly=False): - A_list = [] - if var_dict is None: - var_dict = self.var_dict - - if "c" in var_dict: - # enforce diagonal == 1 - for i in range(self.d): - Ei = np.zeros((self.d, self.d)) - Ei[i, i] = 1.0 - constraint = np.kron(Ei, np.eye(self.d)) - Ai = PolyMatrix(symmetric=True) - Ai["c", "c"] = constraint - Ai[self.HOM, self.HOM] = -1 - self.test_and_add(A_list, Ai, output_poly=output_poly) - - # enforce off-diagonal == 0 - for i in range(self.d): - for j in range(i + 1, self.d): - Ei = np.zeros((self.d, self.d)) - Ei[i, j] = 1.0 - Ei[j, i] = 1.0 - constraint = np.kron(Ei, np.eye(self.d)) - Ai = PolyMatrix(symmetric=True) - Ai["c", "c"] = constraint - self.test_and_add(A_list, Ai, output_poly=output_poly) - if self.robust: - for key in var_dict: - if "w" in key: - i = key.split("_")[-1] - Ai = PolyMatrix(symmetric=True) - Ai[self.HOM, self.HOM] = -1.0 - Ai[f"w_{i}", f"w_{i}"] = 1.0 - self.test_and_add(A_list, Ai, output_poly=output_poly) - - # below doesn't hold: w_i*w_j = += 1 - # for key_other in [k for k in var_dict if (k.startswith("w") and (k!= key))]: - # Ai = PolyMatrix(symmetric=True) - # Ai[self.HOM, self.HOM] = -1.0 - # Ai[key, key_other] = 0.5 - # self.test_and_add(A_list, Ai, output_poly=output_poly) - - if "z" in key: - if self.level == "xwT": - i = key.split("_")[-1] - """ each z_i equals x * w_i""" - - for j in range(self.d): - Ai = PolyMatrix(symmetric=True) - constraint = np.zeros((self.d + self.d**2)) - constraint[j] = 1.0 - Ai[self.HOM, f"z_{i}"] = constraint[None, :] - constraint = np.zeros((self.d)) - constraint[j] = -1.0 - Ai[f"t", f"w_{i}"] = constraint[:, None] - self.test_and_add(A_list, Ai, output_poly=output_poly) - - for j in range(self.d**2): - Ai = PolyMatrix(symmetric=True) - constraint = np.zeros((self.d + self.d**2)) - constraint[self.d + j] = 1.0 - Ai[self.HOM, f"z_{i}"] = constraint[None, :] - constraint = np.zeros((self.d**2)) - constraint[j] = -1.0 - Ai[f"c", f"w_{i}"] = constraint[:, None] - self.test_and_add(A_list, Ai, output_poly=output_poly) - return A_list - - def get_B_known(self): - """Get inequality constraints of the form x.T @ B @ x <= 0. - By default, we always add ||t|| <= MAX_DIST - """ - B1 = PolyMatrix(symmetric=True) - B1[self.HOM, self.HOM] = -self.MAX_DIST - B1["t", "t"] = np.eye(self.d) - return [B1.get_matrix(self.var_dict)] - - @abstractmethod - def h_list(self, t): - """ - Any inequality constraints to enforce, returned as a list [h_1(t), h_2(t), ...] - We use the convention h_i(t) <= 0. - - By default, we always add |t| <= MAX_DIST - """ - try: - import autograd.numpy as anp - - return [anp.sqrt(anp.sum(t[: self.d] ** 2)) - self.MAX_DIST] # type: ignore - except ModuleNotFoundError: - return [np.sqrt(np.sum(t[: self.d] ** 2)) - self.MAX_DIST] - - @abstractmethod - def get_random_position(self): - """Generate a new random position. Orientation angles will be drawn uniformly from [0, pi].""" - return None - - @abstractmethod - def term_in_norm(self, R, t, pi, ui) -> np.ndarray: - pass - - @abstractmethod - def residual_sq(self, R, t, pi, ui) -> float: - pass
- -
- -
-
-
- -
- -
-

© Copyright 2025, POPCOR Contributors.

-
- - Built with Sphinx using a - theme - provided by Read the Docs. - - -
-
-
-
-
- - - - - - \ No newline at end of file diff --git a/docs/build/_modules/popcor/base_lifters/state_lifter.html b/docs/build/_modules/popcor/base_lifters/state_lifter.html deleted file mode 100644 index 5d5b124..0000000 --- a/docs/build/_modules/popcor/base_lifters/state_lifter.html +++ /dev/null @@ -1,501 +0,0 @@ - - - - - - - - popcor.base_lifters.state_lifter — POPCOR 0.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - -
- - -
- -
-
- - - GitHub logo - Go to GitHub source code - -
-
- -

Source code for popcor.base_lifters.state_lifter

-from abc import abstractmethod
-
-import numpy as np
-
-from ._base_class import BaseClass
-
-
-
-[docs] -class StateLifter(BaseClass): - # sparse hierarchy: define the levels that are implemented - LEVELS = ["no"] - - # used for AutoTemplate - VARIABLE_LIST = [["h"]] - TIGHTNESS = "cost" - - # to be overwritten by inheriting class - NOISE = 1e-2 - - def __init__( - self, - level="no", - param_level="no", - d=2, - variable_list=None, - robust=False, - n_outliers=0, - n_parameters=1, - ): - - # variables that get overwritten upon initialization - self.parameters_ = None - self.theta_ = None - self.var_dict_ = None - self.y_ = None - - self.robust = robust - self.n_outliers = n_outliers - - assert level in self.LEVELS - self.level = level - - if variable_list is not None: - self.variable_list = variable_list - else: - self.variable_list = self.VARIABLE_LIST - - if (param_level != "no") and (n_parameters == 1): - print("Warning: make sure to give the correct n_parameters for the level.") - - super().__init__(d, param_level, n_parameters) - - # MUST OVERWRITE THESE - - @property - def var_dict(self): - raise ValueError("Inheriting class must implement this!") - -
-[docs] - @abstractmethod - def sample_theta(self) -> np.ndarray: - """Randomly sample a feasible state theta. This function must be - implemented by the inheriting class.""" - raise NotImplementedError("need to implement sample_theta")
- - - # MUST OVERWRITE THESE FOR TIGHTNESS CHECKS - -
-[docs] - def get_Q(self, output_poly=False, noise=None): - """Construct the cost matrix Q. - - :param noise: set the noise level, if appropriate. - :param output_poly: if True, return the matrix in PolyMatrix format. - - :returns: the cost matrix as a sparse matrix or PolyMatrix. - """ - raise NotImplementedError( - "Need to impelement get_Q in inheriting class if you want to use it." - )
- - - def get_Q_from_y(self, y): - raise NotImplementedError( - "Need to impelement get_Q_from_y in inheriting class if you want to use it." - ) - -
-[docs] - def get_A_known( - self, - add_redundant: bool = False, - var_dict: dict | None = None, - output_poly: bool = False, - ) -> list: - """Construct the matrices defining the known equality constraints. - - :param add_redundant: if True, add redundant constraints. - :param var_dict: if provided, return only the matrices that involve these variables. - :param output_poly: if True, return the matrices in PolyMatrix format. - """ - return []
- - -
-[docs] - def get_B_known(self) -> list: - """Construct the matrices defining the known inequality constraints.""" - return []
- - - # MUST OVERWRITE THESE FOR ADDING PARAMETERS - -
-[docs] - def sample_parameters(self, theta=None) -> dict: - """Create random set of parameters. By default, there are no parameters - so this function just returns `{self.HOM: 1.0}`.""" - assert ( - self.param_level == "no" - ), "Need to overwrite sample_parameters to use level different than 'no'" - return {self.HOM: 1.0}
- - - @property - def param_dict(self): - assert ( - self.param_level == "no" - ), "Need to overwrite param_dict to use level different than 'no'" - return {self.HOM: 1} - - def get_involved_param_dict(self, var_subset): - """Find which parameters to include, given the current var_subset. Here we implicitly assume - that each parameter is associated with a variable. This is true for parameters that involve - substitution variables.""" - keys = [self.HOM] - for v in var_subset: - index = v.split("_") - if len(index) > 1: - index = int(index[-1]) - key = f"p_{index}" - if key not in keys: - keys.append(key) - return {k: self.param_dict[k] for k in keys if k in self.param_dict} - - # CAN OPTINALLY OVERWRITE THESE FOR BETTER PERFORMANCE - - def get_grad(self, theta, y=None) -> float: - raise NotImplementedError("must define get_grad if you want to use it.") - - def get_hess(self, theta, y=None) -> float: - raise NotImplementedError("must define get_hess if you want to use it.") - -
-[docs] - def get_cost(self, theta, y=None) -> float: - """Compute the cost of the given state theta. This uses the simple form - x.T @ Q @ x. Consider overwriting this for more efficient computations.""" - print( - "Warning: using default get_cost, which may be less efficient than a custom one." - ) - x = self.get_x(theta=theta).flatten("C") - if y is not None: - Q = self.get_Q_from_y(y) - else: - Q = self.get_Q() - return float(x.T @ Q @ x)
- - -
-[docs] - def local_solver(self, t0, y=None, *args, **kwargs): - """ - Default local solver that uses IPOPT to solve the QCQP problem defined by Q and the constraints matrices. - Consider overwriting this for more efficient solvers. - """ - print( - "Warning: using default local_solver, which may be less efficient than a custom one." - ) - print("Ignoring args and kwargs:", args, kwargs) - from cert_tools.sdp_solvers import solve_low_rank_sdp - - if y is not None: - Q = self.get_Q_from_y(y) - else: - Q = self.get_Q() - - B = self.get_B_known() - if len(B) > 0: - raise NotImplementedError( - "Inequality constraints are not currently considered by default solver. Must implement your own." - ) - - Constraints = self.get_A_b_list(A_list=self.get_A_known()) - x0 = self.get_x(theta=t0) - X, info = solve_low_rank_sdp( - Q, Constraints=Constraints, rank=1, verbose=True, x_cand=x0 - ) - # TODO(FD) identify when the solve is not successful. - info["success"] = True - try: - theta = self.get_theta(X[:, 0]) - except AttributeError: - theta = X[1 : 1 + self.d, 0] - return theta, info, info["cost"]
- - - @property - def param_dict_landmarks(self): - assert self.n_parameters is not None - - param_dict = {self.HOM: 1} - if self.param_level == "no": - return param_dict - if self.param_level == "p": - param_dict.update({f"p_{i}": self.d for i in range(self.n_parameters)}) - if self.param_level == "ppT": - # Note that ppT is actually - # [p; vech(ppT)] (linear and quadratic terms) - # TODO(FD): rename ppT to quadratic - param_dict.update( - { - f"p_{i}": self.d + int(self.d * (self.d + 1) / 2) - for i in range(self.n_parameters) - } - ) - return param_dict - -
-[docs] - def get_theta(self, x): - """Inverse of get_x: given lifted vector x, extract elements corresponding to theta.""" - assert np.ndim(x) == 1 or x.shape[1] == 1 - return x.flatten()[1 : 1 + self.d]
-
- -
- -
-
-
- -
- -
-

© Copyright 2025, POPCOR Contributors.

-
- - Built with Sphinx using a - theme - provided by Read the Docs. - - -
-
-
-
-
- - - - - - \ No newline at end of file diff --git a/docs/build/_modules/popcor/base_lifters/stereo_lifter.html b/docs/build/_modules/popcor/base_lifters/stereo_lifter.html deleted file mode 100644 index f7c9cff..0000000 --- a/docs/build/_modules/popcor/base_lifters/stereo_lifter.html +++ /dev/null @@ -1,746 +0,0 @@ - - - - - - - - popcor.base_lifters.stereo_lifter — POPCOR 0.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - -
- - -
- -
-
- - - GitHub logo - Go to GitHub source code - -
-
- -

Source code for popcor.base_lifters.stereo_lifter

-from abc import ABC, abstractmethod
-
-import numpy as np
-import scipy.sparse as sp
-from poly_matrix.poly_matrix import PolyMatrix
-
-from popcor.utils.geometry import (
-    generate_random_pose,
-    get_C_r_from_theta,
-    get_noisy_pose,
-    get_pose_errors_from_theta,
-    get_T,
-    get_theta_from_C_r,
-)
-
-from .state_lifter import StateLifter
-
-NOISE = 1.0  #
-
-
-SOLVER_KWARGS = dict(
-    min_gradient_norm=1e-6, max_iterations=10000, min_step_size=1e-10, verbosity=1
-)
-
-
-
-[docs] -class StereoLifter(StateLifter, ABC): - """StereoLifter is a general lifter class for the stereo localization problem, supporting both 2D and 3D cases. - - See :class:`~popcor.examples.Stereo2DLifter` for 2D and :class:`~popcor.examples.Stereo3DLifter` for 3D. - """ - - NORMALIZE = True - - # Levels that were experimented with for creating a tight relaxation. - LEVELS = [ - "no", - "u@u", # ... - "u2", - "u@r", - "uuT", - "urT", - "uxT", - ] - PARAM_LEVELS = ["no", "p", "ppT"] - LEVEL_NAMES = { - "no": "$\\boldsymbol{u}_n$", - "urT": "$\\boldsymbol{u}\\boldsymbol{t}^\\top_n$", - "uxT": "$\\boldsymbol{u}\\boldsymbol{x}^\\top_n$", - } - - EPS_ERROR = 1e-7 # for constraints test. default is 1e-8 - - def __init__( - self, n_landmarks, d, level="no", param_level="no", variable_list=None - ): - self.y_ = None - self.n_landmarks = n_landmarks - self.landmarks_ = None # will be initialized on first access - super().__init__( - d=d, - level=level, - param_level=param_level, - variable_list=variable_list, - n_parameters=n_landmarks, - ) - - @property - @abstractmethod - def M_matrix(self): - raise NotImplementedError("Inheriting class must initialize M_matrix.") - - def get_all_variables(self): - return [[self.HOM, "x"] + [f"z_{i}" for i in range(self.n_landmarks)]] - - def get_level_dims(self, n=1): - """ - :param n: number of landmarks to consider - """ - return { - "no": 0, - "u@u": n, # ... - "u2": n * self.d, - "u@r": n, - "uuT": n * self.d**2, - "urT": n * self.d**2, - "uxT": n * (self.d * (self.d + self.d**2)), - } - - @property - def landmarks(self): - if self.landmarks_ is None: - landmarks = self.generate_random_landmarks(self.theta) - self.landmarks_ = landmarks - return self.landmarks_ - - def generate_random_landmarks(self, theta=None): - if theta is not None: - C, r = get_C_r_from_theta(theta, self.d) - if self.d == 3: - # sample left u, v coordinates in left image, and compute landmark coordinates from that. - fu, cu, b = self.M_matrix[0, [0, 2, 3]] - fv, cv = self.M_matrix[1, [1, 2]] - u = np.random.uniform(0, cu * 2, self.n_landmarks) - v = np.random.uniform(0, cv * 2, self.n_landmarks) - z = np.random.uniform(0, 5, self.n_landmarks) - x = 1 / fu * (z * (u - cu) - b) - y = 1 / fv * z * (v - cv) - points_cam = np.c_[x, y, z] # N x 3 - else: - # sample left u in left image, and compute landmark coordinates from that. - fu, cu, b = self.M_matrix[0, :] - u = np.random.uniform(0, cu * 2, self.n_landmarks) - y = np.random.uniform(1, 5, self.n_landmarks) - x = 1 / fu * (y * (u - cu) - b) - points_cam = np.c_[x, y] - # transform points from camera to world - return (C.T @ (points_cam.T - r[:, None])).T - else: - return np.random.rand(self.n_landmarks, self.d) - - def sample_parameters(self, theta=None): - landmarks = self.generate_random_landmarks(theta=self.theta) - return self.sample_parameters_landmarks(landmarks) - - def get_parameters(self, var_subset=None): - return self.get_p(param_subset=var_subset) - - @property - def VARIABLE_LIST(self): - return [ - [self.HOM, "x"], - [self.HOM, "z_0"], - [self.HOM, "x", "z_0"], - [self.HOM, "z_0", "z_1"], # should achieve tightness here - ] - - @property - def param_dict(self): - return self.param_dict_landmarks - - @property - def var_dict(self): - level_dim = self.get_level_dims()[self.level] - if self.var_dict_ is None: - self.var_dict_ = {self.HOM: 1} - self.var_dict.update({"x": self.d**2 + self.d}) - self.var_dict.update( - {f"z_{k}": self.d + level_dim for k in range(self.n_landmarks)} - ) - return self.var_dict_ - - def get_x(self, theta=None, parameters=None, var_subset=None): - """ - :param var_subset: list of variables to include in x vector. Set to None for all. - """ - if theta is None: - theta = self.theta - if parameters is None: - parameters = self.parameters - if var_subset is None: - var_subset = self.var_dict.keys() - - # TODO(FD) below is a bit hacky, these two variables should not both be called theta. - # theta is either (x, y, alpha) or (x, y, z, a1, a2, a3) - C, r = get_C_r_from_theta(theta, self.d) - if (self.param_level != "no") and (len(parameters) > 1): - landmarks = parameters - else: - landmarks = { - f"p_{i}": self.landmarks[i, :] for i in range(self.landmarks.shape[0]) - } - - x_data = [] - for key in var_subset: - if key == self.HOM: - x_data.append(1.0) - elif key == "x": - x_data += list(r) + list(C.flatten("C")) # row-wise flatten - elif "z" in key: - j = int(key.split("_")[-1]) - - pj = landmarks[f"p_{j}"][: self.d] # - - zj = C[self.d - 1, :] @ pj + r[self.d - 1] - u = 1 / zj * np.r_[C[: self.d - 1, :] @ pj + r[: self.d - 1], 1] - x_data += list(u) - - if self.level == "no": - continue - elif self.level == "u2": - x_data += list(u**2) - elif self.level == "u@u": - x_data += [u @ u] - elif self.level == "u@r": - x_data += [u @ r] - elif self.level == "uuT": - x_data += list(np.outer(u, u).flatten()) - elif self.level == "urT": - # this works - x_data += list(np.outer(u, r).flatten()) - elif self.level == "uxT": - x = np.r_[r, C.flatten("C")] - x_data += list(np.outer(u, x).flatten()) - dim_x = self.get_dim_x(var_subset=var_subset) - assert len(x_data) == dim_x - return np.array(x_data) - - def get_A_known(self, var_dict=None, output_poly=False): - """ - T = | cx' tx | - | cy' ty | - | cz' tz | - | 0 0 0 1 | - Let pj be the j-th landmark coordinate. - [xj] [cx @ pj + tx] - [yj] = [cy @ pj + ty] - [zj] [cz @ pj + tz] - - Let u be the substitution variable, which has d-1 elements. - Then we want to enforce that: - u_xj = 1/zj * xj -> u_xj * zj = xj -> (cz @ pj + tz) * u_xj - (cx @ pj + tx) = 0 - u_yj = 1/zj * yj -> u_yj * zj = yj -> same as above - u_zj = 1/zj -> u_zj * zj = 1 -> u_zj * (cz @ pj + tz) -1 = 0 - Writing things as homogeneous constraints: - a1) cz @ pj * u_xj + tz*u_xj - cx @ pj - h * tx = 0 - a2) -----1x------- --2x--- -- 3 -- --4--- - a3) cz @ pj * u_zj + tz*u_zj - h*h = 0 - ------1z------- --2z--- - """ - print("not using known stereo templates because they depend on the landmarks.") - return [] - - # x contains: [c1, c2, c3, t] - # z contains: [u_xj, u_yj, u_zj, H.O.T.] - if self.d == 2: - x = self.get_x() - _, tx, tz, cx1, cx2, cz1, cz2, u_xj, u_zj, *_ = x - cz = np.array([cz1, cz2]) - cx = np.array([cx1, cx2]) - pj = self.landmarks[0] - assert abs(cz @ pj * u_xj + tz * u_xj - cx @ pj - tx) < 1e-10 - assert abs(u_zj * cz @ pj + u_zj * tz - 1) < 1e-10 - elif self.d == 3: - x = self.get_x() - # fmt: off - (_, tx, ty, tz, cx1, cx2, cx3, cy1, cy2, cy3, cz1, cz2, cz3, u_x1, u_y1, u_z1, *_) = x - # fmt: on - p1 = self.landmarks[0] - assert ( - abs(u_z1 * (cx1 * p1[0] + cx2 * p1[1] + cx3 * p1[2]) + u_z1 * tx - u_x1) - < 1e-10 - ) - assert ( - abs(u_z1 * (cy1 * p1[0] + cy2 * p1[1] + cy3 * p1[2]) + u_z1 * ty - u_y1) - < 1e-10 - ) - assert ( - abs(u_z1 * (cz1 * p1[0] + cz2 * p1[1] + cz3 * p1[2]) + u_z1 * tz - 1) - < 1e-10 - ) - - if var_dict is None: - var_dict = self.var_dict - - A_known = [] - z_dim = self.get_level_dims()[self.level] - - if "x" not in var_dict or self.HOM not in var_dict: - return A_known - landmarks = [j for j in range(self.n_landmarks) if f"z_{j}" in var_dict] - for j in landmarks: - # one complete constraint has x, z_j and h. - pj = self.landmarks[j] - for i in range(self.d): - A = PolyMatrix() - # -----1i------- --2i--- -- 3 -- --4--- - # a1) cz @ pj * u_xj + tz*u_xj - cx @ pj - h * tx = 0 - # a2) cz @ pj * u_yj + tz*u_yj - cy @ pj - h * ty = 0 - # a3) cz @ pj * u_zj + tz*u_zj - h*h = 0 - # ------1i------- --2i--- - # --- 1i --- - fill_mat = np.zeros((self.d + self.d**2, self.d + z_dim)) - # chooses cz of x, and u_xj, u_yj or u_zj of z - fill_mat[-self.d :, i] = pj - - # --- 2 --- u_zj * tx - # chooses tz of x, and u_ij of z - fill_mat[self.d - 1, i] = 1.0 - A[f"x", f"z_{j}"] = fill_mat - - if i < self.d - 1: # u, (v) - fill_mat = np.zeros((self.d + self.d**2, 1)) - # chooses ci of x - fill_mat[(i + 1) * self.d : (i + 2) * self.d, 0] = -pj - - # chooses ti of x - fill_mat[i, 0] = -1 - A["x", self.HOM] = fill_mat - elif i == self.d - 1: # z - A[self.HOM, self.HOM] = -0 # 2.0 - if output_poly: - A_known.append(A) - else: - A_known.append(A.get_matrix(var_dict)) - self.test_constraints(A_known) - return A_known - - def sample_theta(self): - return generate_random_pose(d=self.d).flatten() - - def simulate_y(self, noise: float | None = None): - if noise is None: - noise = NOISE - - T = get_T(theta=self.theta, d=self.d) - - y_sim = np.zeros((self.n_landmarks, self.M_matrix.shape[0])) - for j in range(self.n_landmarks): - y_gt = T @ np.r_[self.landmarks[j], 1.0] - - # in 2d: y_gt[1] - # in 3d: y_gt[2] - y_gt /= y_gt[self.d - 1] - y_gt = self.M_matrix @ y_gt - y_sim[j, :] = y_gt + np.random.normal(loc=0, scale=noise, size=len(y_gt)) - return y_sim - - def get_Q( - self, - noise: float | None = None, - output_poly: bool = False, - use_cliques: list = [], - ) -> PolyMatrix | sp.csr_matrix | sp.csc_matrix: - if self.y_ is None: - if noise is None: - noise = NOISE - self.y_ = self.simulate_y(noise=noise) - - Q = self.get_Q_from_y(self.y_, output_poly=output_poly, use_cliques=use_cliques) - return Q - - def get_Q_from_y( - self, y, output_poly=False, use_cliques=[] - ) -> PolyMatrix | sp.csr_matrix | sp.csc_matrix: - """ - The least squares problem reads - min_T sum_{n=0}^{N-1} || y - Mtilde@z || - where the first d elements of z correspond to u, and Mtilde contains the first d-1 and last element of M - Mtilde is thus of shape d*2 by dim_z, where dim_z=d+dL (the additional Lasserre variables) - y is of length d*2, corresponding to the measured pixel values in left and right image. - """ - from poly_matrix.least_squares_problem import LeastSquaresProblem - - if len(use_cliques): - js = use_cliques - else: - js = range(y.shape[0]) - - # when using lifting (level=urT), then we have - # in 2d: M_tilde is 2 by 6, with first 2 columns: M[:, [0, 2]] - # in 3d: M_tilde is 4 by 12, with first 3 columns: M[:, [0, 1, 3]] - M_tilde = np.zeros((len(y[0]), self.var_dict["z_0"])) - M_tilde[:, : self.d] = self.M_matrix[:, list(range(self.d - 1)) + [self.d]] - - # in 2d: M[:, 1] - # in 3d: M[:, 2] - m = self.M_matrix[:, self.d - 1] - - ls_problem = LeastSquaresProblem() - for j in js: - ls_problem.add_residual({self.HOM: (y[j] - m), f"z_{j}": -M_tilde}) - - if output_poly: - Q = ls_problem.get_Q() - else: - Q = ls_problem.get_Q().get_matrix(self.var_dict) - if self.NORMALIZE: - Q /= self.n_landmarks * self.d - - # sanity check - x = self.get_x() - - # sanity checks. Below is the best conditioned because we don't have to compute B.T @ B, which - # can contain very large values. - B = ls_problem.get_B_matrix(self.var_dict) - errors = B @ x - cost_test = errors.T @ errors - if self.NORMALIZE: - cost_test /= self.n_landmarks * self.d - - if output_poly: - assert isinstance(Q, PolyMatrix) - cost_Q = x.T @ Q.get_matrix(self.var_dict, output_type="csr") @ x - else: - cost_Q = x.T @ Q @ x - assert abs(cost_test - cost_Q) < 1e-6, (cost_test, cost_Q) - if not len(use_cliques): - cost_raw = self.get_cost(self.theta, y) - assert abs(cost_test - cost_raw) < 1e-6, (cost_test, cost_raw) - assert isinstance(Q, (PolyMatrix, sp.csr_matrix, sp.csc_matrix)), type(Q) - return Q - - def get_theta(self, x): - return x[1 : 1 + self.d + self.d**2] - - def get_vec_around_gt(self, delta: float = 0): - if delta == 0: - return self.theta - - C, r = get_C_r_from_theta(self.theta, self.d) - if self.d == 2: - return super().get_vec_around_gt(delta=delta) - else: - return get_noisy_pose(C, r, delta) - - def get_C_cw(self, theta=None): - C_cw, __ = get_C_r_from_theta(theta, self.d) - return C_cw - - def get_position(self, theta=None): - C_cw, r_wc_c = get_C_r_from_theta(theta, self.d) - return (-C_cw.T @ r_wc_c)[None, :] - - def get_error(self, theta_hat): - return get_pose_errors_from_theta(theta_hat, self.theta, self.d) - - def local_solver_manopt(self, t0, y, W=None, verbose=False, method="CG", **kwargs): - """Alternative solver using Pymanopt. By default, :ref:`StateLifter.local_solver` by is used.""" - import pymanopt - from pymanopt.manifolds import Euclidean, Product, SpecialOrthogonalGroup - - if method == "CG": - from pymanopt.optimizers import ConjugateGradient as Optimizer # fastest - elif method == "SD": - from pymanopt.optimizers import SteepestDescent as Optimizer # slow - elif method == "TR": - from pymanopt.optimizers import TrustRegions as Optimizer # okay - else: - raise ValueError(method) - - solver_kwargs = SOLVER_KWARGS - solver_kwargs.update(kwargs) - - if verbose: - solver_kwargs["verbosity"] = 2 - else: - solver_kwargs["verbosity"] = 1 - - manifold = Product((SpecialOrthogonalGroup(self.d, k=1), Euclidean(self.d))) - - if W is None: - W = np.eye(4) if self.d == 3 else np.eye(2) - - @pymanopt.function.autograd(manifold) - def cost(R, t): - cost = 0 - for i in range(self.n_landmarks): - pi_cam = np.concatenate([R @ self.landmarks[i] + t, [1]], axis=0) # type: ignore - y_gt = self.M_matrix @ (pi_cam / pi_cam[self.d - 1]) - residual = y[i] - y_gt - cost += residual.T @ W @ residual - if self.NORMALIZE: - return cost / (self.n_landmarks * self.d) - return cost - - euclidean_gradient = None # set to None - problem = pymanopt.Problem( - manifold, cost, euclidean_gradient=euclidean_gradient # - ) - optimizer = Optimizer(**solver_kwargs) # type: ignore - - R_0, t_0 = get_C_r_from_theta(t0[: self.d + self.d**2], self.d) - res = optimizer.run(problem, initial_point=(R_0, t_0)) - R, t = res.point - - theta_hat = get_theta_from_C_r(R, t) - return theta_hat, res.stopping_criterion, res.cost - - def __repr__(self): - level_str = str(self.level).replace(".", "-") - return f"stereo{self.d}d_{level_str}_{self.param_level}"
- -
- -
-
-
- -
- -
-

© Copyright 2025, POPCOR Contributors.

-
- - Built with Sphinx using a - theme - provided by Read the Docs. - - -
-
-
-
-
- - - - - - \ No newline at end of file diff --git a/docs/build/_modules/popcor/examples/example_lifter.html b/docs/build/_modules/popcor/examples/example_lifter.html deleted file mode 100644 index ed04821..0000000 --- a/docs/build/_modules/popcor/examples/example_lifter.html +++ /dev/null @@ -1,324 +0,0 @@ - - - - - - - - popcor.examples.example_lifter — POPCOR 0.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - -
- - -
- -
-
- - - GitHub logo - Go to GitHub source code - -
-
- -

Source code for popcor.examples.example_lifter

-import numpy as np
-
-from popcor.base_lifters import StateLifter
-
-
-
-[docs] -class ExampleLifter(StateLifter): - """Example Lifter class. - - This class implements the bare minimum to use AutoTight. - - To create a new Lifter for your problem formulation, create - a copy of this file and fill in the missing parts. - - You can take a look at the :ref:`Examples` for inspiration. - """ - - # choose your homogenization variable here - HOM = "h" - - # chose the "lifting" levels when going up in the sparse Lasserre's hierarchy. - LEVELS = ["no"] - - def __init__(self, param_level="no"): - # you can choose if you want to use parameters. Otherwise remove param_level or set to "no" - super().__init__(param_level=param_level) - - @property - def var_dict(self): - var_dict = {self.HOM: 1} - return var_dict - - @property - def param_dict(self): - param_dict = {self.HOM: 1} - return param_dict - - def get_x(self, theta=None, parameters=None, var_subset=None) -> np.ndarray: - if theta is None: - theta = self.theta - if parameters is None: - parameters = self.parameters - if var_subset is None: - var_subset = self.var_dict - - x_data = [] - for key in var_subset: - if key == self.HOM: - x_data.append(1.0) - # fill in the rest of x according to var_subset. - # elif "x" in key: - # elif "z" in key: - assert len(x_data) == self.get_dim_x(var_subset) - return np.array(x_data) - - def sample_parameters(self, theta: np.ndarray | None = None) -> dict: - pass - - def sample_theta(self) -> np.ndarray: - pass
- -
- -
-
-
- -
- -
-

© Copyright 2025, POPCOR Contributors.

-
- - Built with Sphinx using a - theme - provided by Read the Docs. - - -
-
-
-
-
- - - - - - \ No newline at end of file diff --git a/docs/build/_modules/popcor/examples/mono_lifter.html b/docs/build/_modules/popcor/examples/mono_lifter.html deleted file mode 100644 index 84bccb4..0000000 --- a/docs/build/_modules/popcor/examples/mono_lifter.html +++ /dev/null @@ -1,526 +0,0 @@ - - - - - - - - popcor.examples.mono_lifter — POPCOR 0.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - -
- - -
- -
-
- - - GitHub logo - Go to GitHub source code - -
-
- -

Source code for popcor.examples.mono_lifter

-from copy import deepcopy
-
-# import autograd.numpy as np
-import numpy as np
-from poly_matrix.poly_matrix import PolyMatrix
-
-from popcor.base_lifters import RobustPoseLifter
-from popcor.utils.geometry import get_C_r_from_theta
-from popcor.utils.plotting_tools import plot_frame
-
-FOV = np.pi / 2  # camera field of view
-
-N_TRYS = 10
-
-# TODO(FD) for some reason this is not required as opposed to what is stated in Heng's paper
-# and it currently breaks tightness (might be a bug in my implementation though)
-USE_INEQ = False
-
-NORMALIZE = False
-
-
-
-[docs] -class MonoLifter(RobustPoseLifter): - """This example is treated in more details in `this paper <https://arxiv.org/abs/2308.05783>`_, - under the name "PLR" (point-to-line registration). - """ - - NOISE = 1e-3 # inlier noise - NOISE_OUT = 0.1 # outlier noise - - @property - def TIGHTNESS(self): - return "cost" if self.robust else "rank" - - def h_list(self, t): - """ - We want to inforce that - - norm(t) <= 10 (default) - - tan(a/2)*t3 >= sqrt(t1**2 + t2**2) - as constraints h_j(t)<=0 - """ - default = super().h_list(t) - try: - import autograd.numpy as anp - - return default + [ - anp.sum(t[:-1] ** 2) - anp.tan(FOV / 2) ** 2 * t[-1] ** 2, # type: ignore - -t[-1], - ] - except ModuleNotFoundError: - return default + [ - np.sum(t[:-1] ** 2) - np.tan(FOV / 2) ** 2 * t[-1] ** 2, - -t[-1], - ] - - def get_random_position(self): - pc_cw = np.random.rand(self.d) * 0.1 - # make sure all landmarks are in field of view: - # min_dist = max(np.linalg.norm(self.landmarks[:, :self.d-1], axis=1)) - pc_cw[self.d - 1] = np.random.uniform(1, self.MAX_DIST) - return pc_cw - - def get_B_known(self): - """Get inequality constraints of the form x.T @ B @ x <= 0""" - - # TODO(FD) for some reason this is not required as opposed to what is stated in Heng's paper - # and it currently breaks tightness (might be a bug in my implementation though) - if not USE_INEQ: - return [] - - default = super().get_B_known() - # B2 and B3 enforce that tan(FOV/2)*t3 >= sqrt(t1**2 + t2**2) - # 0 <= - tan**2(FOV/2)*t3**2 + t1**2 + t2**2 - B3 = PolyMatrix(symmetric=True) - constraint = np.zeros((self.d, self.d)) - constraint[range(self.d - 1), range(self.d - 1)] = 1.0 - constraint[self.d - 1, self.d - 1] = -np.tan(FOV / 2) ** 2 - B3["t", "t"] = constraint - - # t3 >= 0 - constraint = np.zeros(self.d) - constraint[self.d - 1] = -1 - B2 = PolyMatrix(symmetric=True) - B2[self.HOM, "t"] = constraint[None, :] - return default + [ - B2.get_matrix(self.var_dict), - B3.get_matrix(self.var_dict), - ] - - def term_in_norm(self, R, t, pi, ui): - return R @ pi + t - - def residual_sq(self, R, t, pi, ui): - W = np.eye(self.d) - np.outer(ui, ui) - term = self.term_in_norm(R, t, pi, ui) - if NORMALIZE: - return term.T @ W @ term / (self.n_landmarks * self.d) ** 2 - else: - return term.T @ W @ term - - def plot_setup(self): - if self.d != 2: - print("Plotting currently only supported for d=2") - return - import matplotlib.pylab as plt - - assert self.landmarks is not None - - fig, ax = plt.subplots() - - # R, t = get_C_r_from_theta(self.theta, self.d) - # ax.scatter(*t, color="k", label="pose") - - ax.axis("equal") - t_wc_w, C_cw = plot_frame(ax, self.theta, label="pose", color="gray", d=2) - - if self.y_ is not None: - for i in range(self.y_.shape[0]): - ax.scatter( - self.landmarks[i][0], - self.landmarks[i][1], - color=f"C{i}", - label="landmarks", - ) - - # this vector is in camera coordinates - ui_c = self.y_[i] - assert abs(np.linalg.norm(ui_c) - 1.0) < 1e-10 - - ax.plot( - [t_wc_w[0], self.landmarks[i][0]], - [t_wc_w[1], self.landmarks[i][1]], - color=f"C{i}", - ls=":", - ) - if C_cw is not None: - ui_w = C_cw.T @ ui_c - ax.plot( - [t_wc_w[0], t_wc_w[0] + ui_w[0]], - [t_wc_w[1], t_wc_w[1] + ui_w[1]], - color=f"r" if i < self.n_outliers else "g", - ) - - def get_Q( - self, - noise: float | None = None, - output_poly: bool = False, - use_cliques: list = [], - ): - assert self.landmarks is not None, "landmarks must be set before calling get_Q" - if noise is None: - noise = self.NOISE - - if self.y_ is None: - self.y_ = np.zeros((self.n_landmarks, self.d)) - theta = self.theta[: self.d + self.d**2] - outlier_index = self.get_outlier_index() - - R, t = get_C_r_from_theta(theta, self.d) - for i in range(self.n_landmarks): - pi = self.landmarks[i] - # ui = deepcopy(pi) #R @ pi + t - ui = R @ pi + t - ui /= ui[self.d - 1] - - # random unit vector inside the FOV cone - # tan(a/2)*t3 >= sqrt(t1**2 + t2**2) or t3 >= 1 - if np.tan(FOV / 2) * ui[self.d - 1] < np.sqrt( - np.sum(ui[: self.d - 1] ** 2) - ): - print("warning: inlier not in FOV!!") - - if i in outlier_index: - # randomly sample a vector - success = False - for _ in range(N_TRYS): - ui_test = deepcopy(ui) - ui_test[: self.d - 1] += np.random.normal( - scale=self.NOISE_OUT, loc=0, size=self.d - 1 - ) - if np.tan(FOV / 2) * ui_test[self.d - 1] >= np.sqrt( - np.sum(ui_test[: self.d - 1] ** 2) - ): - success = True - ui = ui_test - break - if not success: - raise ValueError("did not find valid outlier ui") - else: - ui[: self.d - 1] += np.random.normal( - scale=noise, loc=0, size=self.d - 1 - ) - assert ui[self.d - 1] == 1.0 - ui /= np.linalg.norm(ui) - self.y_[i] = ui - - Q = self.get_Q_from_y(self.y_, output_poly=output_poly, use_cliques=use_cliques) - return Q - - def get_Q_from_y(self, y, output_poly: bool = False, use_cliques: list = []): - """ - every cost term can be written as - (1 + wi)/b**2 [l x'] Qi [l; x] / norm + 1 - wi - = [l x'] Qi/b**2 [l; x] /norm + wi * [l x']Qi/b**2[l;x] / norm + 1 - wi - - cost term: - (Rpi + t) (I - uiui') (Rpi + t) - """ - assert ( - self.landmarks is not None - ), "landmarks must be set before calling get_Q_from_y" - - Q = PolyMatrix(symmetric=True) - if NORMALIZE: - norm = (self.n_landmarks * self.d) ** 2 - - if len(use_cliques): - js = use_cliques - else: - js = list(range(self.n_landmarks)) - - for i in js: - pi = self.landmarks[i] - ui = y[i] - Pi = np.c_[np.eye(self.d), np.kron(pi, np.eye(self.d))] # I, pi x I - Wi = np.eye(self.d) - np.outer(ui, ui) - Qi = Pi.T @ Wi @ Pi # "t,t, t,c, c,c: Wi, Wi @ kron, kron.T @ Wi @ kron - if NORMALIZE: - Qi /= norm - - if self.robust: - Qi /= self.beta**2 - # last two terms, should not be affected by norm - Q[self.HOM, self.HOM] += 1 - Q[self.HOM, f"w_{i}"] += -0.5 - if self.level == "xwT": - # Q[f"z_{i}", "x"] += 0.5 * Qi - Q[f"z_{i}", "t"] += 0.5 * Qi[:, : self.d] - Q[f"z_{i}", "c"] += 0.5 * Qi[:, self.d :] - # Q["x", "x"] += Qi - Q["t", "t"] += Qi[: self.d, : self.d] - Q["t", "c"] += Qi[: self.d, self.d :] - Q["c", "c"] += Qi[self.d :, self.d :] - elif self.level == "xxT": - Q["z_0", f"w_{i}"] += 0.5 * Qi.flatten()[:, None] - # Q["x", "x"] += Qi - Q["t", "t"] += Qi[: self.d, : self.d] - Q["t", "c"] += Qi[: self.d, self.d :] - Q["c", "c"] += Qi[self.d :, self.d :] - else: - # Q["x", "x"] += Qi - Q["t", "t"] += Qi[: self.d, : self.d] - Q["t", "c"] += Qi[: self.d, self.d :] - Q["c", "c"] += Qi[self.d :, self.d :] - if output_poly: - return 0.5 * Q - Q_sparse = 0.5 * Q.get_matrix(variables=self.var_dict) - return Q_sparse - - def __repr__(self): - appendix = "_robust" if self.robust else "" - return f"mono_{self.d}d_{self.level}_{self.param_level}{appendix}"
- -
- -
-
-
- -
- -
-

© Copyright 2025, POPCOR Contributors.

-
- - Built with Sphinx using a - theme - provided by Read the Docs. - - -
-
-
-
-
- - - - - - \ No newline at end of file diff --git a/docs/build/_modules/popcor/examples/poly4_lifter.html b/docs/build/_modules/popcor/examples/poly4_lifter.html deleted file mode 100644 index 73909c2..0000000 --- a/docs/build/_modules/popcor/examples/poly4_lifter.html +++ /dev/null @@ -1,361 +0,0 @@ - - - - - - - - popcor.examples.poly4_lifter — POPCOR 0.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - -
- - -
- -
-
- - - GitHub logo - Go to GitHub source code - -
-
- -

Source code for popcor.examples.poly4_lifter

-import numpy as np
-
-from popcor.base_lifters import PolyLifter
-
-
-
-[docs] -class Poly4Lifter(PolyLifter): - """Fourth-degree polynomial examples. - - Two types are provided: - - - poly_type="A": one global minimum, one local minimum - - poly_type="B": two global minima - """ - - @property - def VARIABLE_LIST(self): - return [[self.HOM, "t", "z0"]] - - def __init__(self, poly_type="A"): - # actual minimum - assert poly_type in ["A", "B"] - self.poly_type = poly_type - super().__init__(degree=4) - - def get_Q(self, *args, **kwargs): - if self.poly_type == "A": - # fmt: off - # noqa - Q = np.r_[ - np.c_[2, 1, 0], - np.c_[1, -1 / 2, -1 / 3], - np.c_[0, -1 / 3, 1 / 4] - ] - # fmt: on - elif self.poly_type == "B": - # below is constructed such that f'(t) = (t-1)*(t-2)*(t-3) - # fmt: off - # noqa - Q = np.r_[ - np.c_[3, -3, 0], - np.c_[-3, 11 / 2, -1], - np.c_[0, -1, 1 / 4] - ] - # fmt: on - return Q - - def get_A_known(self, output_poly=False, add_redundant=False): - from poly_matrix import PolyMatrix - - if add_redundant: - print("No redundant constraitns for 4-degree polynomial.") - - # z_0 = t^2 - A_1 = PolyMatrix(symmetric=True) - A_1[self.HOM, "z0"] = -1 - A_1["t", "t"] = 2 - if output_poly: - return [A_1] - else: - return [A_1.get_matrix(self.var_dict)] - - def generate_random_setup(self): - self.theta_ = np.array([-1]) - - def get_D(self, that): - """Not currently used.""" - D = np.array( - [ - [1.0, 0.0, 0.0], - [that, 1.0, 0.0], - [that**2, 2 * that, 1.0], - ] - ) - return D
- - - -if __name__ == "__main__": - import os - - import matplotlib.pylab as plt - - # Get the directory two levels up from this file - base_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "..")) - - thetas = np.linspace(-2, 3, 100) - poly_lifter = Poly4Lifter(poly_type="A") - fig, ax = poly_lifter.plot(thetas) - fig.savefig(os.path.join(base_dir, "docs", "figures", "poly4_lifter_A.png")) - - thetas = np.linspace(0, 4, 100) - poly_lifter = Poly4Lifter(poly_type="B") - fig, ax = poly_lifter.plot(thetas) - fig.savefig(os.path.join(base_dir, "docs", "figures", "poly4_lifter_B.png")) - - plt.show(block=False) - print("done") -
- -
-
-
- -
- -
-

© Copyright 2025, POPCOR Contributors.

-
- - Built with Sphinx using a - theme - provided by Read the Docs. - - -
-
-
-
-
- - - - - - \ No newline at end of file diff --git a/docs/build/_modules/popcor/examples/poly6_lifter.html b/docs/build/_modules/popcor/examples/poly6_lifter.html deleted file mode 100644 index 64d5845..0000000 --- a/docs/build/_modules/popcor/examples/poly6_lifter.html +++ /dev/null @@ -1,372 +0,0 @@ - - - - - - - - popcor.examples.poly6_lifter — POPCOR 0.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - -
- - -
- -
-
- - - GitHub logo - Go to GitHub source code - -
-
- -

Source code for popcor.examples.poly6_lifter

-import numpy as np
-
-from popcor.base_lifters import PolyLifter
-
-
-
-[docs] -class Poly6Lifter(PolyLifter): - """Sixth-degree polynomial examples. - - Two types are provided: - - - poly_type="A": one global minimum, two local minima, 2 local maxima - - poly_type="B": one global minimum, one local minimum, one local maximum - """ - - @property - def VARIABLE_LIST(self): - return [[self.HOM, "t", "z0", "z1"]] - - def __init__(self, poly_type="A"): - assert poly_type in ["A", "B"] - self.poly_type = poly_type - super().__init__(degree=6) - - def get_Q(self, *args, **kwargs): - if self.poly_type == "A": - return 0.1 * np.array( - [ - [25, 12, 0, 0], - [12, -13, -2.5, 0], - [0, -2.5, 6.25, -0.9], - [0, 0, -0.9, 1 / 6], - ] - ) - elif self.poly_type == "B": - return np.array( - [ - [5.0000, 1.3167, -1.4481, 0], - [1.3167, -1.4481, 0, 0.2685], - [-1.4481, 0, 0.2685, -0.0667], - [0, 0.2685, -0.0667, 0.0389], - ] - ) - - def get_A_known(self, output_poly=False, add_redundant=True): - from poly_matrix import PolyMatrix - - A_list = [] - - # z_0 = t^2 - A_1 = PolyMatrix(symmetric=True) - A_1[self.HOM, "z0"] = -1 - A_1["t", "t"] = 2 - A_list.append(A_1) - - # z_1 = t^3 = t z_0 - A_2 = PolyMatrix(symmetric=True) - A_2[self.HOM, "z1"] = -1 - A_2["t", "z0"] = 1 - A_list.append(A_2) - - # t^4 = z_1 t = z_0 z_0 - if add_redundant: - B_0 = PolyMatrix(symmetric=True) - B_0["z0", "z0"] = 2 - B_0["t", "z1"] = -1 - A_list.append(B_0) - - if output_poly: - return A_list - else: - return [A_i.get_matrix(self.var_dict) for A_i in A_list] - - def get_D(self, that): - D = np.array( - [ - [1.0, 0.0, 0.0, 0.0], - [that, 1.0, 0.0, 0.0], - [that**2, 2 * that, 1.0, 0.0], - [that**3, 3 * that**2, 3 * that, 1.0], - ] - ) - return D - - def generate_random_setup(self): - self.theta_ = np.array([-1])
- - - -if __name__ == "__main__": - import os - - import matplotlib.pylab as plt - - # Get the directory two levels up from this file - base_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "..")) - - thetas = np.linspace(-1.5, 4.5, 100) - poly_lifter = Poly6Lifter(poly_type="A") - fig, ax = poly_lifter.plot(thetas) - fig.savefig(os.path.join(base_dir, "docs", "figures", "poly6_lifter_A.png")) - - thetas = np.linspace(-3, 3, 100) - poly_lifter = Poly6Lifter(poly_type="B") - fig, ax = poly_lifter.plot(thetas) - fig.savefig(os.path.join(base_dir, "docs", "figures", "poly6_lifter_B.png")) - - plt.show(block=False) - print("done") -
- -
-
-
- -
- -
-

© Copyright 2025, POPCOR Contributors.

-
- - Built with Sphinx using a - theme - provided by Read the Docs. - - -
-
-
-
-
- - - - - - \ No newline at end of file diff --git a/docs/build/_modules/popcor/examples/range_only_lifters.html b/docs/build/_modules/popcor/examples/range_only_lifters.html deleted file mode 100644 index 73f5196..0000000 --- a/docs/build/_modules/popcor/examples/range_only_lifters.html +++ /dev/null @@ -1,763 +0,0 @@ - - - - - - - - popcor.examples.range_only_lifters — POPCOR 0.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - -
- - -
- -
-
- - - GitHub logo - Go to GitHub source code - -
-
- -

Source code for popcor.examples.range_only_lifters

-import matplotlib.pylab as plt
-import numpy as np
-import scipy.sparse as sp
-from poly_matrix.least_squares_problem import LeastSquaresProblem
-from scipy.optimize import minimize
-
-from popcor.base_lifters import StateLifter
-from popcor.utils.common import diag_indices, upper_triangular
-
-plt.ion()
-
-NOISE = 1e-2  # std deviation of distance noise
-
-METHOD = "BFGS"
-NORMALIZE = True
-
-# TODO(FD): parameters below are not all equivalent.
-SOLVER_KWARGS = {
-    "BFGS": dict(gtol=1e-6, xrtol=1e-10),  # relative step size
-    "Nelder-Mead": dict(xatol=1e-10),  # absolute step size
-    "Powell": dict(ftol=1e-6, xtol=1e-10),
-    "TNC": dict(gtol=1e-6, xtol=1e-10),
-}
-
-
-
-[docs] -class RangeOnlyLocLifter(StateLifter): - """Range-only localization in 2D or 3D. - - We minimize the cost function - - .. math:: f(\\theta) = \\sum_{n=0}^{N-1} \\sum_{k=0}^{K-1} w_{nk} (d_{nk}^2 - ||p_n - a_k||^2)^2 - - where - - - :math:`w_{nk}` is the weight for the nth point and kth landmark (currently assumed binary to mark missing edges). - - :math:`\\theta` is the flattened vector of positions :math:`p_n`. - - :math:`d_{nk}` is the distance measurement from point n to landmark k. - - :math:`a_k` is the kth landmark. - - Note that in the current implementation, there is no regularization term so the problem could be split into individual points. - - We experiment with two different substitutions to turn the cost function into aquadratic form: - - - level "no" uses substitution :math:`z_i=||p_i||^2=x_i^2 + y_i^2` (or equivalent 3D version). - - level "quad" uses substitution :math:`y_i=[x_i^2, x_iy_i, y_i^2]` (or equivalent 3D version). - - This example is treated in more details in `this paper <https://arxiv.org/abs/2308.05783>`_. - """ - - TIGHTNESS = "rank" - LEVELS = ["no", "quad"] - LEVEL_NAMES = { - "no": "$z_n$", - "quad": "$\\boldsymbol{y}_n$", - } - - def get_vec_around_gt(self, delta: float = 0): - """Sample around ground truth. - :param delta: sample from gt + std(delta) (set to 0 to start from gt.) - """ - assert self.landmarks is not None, "landmarks must be set before sampling" - - if delta == 0: - return self.theta - else: - bbox_max = np.max(self.landmarks, axis=0) * 2 - bbox_min = np.min(self.landmarks, axis=0) * 2 - pos = ( - np.random.rand(self.n_positions, self.d) - * (bbox_max - bbox_min)[None, :] - + bbox_min[None, :] - ) - return pos.flatten() - - def __init__( - self, - n_positions, - n_landmarks, - d, - W=None, - level="no", - variable_list=None, - param_level="no", - ): - self.n_positions = n_positions - self.n_landmarks = n_landmarks - self.landmarks_ = None # will be set later - - if W is not None: - assert W.shape == (n_landmarks, n_positions) - self.W = W - else: - self.W = np.ones((n_positions, n_landmarks)) - self.y_ = None - - if variable_list == "all": - variable_list = self.get_all_variables() - super().__init__( - level=level, d=d, variable_list=variable_list, param_level=param_level - ) - - @property - def landmarks(self): - landmarks = np.random.rand(self.n_landmarks, self.d) - if self.landmarks_ is None: - self.landmarks_ = landmarks - return self.landmarks_ - - @property - def VARIABLE_LIST(self): - return [ - [self.HOM, "x_0"], - [self.HOM, "x_0", "z_0"], - [self.HOM, "x_0", "z_0", "z_1"], - [self.HOM, "x_0", "x_1", "z_0", "z_1"], - ] - - def get_all_variables(self): - vars = [self.HOM] - vars += [f"x_{i}" for i in range(self.n_positions)] - vars += [f"z_{i}" for i in range(self.n_positions)] - return [vars] - - def sample_parameters(self, theta=None): - landmarks = np.random.rand(self.n_landmarks, self.d) - return self.sample_parameters_landmarks(landmarks) - - def sample_theta(self): - return np.random.rand(self.n_positions, self.d).flatten() - - def get_A_known(self, var_dict=None, output_poly=False): - from poly_matrix.poly_matrix import PolyMatrix - - if var_dict is None: - var_dict = self.var_dict - positions = self.get_variable_indices(var_dict) - - A_list = [] - for n in positions: - if self.level == "no": - A = PolyMatrix(symmetric=True) - A[f"x_{n}", f"x_{n}"] = np.eye(self.d) - A[self.HOM, f"z_{n}"] = -0.5 - if output_poly: - A_list.append(A) - else: - A_list.append(A.get_matrix(self.var_dict)) - - elif self.level == "quad": - count = 0 - for i in range(self.d): - for j in range(i, self.d): - A = PolyMatrix(symmetric=True) - mat_x = np.zeros((self.d, self.d)) - mat_z = np.zeros((1, self.size_z)) - if i == j: - mat_x[i, i] = 1.0 - else: - mat_x[i, j] = 0.5 - mat_x[j, i] = 0.5 - mat_z[0, count] = -0.5 - A[f"x_{n}", f"x_{n}"] = mat_x - A[self.HOM, f"z_{n}"] = mat_z - count += 1 - if output_poly: - A_list.append(A) - else: - A_list.append(A.get_matrix(self.var_dict)) - return A_list - - def get_x(self, theta=None, parameters=None, var_subset=None): - if var_subset is None: - var_subset = self.var_dict - if theta is None: - theta = self.theta - if parameters is None: - parameters = self.parameters - - positions = theta.reshape(self.n_positions, -1) - - x_data = [] - for key in var_subset: - if key == self.HOM: - x_data.append(1.0) - elif "x" in key: - n = int(key.split("_")[-1]) - x_data += list(positions[n]) - elif "z" in key: - n = int(key.split("_")[-1]) - if self.level == "no": - x_data.append(np.linalg.norm(positions[n]) ** 2) - elif self.level == "quad": - x_data += list(upper_triangular(positions[n])) - assert len(x_data) == self.get_dim_x(var_subset) - return np.array(x_data) - - def get_J_lifting(self, t): - pos = t.reshape((-1, self.d)) - ii = [] - jj = [] - data = [] - - idx = 0 - for n in range(self.n_positions): - if self.level == "no": - ii += [n] * self.d - jj += list(range(n * self.d, (n + 1) * self.d)) - data += list(2 * pos[n]) - elif self.level == "quad": - # it seemed easier to do this manually that programtically - if self.d == 3: - x, y, z = pos[n] - jj += [n * self.d + j for j in [0, 0, 1, 0, 2, 1, 1, 2, 2]] - data += [2 * x, y, x, z, x, 2 * y, z, y, 2 * z] - ii += [idx + i for i in [0, 1, 1, 2, 2, 3, 4, 4, 5]] - elif self.d == 2: - x, y = pos[n] - jj += [n * self.d + j for j in [0, 0, 1, 1]] - data += [2 * x, y, x, 2 * y] - ii += [idx + i for i in [0, 1, 1, 2]] - idx += self.size_z - J_lifting = sp.csr_array( - (data, (ii, jj)), - shape=(self.M, self.N), - ) - return J_lifting - - def get_hess_lifting(self, t): - """return list of the hessians of the M lifting functions.""" - hessians = [] - for n in range(self.n_positions): - idx = range(n * self.d, (n + 1) * self.d) - if self.level == "no": - hessian = sp.csr_array( - ([2] * self.d, (idx, idx)), - shape=(self.N, self.N), - ) - hessians.append(hessian) - elif self.level == "quad": - for h in self.fixed_hessian_list: - ii, jj = np.meshgrid(idx, idx) - hessian = sp.csr_array( - (h.flatten(), (ii.flatten(), jj.flatten())), - shape=(self.N, self.N), - ) - hessians.append(hessian) - return hessians - - @property - def fixed_hessian_list(self): - if self.d == 2: - return [ - np.array([[2, 0], [0, 0]]), - np.array([[0, 1], [1, 0]]), - np.array([[0, 0], [0, 2]]), - ] - elif self.d == 3: - return [ - np.array([[2, 0, 0], [0, 0, 0], [0, 0, 0]]), - np.array([[0, 1, 0], [1, 0, 0], [0, 0, 0]]), - np.array([[0, 0, 1], [0, 0, 0], [1, 0, 0]]), - np.array([[0, 0, 0], [0, 2, 0], [0, 0, 0]]), - np.array([[0, 0, 0], [0, 0, 1], [0, 1, 0]]), - np.array([[0, 0, 0], [0, 0, 0], [0, 0, 2]]), - ] - else: - raise ValueError(f"Unsupported dimension {self.d} for fixed hessians.") - - def get_residuals(self, t, y): - positions = t.reshape((-1, self.d)) - y_current = ( - np.linalg.norm(self.landmarks[None, :, :] - positions[:, None, :], axis=2) - ** 2 - ) - return self.W * (y - y_current) - - def get_cost(self, t, y, sub_idx=None): - """ - get cost for given positions, landmarks and noise. - - :param t: flattened positions of length Nd - :param y: N x K distance measurements - """ - residuals = self.get_residuals(t, y) - if sub_idx is None: - cost = np.sum(residuals**2) - else: - cost = np.sum(residuals[sub_idx] ** 2) - if NORMALIZE: - return cost / np.sum(self.W > 0) - return cost - - def get_grad(self, t, y, sub_idx=None): - """get gradient""" - J = self.get_J(t, y) - x = self.get_x(t) - Q = self.get_Q_from_y(y) - if sub_idx is None: - return 2 * J.T @ Q @ x - else: - sub_idx_x = self.get_sub_idx_x(sub_idx) - return 2 * J.T[:, sub_idx_x] @ Q[sub_idx_x, :][:, sub_idx_x] @ x[sub_idx_x] - - def get_J(self, t, y): - J = sp.csr_array( - (np.ones(self.N), (range(1, self.N + 1), range(self.N))), - shape=(self.N + 1, self.N), - ) - J_lift = self.get_J_lifting(t) - J = sp.vstack([J, J_lift]) - return J - - def get_hess(self, t, y): - """get Hessian""" - x = self.get_x(t) - Q = self.get_Q_from_y(y) - J = self.get_J(t, y) - hess = 2 * J.T @ Q @ J - - hessians = self.get_hess_lifting(t) - B = self.ls_problem.get_B_matrix(self.var_dict) - residuals = B @ x - for m, h in enumerate(hessians): - bm_tilde = B[:, -self.M + m] - factor = float(bm_tilde.T @ residuals) - hess += 2 * factor * h - return hess - - def get_Q_from_y(self, y): - import itertools - - self.ls_problem = LeastSquaresProblem() - - if self.level == "quad": - diag_idx = diag_indices(self.d) - - for n, k in itertools.product(range(self.n_positions), range(self.n_landmarks)): - if self.W[n, k] > 0: - ak = self.landmarks[k] - if self.level == "no": - self.ls_problem.add_residual( - { - self.HOM: y[n, k] - np.linalg.norm(ak) ** 2, - f"x_{n}": 2 * ak.reshape((1, -1)), - f"z_{n}": -1, - } - ) - elif self.level == "quad": - mat = np.zeros((1, self.size_z)) - mat[0, diag_idx] = -1 - res_dict = { - self.HOM: y[n, k] - np.linalg.norm(ak) ** 2, - f"x_{n}": 2 * ak.reshape((1, -1)), - f"z_{n}": mat, - } - self.ls_problem.add_residual(res_dict) - Q = self.ls_problem.get_Q().get_matrix(self.var_dict) - if NORMALIZE: - return Q / np.sum(self.W > 0) - return Q - - def simulate_y(self, noise: float | None = None): - assert self.landmarks is not None - # N x K matrix - if noise is None: - noise = NOISE - positions = self.theta.reshape(self.n_positions, -1) - y_gt = ( - np.linalg.norm(self.landmarks[None, :, :] - positions[:, None, :], axis=2) - ** 2 - ) - return y_gt + np.random.normal(loc=0, scale=noise, size=y_gt.shape) - - def get_Q(self, noise: float | None = None) -> tuple: - if self.y_ is None: - self.y_ = self.simulate_y(noise=noise) - Q = self.get_Q_from_y(self.y_) - - # DEBUGGING - x = self.get_x() - cost1 = x.T @ Q @ x - cost3 = self.get_cost(self.theta, self.y_) - assert abs(cost1 - cost3) < 1e-10 - return Q - - def get_D(self, that): - D = np.eye(1 + self.n_positions * self.d + self.size_z) - x = self.get_x(theta=that) - J = self.get_J_lifting(t=that) - - D = sp.lil_array((len(x), len(x))) - D[range(len(x)), range(len(x))] = 1.0 - D[:, 0] = x - D[-J.shape[0] :, 1 : 1 + J.shape[1]] = J # type: ignore - return D.tocsc() - - def get_sub_idx_x(self, sub_idx, add_z=True): - sub_idx_x = [0] - for idx in sub_idx: - sub_idx_x += [1 + idx * self.d + d for d in range(self.d)] - if not add_z: - return sub_idx_x - for idx in sub_idx: - sub_idx_x += [ - 1 + self.n_positions * self.d + idx * self.size_z + d - for d in range(self.size_z) - ] - return sub_idx_x - - def get_theta(self, x): - return x[1 : self.d + 1] - - def get_position(self, theta=None): - if theta is not None: - return theta.reshape(self.n_positions, self.d) - - def get_error(self, that): - err = np.sqrt(np.mean((self.theta - that) ** 2)) - return {"total error": err, "error": err} - - def local_solver( - self, - t_init, - y, - verbose=False, - method="BFGS", - solver_kwargs=SOLVER_KWARGS, - ): - """ - :param t_init: (positions, landmarks) tuple - """ - - # TODO(FD): split problem into individual points. - options = solver_kwargs[method] - options["disp"] = verbose - sol = minimize( - self.get_cost, - x0=t_init, - args=y, - jac=self.get_grad, - # hess=self.get_hess, not used by any solvers. - method=method, - options=options, - ) - - info = {} - info["success"] = sol.success - info["msg"] = sol.message + f"(# iterations: {sol.nit})" - if sol.success: - that = sol.x - rel_error = self.get_cost(that, y) - self.get_cost(sol.x, y) - assert abs(rel_error) < 1e-10, rel_error - residuals = self.get_residuals(that, y) - cost = sol.fun - info["max res"] = np.max(np.abs(residuals)) - hess = self.get_hess(that, y) - eigs = np.linalg.eigvalsh(hess.toarray()) - info["cond Hess"] = eigs[-1] / eigs[0] - else: - that = cost = None - info["max res"] = None - info["cond Hess"] = None - return that, info, cost - - @property - def var_dict(self): - var_dict = {self.HOM: 1} - var_dict.update({f"x_{n}": self.d for n in range(self.n_positions)}) - var_dict.update({f"z_{n}": self.size_z for n in range(self.n_positions)}) - return var_dict - - @property - def param_dict(self): - return self.param_dict_landmarks - - @property - def size_z(self): - if self.level == "no": - return 1 - elif self.level == "quad": - return int(self.d * (self.d + 1) / 2) - else: - raise ValueError(f"Unknown level {self.level}") - - @property - def N(self): - return self.n_positions * self.d - - @property - def M(self): - return self.n_positions * self.size_z - - def __repr__(self): - return f"rangeonlyloc{self.d}d_{self.level}"
- - - -if __name__ == "__main__": - lifter = RangeOnlyLocLifter(n_positions=3, n_landmarks=4, d=2) -
- -
-
-
- -
- -
-

© Copyright 2025, POPCOR Contributors.

-
- - Built with Sphinx using a - theme - provided by Read the Docs. - - -
-
-
-
-
- - - - - - \ No newline at end of file diff --git a/docs/build/_modules/popcor/examples/rotation_lifter.html b/docs/build/_modules/popcor/examples/rotation_lifter.html deleted file mode 100644 index 29b4d97..0000000 --- a/docs/build/_modules/popcor/examples/rotation_lifter.html +++ /dev/null @@ -1,484 +0,0 @@ - - - - - - - - popcor.examples.rotation_lifter — POPCOR 0.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - -
- - -
- -
-
- - - GitHub logo - Go to GitHub source code - -
-
- -

Source code for popcor.examples.rotation_lifter

-import numpy as np
-from poly_matrix.poly_matrix import PolyMatrix
-from scipy.spatial.transform import Rotation as R
-
-from popcor.base_lifters import StateLifter
-
-METHOD = "CG"
-SOLVER_KWARGS = dict(
-    min_gradient_norm=1e-7, max_iterations=10000, min_step_size=1e-8, verbosity=1
-)
-
-
-
-[docs] -class RotationLifter(StateLifter): - """Rotation averaging problem.""" - - LEVELS = ["no"] - HOM = "h" - VARIABLE_LIST = [["h", "c"]] - - # whether or not to include the determinant constraints in the known constraints. - ADD_DETERMINANT = False - - NOISE = 1e-3 - - # Add any parameters here that describe the problem (e.g. number of landmarks etc.) - def __init__(self, level="no", param_level="no", d=2, n_meas=2): - self.n_meas = n_meas - self.level = level - super().__init__( - level=level, - param_level=param_level, - d=d, - ) - - @property - def var_dict(self): - return {self.HOM: 1, "c": self.d**2} - - def sample_theta(self): - """Generate a random new feasible point.""" - - if self.d == 2: - angle = np.random.uniform(0, 2 * np.pi) - C = R.from_euler("z", angle).as_matrix()[:2, :2] - elif self.d == 3: - C = R.random().as_matrix() - return C - - def get_x(self, theta=None, parameters=None, var_subset=None) -> np.ndarray: - """Get the lifted vector x given theta and parameters.""" - if theta is None: - theta = self.theta - if parameters is None: - parameters = self.parameters - if var_subset is None: - var_subset = self.var_dict.keys() - - x_data = [] - for key in var_subset: - if key == self.HOM: - x_data.append(1.0) - elif key == "c": - x_data += list(theta.flatten("C")) - dim_x = self.get_dim_x(var_subset=var_subset) - assert len(x_data) == dim_x - return np.array(x_data) - - def get_theta(self, x: np.ndarray) -> np.ndarray: - assert np.ndim(x) == 1 - C_flat = x[1 : 1 + self.d**2] - return C_flat.reshape((self.d, self.d)) - - def get_Q(self, noise: float | None = None): - if noise is None: - noise = self.NOISE - if self.y_ is None: - self.y_ = [] - for i in range(self.n_meas): - # noise model: R_i = R.T @ Rnoise - if noise > 0: - # Generate a random small rotation as noise and apply it - noise_rotvec = np.random.normal(scale=noise, size=(self.d,)) - Rnoise = ( - R.from_rotvec(noise_rotvec).as_matrix() - if self.d == 3 - else R.from_euler("z", noise_rotvec[0]).as_matrix()[:2, :2] - ) - Ri = self.theta.T @ Rnoise - else: - Ri = self.theta.T - self.y_.append(Ri) - - return self.get_Q_from_y(self.y_) - - def get_Q_from_y(self, y, output_poly=False): - # f(R) = sum_i || R @ R_i - I ||_F^2 - # argmin f(R) = argmin sum_i || R_i.T @ R_i ||^2 - 2 tr(R.T @ R_i) + ||I||_F^2 - # = argmin sum_i -2 tr(R.T @ R_i) + sum_i d - # = argmin sum_i -2 vec(R).T @ vec(R_i.T) + N * d - # sanity check for zero noise: - # || R @ R.T - I ||_F^2 = 0 - """param y: list of noisy rotation matrices.""" - Q = PolyMatrix() - for Ri in y: - Q[self.HOM, "c"] -= Ri.T.flatten("C")[None, :] - Q[self.HOM, self.HOM] += len(y) * self.d - if output_poly: - return Q - else: - return Q.get_matrix(self.var_dict) - - def local_solver_old( - self, t0, y, verbose=False, method=METHOD, solver_kwargs=SOLVER_KWARGS - ): - import pymanopt - from pymanopt.manifolds import SpecialOrthogonalGroup - - if method == "CG": - from pymanopt.optimizers import ConjugateGradient as Optimizer # fastest - elif method == "SD": - from pymanopt.optimizers import SteepestDescent as Optimizer # slow - elif method == "TR": - from pymanopt.optimizers import TrustRegions as Optimizer # okay - else: - raise ValueError(method) - - if verbose: - solver_kwargs["verbosity"] = 2 - else: - solver_kwargs["verbosity"] = 0 - - manifold = SpecialOrthogonalGroup(self.d, k=1) - - @pymanopt.function.autograd(manifold) - def cost(R): - cost = 0 - for Ri in y: - cost += np.sum((R.T @ Ri - np.eye(self.d)) ** 2) - return cost - - euclidean_gradient = None - problem = pymanopt.Problem( - manifold, cost, euclidean_gradient=euclidean_gradient - ) - optimizer = Optimizer(**solver_kwargs) - - res = optimizer.run(problem, initial_point=t0) - theta_hat = res.point - - success = ("min step_size" in res.stopping_criterion) or ( - "min grad norm" in res.stopping_criterion - ) - info = { - "success": success, - "msg": res.stopping_criterion, - } - if success: - return theta_hat, info, cost - - def test_and_add(self, A_list, Ai, output_poly): - x = self.get_x() - Ai_sparse = Ai.get_matrix(self.var_dict) - err = x.T @ Ai_sparse @ x - assert abs(err) <= 1e-10, err - if output_poly: - A_list.append(Ai) - else: - A_list.append(Ai_sparse) - - def get_A_known(self, var_dict=None, output_poly=False, add_redundant=False): - A_list = [] - if var_dict is None: - var_dict = self.var_dict - - if "c" in var_dict: - # enforce diagonal == 1 - for i in range(self.d): - Ei = np.zeros((self.d, self.d)) - Ei[i, i] = 1.0 - constraint = np.kron(Ei, np.eye(self.d)) - Ai = PolyMatrix(symmetric=True) - Ai["c", "c"] = constraint - Ai[self.HOM, self.HOM] = -1 - self.test_and_add(A_list, Ai, output_poly=output_poly) - - # enforce off-diagonal == 0 - for i in range(self.d): - for j in range(i + 1, self.d): - Ei = np.zeros((self.d, self.d)) - Ei[i, j] = 1.0 - Ei[j, i] = 1.0 - constraint = np.kron(Ei, np.eye(self.d)) - Ai = PolyMatrix(symmetric=True) - Ai["c", "c"] = constraint - self.test_and_add(A_list, Ai, output_poly=output_poly) - - # enforce that determinant is one. - if self.d == 2 and self.ADD_DETERMINANT: - # C = [a b; c d]; ad - bc - 1 = 0 - # a b c d - # a 1 - # b -1 - # c -1 - # d 1 - Ai = PolyMatrix(symmetric=True) - constraint = np.zeros((self.d**2, self.d**2)) - constraint[0, 3] = constraint[3, 0] = 1.0 - constraint[1, 2] = constraint[2, 1] = -1.0 - Ai[self.HOM, self.HOM] = -2 - Ai["c", "c"] = constraint - self.test_and_add(A_list, Ai, output_poly=output_poly) - elif self.d == 3 and self.ADD_DETERMINANT: - # c11 c12 c13 c21 * c32 - c31 * c22 = c13 - # C = [c21, c22, c23]; c1 x c2 = c3: c31 * c12 - c11 * c12 = c23 - # c31 c32 c33 c11 * c22 - c21 * c12 = c33 - print( - "Warning: consider implementing the determinant constraint for RobustPoseLifter, d=3" - ) - return A_list
- -
- -
-
-
- -
- -
-

© Copyright 2025, POPCOR Contributors.

-
- - Built with Sphinx using a - theme - provided by Read the Docs. - - -
-
-
-
-
- - - - - - \ No newline at end of file diff --git a/docs/build/_modules/popcor/examples/stereo1d_lifter.html b/docs/build/_modules/popcor/examples/stereo1d_lifter.html deleted file mode 100644 index a4f6034..0000000 --- a/docs/build/_modules/popcor/examples/stereo1d_lifter.html +++ /dev/null @@ -1,471 +0,0 @@ - - - - - - - - popcor.examples.stereo1d_lifter — POPCOR 0.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - -
- - -
- -
-
- - - GitHub logo - Go to GitHub source code - -
-
- -

Source code for popcor.examples.stereo1d_lifter

-from typing import Optional
-
-import numpy as np
-from poly_matrix.least_squares_problem import LeastSquaresProblem
-from poly_matrix.poly_matrix import PolyMatrix
-
-from popcor.base_lifters import StateLifter
-
-
-
-[docs] -class Stereo1DLifter(StateLifter): - """Toy example for stereo localization in 1D. We minimize the following cost function: - - .. math:: - f(\\theta) = \\sum_{j=0}^{N-1} (u_j - 1 / (\\theta - a_j))^2 - - where :math:`a_j` are the landmarks and :math:`u_j` are the measurements. - - This is the pedagogical running example of `this paper <https://arxiv.org/abs/2308.05783>`_. - and also used in the :ref:`Quick Start Guide`. - """ - - PARAM_LEVELS = ["no", "p", "ppT"] - VARIABLE_LIST = [["h", "x"], ["h", "x", "z_0"], ["h", "x", "z_0", "z_1"]] - - NOISE = 0.1 - - def __init__(self, n_landmarks, param_level="no"): - self.n_landmarks = n_landmarks - self.d = 1 - self.W = 1.0 - - # will be initialized later - self.landmarks_ = None - - super().__init__(param_level=param_level, d=self.d, n_parameters=n_landmarks) - - @property - def landmarks(self): - if self.landmarks_ is None: - self.landmarks_ = np.random.rand(self.n_landmarks, self.d) - return self.landmarks_ - - def sample_parameters(self, theta=None): - if self.parameters_ is None: - return self.sample_parameters_landmarks(self.landmarks) - landmarks = np.random.rand(self.n_landmarks, self.d) - return self.sample_parameters_landmarks(landmarks) - - def sample_theta(self): - x_try = np.random.rand(1) - counter = 0 - while np.min(np.abs(x_try - self.landmarks)) <= 1e-2: - x_try = np.random.rand(1) - counter += 1 - if counter >= 1000: - print("Warning: couldn't find valid setup") - return - return x_try - - def get_x(self, theta=None, parameters=None, var_subset=None): - """ - :param var_subset: list of variables to include in x vector. Set to None for all. - """ - if theta is None: - theta = self.theta - if parameters is None: - parameters = self.parameters - - if var_subset is None: - var_subset = self.var_dict.keys() - - if self.param_level == "no": - landmarks = { - f"p_{i}": self.landmarks[i] for i in range(self.landmarks.shape[0]) - } - else: - landmarks = { - f"p_{i}": parameters[f"p_{i}"][: self.d] - for i in range(self.landmarks.shape[0]) - } - - x_data = [] - for key in var_subset: - if key == self.HOM: - x_data.append(1.0) - elif key == "x": - x_data.append(theta[0]) - elif "z" in key: - idx = int(key.split("_")[-1]) - x_data.append(1 / (theta[0] - landmarks[f"p_{idx}"])) - else: - raise ValueError("unknown key in get_x", key) - return np.hstack(x_data) - - @property - def var_dict(self): - vars = [self.HOM, "x"] + [f"z_{j}" for j in range(self.n_landmarks)] - return {v: 1 for v in vars} - - @property - def param_dict(self): - return self.param_dict_landmarks - - def get_Q(self, noise: Optional[float] = None): - if self.landmarks is None: - raise ValueError("self.landmarks must be initialized before calling get_Q.") - if noise is None: - noise = self.NOISE - - y = 1 / (self.theta - self.landmarks.flatten()) + np.random.normal( - scale=noise, loc=0, size=self.n_landmarks - ) - if self.y_ is None: - self.y_ = y - - return self.get_Q_from_y(y) - - def get_Q_from_y(self, y): - ls_problem = LeastSquaresProblem() - for j in range(len(y)): - ls_problem.add_residual({self.HOM: -y[j], f"z_{j}": 1}) - return ls_problem.get_Q().get_matrix(self.var_dict) - - def get_A_known(self, var_dict=None, output_poly=False): - if var_dict is None: - var_dict = self.var_dict - - # if self.add_parameters: - # raise ValueError("can't extract known matrices yet when using parameters.") - - A_known = [] - - # enforce that z_j = 1/(x - a_j) <=> 1 - z_j*x + a_j*z_j = 0 - if not ("x" in var_dict and self.HOM in var_dict): - return [] - - landmark_indices = [ - int(key.split("_")[-1]) for key in var_dict if key.startswith("z_") - ] - for j in landmark_indices: - A = PolyMatrix() - A[self.HOM, f"z_{j}"] = 0.5 * self.landmarks[j] - A["x", f"z_{j}"] = -0.5 - A[self.HOM, self.HOM] = 1.0 - if output_poly: - A_known.append(A) - else: - A_known.append(A.get_matrix(variables=self.var_dict)) - return A_known - - def get_A_known_redundant(self, var_dict=None, output_poly=False): - import itertools - - if var_dict is None: - var_dict = self.var_dict - - assert self.HOM in var_dict, "homogenization variable must be in var_dict" - - landmark_indices = [ - int(key.split("_")[-1]) for key in var_dict if key.startswith("z_") - ] - # add known redundant constraints: - # enforce that z_j - z_i = (a_j - a_i) * z_j * z_i - A_known = [] - for i, j in itertools.combinations(landmark_indices, 2): - A = PolyMatrix() - A[self.HOM, f"z_{j}"] = 1 - A[self.HOM, f"z_{i}"] = -1 - A[f"z_{i}", f"z_{j}"] = self.landmarks[i] - self.landmarks[j] - if output_poly: - A_known.append(A) - else: - A_known.append(A.get_matrix(variables=self.var_dict)) - return A_known - - def get_cost(self, t, y): - return np.sum((y - (1 / (t - self.landmarks.flatten()))) ** 2) - - def local_solver( - self, t_init, y, num_iters=100, eps=1e-5, W=None, verbose=False, **kwargs - ): - info = {} - a = self.landmarks.flatten() - x_op = t_init - for i in range(num_iters): - u = y - (1 / (x_op - a)) - if verbose: - print(f"cost {i}", np.sum(u**2)) - du = 1 / ((x_op - a) ** 2) - if np.linalg.norm(du) > 1e-10: - dx = -np.sum(u * du) / np.sum(du * du) - x_op = x_op + dx - if np.abs(dx) < eps: - msg = f"converged in dx after {i} it" - cost = self.get_cost(x_op, y) - info = {"msg": msg, "cost": cost, "success": True} - return x_op, info, cost - else: - msg = f"converged in du after {i} it" - cost = self.get_cost(x_op, y) - info = {"msg": msg, "cost": self.get_cost(x_op, y), "success": True} - return x_op, info, cost - return None, {"msg": "didn't converge", "cost": None, "success": False}, None - - def __repr__(self): - return f"stereo1d_{self.param_level}"
- -
- -
-
-
- -
- -
-

© Copyright 2025, POPCOR Contributors.

-
- - Built with Sphinx using a - theme - provided by Read the Docs. - - -
-
-
-
-
- - - - - - \ No newline at end of file diff --git a/docs/build/_modules/popcor/examples/stereo2d_lifter.html b/docs/build/_modules/popcor/examples/stereo2d_lifter.html deleted file mode 100644 index 0aeca23..0000000 --- a/docs/build/_modules/popcor/examples/stereo2d_lifter.html +++ /dev/null @@ -1,365 +0,0 @@ - - - - - - - - popcor.examples.stereo2d_lifter — POPCOR 0.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - -
- - -
- -
-
- - - GitHub logo - Go to GitHub source code - -
-
- -

Source code for popcor.examples.stereo2d_lifter

-# import autograd.numpy as np
-import numpy as np
-
-from popcor.base_lifters import StereoLifter
-from popcor.utils.geometry import convert_phi_to_theta, convert_theta_to_phi
-from popcor.utils.stereo2d_problem import _cost, local_solver
-
-
-def change_dimensions(a, y, x):
-    p_w = np.concatenate([a, np.ones((a.shape[0], 1))], axis=1)
-    y_mat = np.c_[[*y]]  # N x 2
-    return p_w[:, :, None], y_mat[:, :, None], x[:, None]
-
-
-GTOL = 1e-6
-
-
-
-[docs] -class Stereo2DLifter(StereoLifter): - """Stereo-camera localization in 2D. - - We minimize the following cost function: - - .. math:: - f(\\theta) = \\sum_{j=0}^{n} (u_j - M q_j / q_j[1])^2 - - where - - - :math:`p_j` are known landmarks (in homogeneous coordinates), - - :math:`u_j` are pixel measurements (2 elements: one pixel in left "image" and one in right "image"), - - :math:`q_j = T(\\theta) p_j` are the (homogeneous) coordinates of landmark j in the (unknown) camera frame, parameterized by :math:`T(\\theta)`, and - - :math:`M` is the stereo camera calibration matrix. Here, it is given by - - .. math:: - - \\begin{bmatrix} - f_u & c_u & \\frac{b f_u}{2} \\\\ - f_v & c_v & -\\frac{b f_v}{2} \\\\ - \\end{bmatrix} - - where :math:`f_u, f_v` are horizontal and vertical focal lengths, :math:`c_u,c_v` are image center points in pixels and :math:`b` is the camera baseline. - - This example is treated in more details in `this paper <https://arxiv.org/abs/2308.05783>`_. - """ - - def __init__(self, n_landmarks, level="no", param_level="no", variable_list=None): - self.W = np.stack([np.eye(2)] * n_landmarks) - - super().__init__( - n_landmarks=n_landmarks, - level=level, - param_level=param_level, - d=2, - variable_list=variable_list, - ) - - @property - def M_matrix(self): - f_u = 484.5 - c_u = 322 - b = 0.24 - return np.array([[f_u, c_u, f_u * b / 2], [f_u, c_u, -f_u * b / 2]]) - - def get_cost(self, t, y, W=None): - - if W is None: - W = self.W - a = self.landmarks - - phi = convert_theta_to_phi(t) - p_w, y, phi = change_dimensions(a, y, phi) - cost = _cost(phi, p_w, y, W, self.M_matrix) - if StereoLifter.NORMALIZE: - return cost / (self.n_landmarks * self.d) - else: - return cost - - def local_solver(self, t_init, y, W=None, verbose=False, **kwargs): - - if W is None: - W = self.W - a = self.landmarks - - init_phi = convert_theta_to_phi(t_init) - p_w, y, __ = change_dimensions(a, y, init_phi) - success, phi_hat, cost = local_solver( - p_w=p_w, y=y, W=W, init_phi=init_phi, log=verbose, gtol=GTOL - ) - if StereoLifter.NORMALIZE: - cost /= self.n_landmarks * self.d - # cost /= self.n_landmarks * self.d - theta_hat = convert_phi_to_theta(phi_hat) - info = {"success": success, "msg": "converged"} - if success: - return theta_hat, info, cost - else: - return None, info, cost
- - - -if __name__ == "__main__": - lifter = Stereo2DLifter(n_landmarks=3) -
- -
-
-
- -
- -
-

© Copyright 2025, POPCOR Contributors.

-
- - Built with Sphinx using a - theme - provided by Read the Docs. - - -
-
-
-
-
- - - - - - \ No newline at end of file diff --git a/docs/build/_modules/popcor/examples/stereo3d_lifter.html b/docs/build/_modules/popcor/examples/stereo3d_lifter.html deleted file mode 100644 index 14dbb3e..0000000 --- a/docs/build/_modules/popcor/examples/stereo3d_lifter.html +++ /dev/null @@ -1,438 +0,0 @@ - - - - - - - - popcor.examples.stereo3d_lifter — POPCOR 0.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - -
- - -
- -
-
- - - GitHub logo - Go to GitHub source code - -
-
- -

Source code for popcor.examples.stereo3d_lifter

-import pickle
-
-import numpy as np
-
-from popcor.base_lifters import StereoLifter
-from popcor.utils.geometry import get_T, get_theta_from_T
-from popcor.utils.stereo3d_problem import _cost, local_solver
-
-
-def change_dimensions(a, y):
-    p_w = np.concatenate([a, np.ones((a.shape[0], 1))], axis=1)
-    y_mat = np.c_[[*y]]  # N x 2
-    return p_w[:, :, None], y_mat[:, :, None]
-
-
-GTOL = 1e-6
-
-
-
-[docs] -class Stereo3DLifter(StereoLifter): - """Stereo-camera localization in 3D. - - Analogously to :class:`Stereo2DLifter`, we minimize the following cost function: - - .. math:: - f(\\theta) = \\sum_{j=0}^{n} (u_j - M q_j / q_j[2])^2 - - where - - - :math:`p_j` are known landmarks (in homogeneous coordinates), - - :math:`u_j` are pixel measurements (4 elements: two pixel coordinates in left image and two in right image), - - :math:`q_j = T(\\theta) p_j` are the (homogeneous) coordinates of landmark j in the (unknown) camera frame, parameterized by :math:`T(\\theta)`, and - - :math:`M` is the stereo camera calibration matrix. Here, it is given by - - .. math:: - - \\begin{bmatrix} - f_u & 0 & c_u & \\frac{b f_u}{2} \\\\ - 0 & f_v & c_v & 0 \\\\ - f_u & 0 & c_u & -\\frac{b f_u}{2} \\\\ - 0 & f_v & c_v & 0 \\\\ - \\end{bmatrix} - - where :math:`f_u, f_v` are horizontal and vertical focal lengths, :math:`c_u,c_v` are image center points in pixels and :math:`b` is the camera baseline. - - This example is treated in more details in `this paper <https://arxiv.org/abs/2308.05783>`_. - """ - - def __init__(self, n_landmarks, level="no", param_level="no", variable_list=None): - self.W = np.stack([np.eye(4)] * n_landmarks) - - super().__init__( - n_landmarks=n_landmarks, - level=level, - param_level=param_level, - d=3, - variable_list=variable_list, - ) - - @property - def M_matrix(self): - f_u = 484.5 - f_v = 484.5 - c_u = 322 - c_v = 247 - b = 0.24 - return np.array( - [ - [f_u, 0, c_u, f_u * b / 2], - [0, f_v, c_v, 0], - [f_u, 0, c_u, -f_u * b / 2], - [0, f_v, c_v, 0], - ] - ) - - @staticmethod - def from_file(fname): - with open(fname, "rb") as f: - y_ = pickle.load(f) - landmarks = pickle.load(f) - theta = pickle.load(f) - - level = pickle.load(f) - param_level = pickle.load(f) - variable_list = pickle.load(f) - lifter = Stereo3DLifter( - n_landmarks=landmarks.shape[0], - level=level, - param_level=param_level, - variable_list=variable_list, - ) - lifter.y_ = y_ - lifter.landmarks_ = landmarks - lifter.parameters = np.r_[1, landmarks.flatten()] - lifter.theta = theta - return lifter - - def to_file(self, fname): - with open(fname, "wb") as f: - pickle.dump(self.y_, f) - pickle.dump(self.landmarks, f) - - pickle.dump(self.theta, f) - pickle.dump(self.level, f) - pickle.dump(self.param_level, f) - pickle.dump(self.variable_list, f) - - def get_cost(self, t, y, W=None): - """ - :param t: can be either - - x, y, z, yaw, pitch roll: vector of unknowns, or - - [c1, c2, c3, x, y, z], the theta vector (flattened C and x, y, z) - """ - - if W is None: - W = self.W - a = self.landmarks - - p_w, y = change_dimensions(a, y) - - T = get_T(theta=t, d=3) - - cost = _cost(p_w=p_w, y=y, T=T, M=self.M_matrix, W=W) - if StereoLifter.NORMALIZE: - return cost / (self.n_landmarks * self.d) - else: - return cost - - def local_solver(self, t_init, y, W=None, verbose=False, **kwargs): - """ - :param t_init: same options asfor t in cost. - """ - - if W is None: - W = self.W - - a = self.landmarks - p_w, y = change_dimensions(a, y) - T_init = get_T(theta=t_init, d=3) - - info, T_hat, cost = local_solver( - T_init=T_init, - y=y, - p_w=p_w, - W=W, - M=self.M_matrix, - log=False, - gtol=GTOL, - min_update_norm=-1, # makes this inactive - ) - - if verbose: - print("Stereo3D local solver:", info["msg"]) - - if StereoLifter.NORMALIZE: - - cost /= self.n_landmarks * self.d - - x_hat = get_theta_from_T(T_hat) - x = self.get_x(theta=x_hat) - Q = self.get_Q_from_y(y[:, :, 0]) - cost_Q = x.T @ Q @ x - if abs(cost) > 1e-10: - if not (abs(cost_Q - cost) / cost < 1e-8): - print(f"Warning, cost not equal {cost_Q:.2e} {cost:.2e}") - - if info["success"]: - return x_hat, info, cost - else: - return None, info, cost
- - - -if __name__ == "__main__": - lifter = Stereo3DLifter(n_landmarks=4) -
- -
-
-
- -
- -
-

© Copyright 2025, POPCOR Contributors.

-
- - Built with Sphinx using a - theme - provided by Read the Docs. - - -
-
-
-
-
- - - - - - \ No newline at end of file diff --git a/docs/build/_modules/popcor/examples/wahba_lifter.html b/docs/build/_modules/popcor/examples/wahba_lifter.html deleted file mode 100644 index 7936905..0000000 --- a/docs/build/_modules/popcor/examples/wahba_lifter.html +++ /dev/null @@ -1,496 +0,0 @@ - - - - - - - - popcor.examples.wahba_lifter — POPCOR 0.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - -
- - -
- -
-
- - - GitHub logo - Go to GitHub source code - -
-
- -

Source code for popcor.examples.wahba_lifter

-# import autograd.numpy as np
-import numpy as np
-
-from popcor.base_lifters import RobustPoseLifter
-from popcor.utils.geometry import get_C_r_from_theta
-from popcor.utils.plotting_tools import plot_frame
-
-N_TRYS = 10
-
-# TODO(FD) for some reason this is not required as opposed to what is stated in Heng's paper
-# and it currently breaks tightness (might be a bug in my implementation though)
-USE_INEQ = False
-
-NORMALIZE = False
-
-
-
-[docs] -class WahbaLifter(RobustPoseLifter): - """This example is treated in more details in `this paper <https://arxiv.org/abs/2308.05783>`_, - under the name "PPR" (point-to-point registration). - """ - - NOISE = 1e-2 # inlier noise - NOISE_OUT = 1.0 # outlier noise - - def h_list(self, t): - """ - We want to inforce that - - norm(t) <= 10 (default) - as constraints h_j(t)<=0 - """ - default = super().h_list(t) - return default - - def get_random_position(self): - return np.random.uniform( - -0.5 * self.MAX_DIST ** (1 / self.d), - 0.5 * self.MAX_DIST ** (1 / self.d), - size=self.d, - ) - - def get_B_known(self): - """Get inequality constraints of the form x.T @ B @ x <= 0""" - if not USE_INEQ: - return [] - - default = super().get_B_known() - return default - - def term_in_norm(self, R, t, pi, ui): - return R @ pi + t - ui - - def residual_sq(self, R, t, pi, ui): - # TODO: can easily extend below to matrix-weighted - W = np.eye(self.d) - res_sq = (R @ pi + t - ui).T @ W @ (R @ pi + t - ui) - if NORMALIZE: - return res_sq / (self.n_landmarks * self.d) ** 2 - return res_sq - - def plot_setup(self): - if self.d != 2: - print("Plotting currently only supported for d=2") - return - import matplotlib.pylab as plt - - fig, ax = plt.subplots() - - # R, t = get_C_r_from_theta(self.theta, self.d) - # ax.scatter(*t, color="k", label="pose") - - ax.axis("equal") - t_wc_w, C_cw = plot_frame(ax, self.theta, label="pose", color="gray", d=2) - - if self.y_ is not None: - for i in range(self.y_.shape[0]): - ax.scatter(*self.landmarks[i], color=f"C{i}", label="landmarks") - - # this vector is in camera coordinates - t_cpi_c = self.y_[i] - # t_cpi_w: vector from camera to pi in world coordinates - - ax.plot( - [t_wc_w[0], self.landmarks[i][0]], - [t_wc_w[1], self.landmarks[i][1]], - color=f"C{i}", - ls=":", - ) - if C_cw is not None: - t_cpi_w = C_cw.T @ t_cpi_c - ax.plot( - [t_wc_w[0], t_wc_w[0] + t_cpi_w[0]], - [t_wc_w[1], t_wc_w[1] + t_cpi_w[1]], - color=f"r" if i < self.n_outliers else "g", - ) - - def get_Q( - self, - noise: float | None = None, - output_poly: bool = False, - use_cliques: list = [], - ): - if noise is None: - noise = self.NOISE - - if self.y_ is None: - theta = self.theta[: self.d + self.d**2] - outlier_index = self.get_outlier_index() - - self.y_ = np.empty((self.n_landmarks, self.d)) - R, t = get_C_r_from_theta(theta, self.d) - for i in range(self.n_landmarks): - valid_measurement = False - for _ in range(N_TRYS): - outlier = i in outlier_index - y_i = R @ self.landmarks[i] + t - if outlier: - y_i += np.random.normal( - scale=self.NOISE_OUT, loc=0, size=self.d - ) - else: - y_i += np.random.normal(scale=noise, loc=0, size=self.d) - - residual = self.residual_sq(R, t, self.landmarks[i], y_i) - if not self.robust: - valid_measurement = True - else: - if outlier: - valid_measurement = residual > self.beta - else: - valid_measurement = residual < self.beta - if valid_measurement: - break - if not valid_measurement and self.robust: - self.plot_setup() - raise ValueError("did not find a valid measurement.") - self.y_[i] = y_i - Q = self.get_Q_from_y(self.y_, output_poly=output_poly, use_cliques=use_cliques) - return Q - - def get_Q_from_y(self, y, output_poly: bool = False, use_cliques: list = []): - """ - every cost term can be written as - (1 + wi)/b^2 r^2(x, zi) + (1 - wi) - - residual term: - (Rpi + t - ui).T Wi (Rpi + t - ui) = - [t', vec(R)'] @ [I (pi x I)]' @ Wi @ [I (pi x I)] @ [t ; vec(R)] - ------x'----- -----Pi'----- - - 2 [t', vec(R)'] @ [I (pi x I)]' Wi @ ui - -----x'------ ---------Pi_xl-------- - + ui.T @ Wi @ ui - -----Pi_ll------ - """ - - if len(use_cliques): - js = use_cliques - else: - js = list(range(self.n_landmarks)) - - from poly_matrix import PolyMatrix - - Q = PolyMatrix(symmetric=True) - if NORMALIZE: - norm = (self.n_landmarks * self.d) ** 2 - - Wi = np.eye(self.d) - for i in js: - pi = self.landmarks[i] - ui = y[i] - Pi = np.c_[np.eye(self.d), np.kron(pi, np.eye(self.d))] - - Pi_ll = ui.T @ Wi @ ui - Pi_xl = -(Pi.T @ Wi @ ui)[:, None] - Qi = Pi.T @ Wi @ Pi - if NORMALIZE: - Pi_ll /= norm - Pi_xl /= norm - Qi /= norm - - if self.robust: - Qi /= self.beta**2 - Pi_ll /= self.beta**2 - Pi_xl /= self.beta**2 - # Q["x", "x"] += Qi - Q["t", "t"] += Qi[: self.d, : self.d] - Q["t", "c"] += Qi[: self.d, self.d :] - Q["c", "c"] += Qi[self.d :, self.d :] - - # Q["x", self.HOM] += Pi_xl - Q["t", self.HOM] += Pi_xl[: self.d, :] - Q["c", self.HOM] += Pi_xl[self.d :, :] - Q[self.HOM, self.HOM] += ( - 1 + Pi_ll - ) # 1 from (1 - wi), Pi_ll from first term. - Q[ - self.HOM, f"w_{i}" - ] += -0.5 # from (1 - wi), 0.5 cause on off-diagonal - if self.level == "xwT": - # Q[f"z_{i}", "x"] += 0.5 * Qi - Q[f"z_{i}", "t"] += 0.5 * Qi[:, : self.d] - Q[f"z_{i}", "c"] += 0.5 * Qi[:, self.d :] - - Q[self.HOM, f"w_{i}"] += 0.5 * Pi_ll # from first term - - Q[f"z_{i}", self.HOM] += Pi_xl - elif self.level == "xxT": - Q["z_0", f"w_{i}"] += 0.5 * Qi.flatten()[:, None] - - # Q["x", f"w_{i}"] += Pi_xl - Q["t", f"w_{i}"] += Pi_xl[: self.d, :] - Q["c", f"w_{i}"] += Pi_xl[self.d :, :] - - Q[self.HOM, f"w_{i}"] += 0.5 * Pi_ll - else: - # Q["x", "x"] += Qi - Q["t", "t"] += Qi[: self.d, : self.d] - Q["t", "c"] += Qi[: self.d, self.d :] - Q["c", "c"] += Qi[self.d :, self.d :] - - # Q["x", self.HOM] += Pi_xl - Q["t", self.HOM] += Pi_xl[: self.d, :] - Q["c", self.HOM] += Pi_xl[self.d :, :] - Q[self.HOM, self.HOM] += Pi_ll # on diagonal - if output_poly: - return 0.5 * Q - Q_sparse = 0.5 * Q.get_matrix(variables=self.var_dict) - return Q_sparse - - def __repr__(self): - appendix = "_robust" if self.robust else "" - return f"wahba_{self.d}d_{self.level}_{self.param_level}{appendix}"
- -
- -
-
-
- -
- -
-

© Copyright 2025, POPCOR Contributors.

-
- - Built with Sphinx using a - theme - provided by Read the Docs. - - -
-
-
-
-
- - - - - - \ No newline at end of file diff --git a/docs/build/_modules/popcor/utils/common.html b/docs/build/_modules/popcor/utils/common.html deleted file mode 100644 index 7824722..0000000 --- a/docs/build/_modules/popcor/utils/common.html +++ /dev/null @@ -1,456 +0,0 @@ - - - - - - - - popcor.utils.common — POPCOR 0.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - -
- - -
- -
-
- - - GitHub logo - Go to GitHub source code - -
-
- -

Source code for popcor.utils.common

-import itertools
-
-import numpy as np
-import scipy.sparse as sp
-
-
-
-[docs] -def upper_triangular(p): - """Given vector, get the half kronecker product.""" - return np.outer(p, p)[np.triu_indices(len(p))]
- - - -
-[docs] -def diag_indices(n): - """Given the half kronecker product, return diagonal elements""" - z = np.empty((n, n)) - z[np.triu_indices(n)] = range(int(n * (n + 1) / 2)) - return np.diag(z).astype(int)
- - - -def get_aggregate_sparsity(matrix_list_sparse): - agg_ii = [] - agg_jj = [] - for i, A_sparse in enumerate(matrix_list_sparse): - assert isinstance(A_sparse, sp.spmatrix) - ii, jj = A_sparse.nonzero() # type: ignore - agg_ii += list(ii) - agg_jj += list(jj) - return sp.csr_matrix(([1.0] * len(agg_ii), (agg_ii, agg_jj)), A_sparse.shape) - - -
-[docs] -def unravel_multi_index_triu(flat_indices, shape): - """Equivalent of np.multi_index_triu, but using only the upper-triangular part of matrix.""" - i_upper = [] - j_upper = [] - - # for 4 x 4, this would give [4, 7, 9, 11] - cutoffs = np.cumsum(list(range(1, shape[0] + 1))[::-1]) - for idx in flat_indices: - i = np.where(idx < cutoffs)[0][0] - if i == 0: - j = idx - else: - j = idx - cutoffs[i - 1] + i - i_upper.append(i) - j_upper.append(j) - return np.array(i_upper), np.array(j_upper)
- - - -
-[docs] -def ravel_multi_index_triu(index_tuple, shape): - """Equivalent of np.multi_index_triu, but using only the upper-triangular part of matrix.""" - ii, jj = index_tuple - - triu_mask = jj >= ii - i_upper = ii[triu_mask] - j_upper = jj[triu_mask] - flat_indices = [] - for i, j in zip(i_upper, j_upper): - # for i == 0: idx = j - # for i == 1: idx = shape[0] + j - # for i == 2: idx = shape[0] + shape[0]-1 + j - idx = np.sum(range(shape[0] - i, shape[0])) + j - flat_indices.append(idx) - return flat_indices
- - - -
-[docs] -def create_symmetric(vec, eps_sparse, correct=False, sparse=False): - """Create a symmetric matrix from the vectorized elements of the upper half""" - - def get_dim_x(len_vec): - return int(0.5 * (-1 + np.sqrt(1 + 8 * len_vec))) - - try: - # vec is dense - len_vec = len(vec) - dim_x = get_dim_x(len_vec) - triu = np.triu_indices(n=dim_x) - mask = np.abs(vec) > eps_sparse - triu_i_nnz = triu[0][mask] - triu_j_nnz = triu[1][mask] - vec_nnz = vec[mask] - except Exception: - # vec is sparse - len_vec = vec.shape[1] - dim_x = get_dim_x(len_vec) - vec.data[np.abs(vec.data) < eps_sparse] = 0 - vec.eliminate_zeros() - ii, jj = vec.nonzero() # vec is 1 x jj - triu_i_nnz, triu_j_nnz = unravel_multi_index_triu(jj, (dim_x, dim_x)) - vec_nnz = np.array(vec[ii, jj]).flatten() - # assert dim_x == self.get_dim_x(var_dict) - - if sparse: - offdiag = triu_i_nnz != triu_j_nnz - diag = triu_i_nnz == triu_j_nnz - triu_i = triu_i_nnz[offdiag] - triu_j = triu_j_nnz[offdiag] - diag_i = triu_i_nnz[diag] - if correct: - # divide off-diagonal elements by sqrt(2) - vec_nnz_off = vec_nnz[offdiag] / np.sqrt(2) - else: - vec_nnz_off = vec_nnz[offdiag] - vec_nnz_diag = vec_nnz[diag] - Ai = sp.csr_array( - ( - np.r_[vec_nnz_diag, vec_nnz_off, vec_nnz_off], - (np.r_[diag_i, triu_i, triu_j], np.r_[diag_i, triu_j, triu_i]), - ), - (dim_x, dim_x), - dtype=float, - ) - else: - Ai = np.zeros((dim_x, dim_x)) - - if correct: - # divide all elements by sqrt(2) - Ai[triu_i_nnz, triu_j_nnz] = vec_nnz / np.sqrt(2) - Ai[triu_j_nnz, triu_i_nnz] = vec_nnz / np.sqrt(2) - # undo operation for diagonal - Ai[range(dim_x), range(dim_x)] *= np.sqrt(2) - else: - Ai[triu_i_nnz, triu_j_nnz] = vec_nnz - Ai[triu_j_nnz, triu_i_nnz] = vec_nnz - return Ai
- - - -
-[docs] -def get_vec(mat, correct=True, sparse=False) -> np.ndarray | sp.csr_matrix | None: - """Convert NxN Symmetric matrix to (N+1)N/2 vectorized version that preserves inner product. - - :param mat: (spmatrix or ndarray) symmetric matrix - :return: ndarray - """ - from copy import deepcopy - - mat = deepcopy(mat) - if correct: - if isinstance(mat, sp.csc_matrix): - ii, jj = mat.nonzero() - mat[ii, jj] *= np.sqrt(2.0) - diag = ii == jj - mat[ii[diag], jj[diag]] /= np.sqrt(2) # type: ignore - else: - mat *= np.sqrt(2.0) - mat[range(mat.shape[0]), range(mat.shape[0])] /= np.sqrt(2) - if sparse: - assert isinstance(mat, sp.csc_matrix) - ii, jj = mat.nonzero() - if len(ii) == 0: - # got an empty matrix -- this can happen depending on the parameter values. - return None - triu_mask = jj >= ii - - flat_indices = ravel_multi_index_triu([ii[triu_mask], jj[triu_mask]], mat.shape) # type: ignore - data = np.array(mat[ii[triu_mask], jj[triu_mask]]).flatten() # type: ignore - vec_size = int(mat.shape[0] * (mat.shape[0] + 1) / 2) # type: ignore - return sp.csr_matrix( - (data, ([0] * len(flat_indices), flat_indices)), (1, vec_size) - ) - else: - return np.array(mat[np.triu_indices(n=mat.shape[0])]).flatten() # type: ignore
- - - -def get_labels(p, zi, zj, var_dict): - labels = [] - size_i = var_dict[zi] - size_j = var_dict[zj] - if zi == zj: - # only upper diagonal for i == j - key_pairs = itertools.combinations_with_replacement(range(size_i), 2) - else: - key_pairs = itertools.product(range(size_i), range(size_j)) - for i, j in key_pairs: - label = f"{p}-" - label += f"{zi}:{i}." if size_i > 1 else f"{zi}." - label += f"{zj}:{j}" if size_j > 1 else f"{zj}" - labels.append(label) - return labels -
- -
-
-
- -
- -
-

© Copyright 2025, POPCOR Contributors.

-
- - Built with Sphinx using a - theme - provided by Read the Docs. - - -
-
-
-
-
- - - - - - \ No newline at end of file diff --git a/docs/build/_modules/popcor/utils/constraint.html b/docs/build/_modules/popcor/utils/constraint.html deleted file mode 100644 index bcfe205..0000000 --- a/docs/build/_modules/popcor/utils/constraint.html +++ /dev/null @@ -1,550 +0,0 @@ - - - - - - - - popcor.utils.constraint — POPCOR 0.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - -
- - -
- -
-
- - - GitHub logo - Go to GitHub source code - -
-
- -

Source code for popcor.utils.constraint

-import numpy as np
-import scipy.sparse as sp
-from poly_matrix.poly_matrix import PolyMatrix
-
-from popcor.utils.common import get_vec
-from popcor.utils.plotting_tools import plot_basis
-
-
-def remove_dependent_constraints(constraints, verbose=False):
-    from cert_tools.linalg_tools import find_dependent_columns
-
-    # find which constraints are lin. dep.
-    A_vec = sp.vstack(
-        [constraint.a_full_ for constraint in constraints], format="coo"
-    ).T
-
-    bad_idx = find_dependent_columns(A_vec, verbose=verbose)
-    if len(bad_idx):
-        np.testing.assert_allclose(bad_idx, sorted(bad_idx))
-        # important: by changing the order we
-        for idx in sorted(bad_idx)[::-1]:
-            del constraints[idx]
-
-
-def generate_poly_matrix(constraints, factor_out_parameters=False, lifter=None):
-    plot_rows = []
-    plot_row_labels = []
-    j = -1
-    old_mat_vars = ""
-    for constraint in constraints:
-        mat_vars = constraint.mat_var_dict
-        i = constraint.index
-        if factor_out_parameters:  # use a and not b.
-            if constraint.polyrow_a_ is not None:
-                plot_rows.append(constraint.polyrow_a_)
-            else:
-                if constraint.a_ is not None:
-                    assert (
-                        lifter is not None
-                    ), "Need to provide lifter because a_ is not defined"
-                    polyrow_a = lifter.convert_a_to_polyrow(
-                        constraint.a_, constraint.mat_var_dict
-                    )
-                elif constraint.a_full_ is not None:
-                    assert (
-                        lifter is not None
-                    ), "Need to provide lifter because a_full_ is not defined"
-                    polyrow_a = lifter.convert_a_to_polyrow(
-                        constraint.a_full_, constraint.mat_var_dict
-                    )
-                plot_rows.append(polyrow_a)
-        else:
-            if constraint.polyrow_b_ is not None:
-                plot_rows.append(constraint.polyrow_b_)
-            else:
-                assert (
-                    lifter is not None
-                ), "Need to provide lifter because polyrow_b_ is not defined."
-                plot_rows.append(
-                    lifter.convert_b_to_polyrow(
-                        constraint.b_, mat_vars, constraint.mat_param_dict
-                    )
-                )
-
-        if mat_vars != old_mat_vars:
-            j += 1
-            plot_row_labels.append(f"{j}:b{i}")
-            # plot_row_labels.append(f"{j}{mat_vars}:b{i}")
-            old_mat_vars = mat_vars
-        else:
-            plot_row_labels.append(f"{j}:b{i}")
-
-    templates_poly = PolyMatrix.init_from_row_list(
-        plot_rows, row_labels=plot_row_labels
-    )
-    return templates_poly
-
-
-def plot_poly_matrix(
-    poly_matrix, variables_j=None, variables_i=None, simplify=True, hom="h"
-):
-    if variables_i is None:
-        variables_i = poly_matrix.variable_dict_i
-    if variables_j is None:
-        variables_j = poly_matrix.variable_dict_j
-
-    # plot the templates stored in poly_matrix.
-    fig, ax = plot_basis(
-        poly_matrix,
-        variables_j=variables_j,
-        variables_i=variables_i,
-        discrete=True,
-    )
-    ax.set_yticklabels([])
-    ax.set_yticks([])
-    if simplify:
-        ax.set_xticks([])
-        ax.set_xticklabels([])
-    else:
-        new_xticks = []
-        for lbl in ax.get_xticklabels():
-            lbl = lbl.get_text()
-            if "_" in lbl:  # avoid double subscript
-                new_lbl = f"${lbl.replace(f'{hom}.', '').replace(':', '^')}$"
-            else:
-                new_lbl = f"${lbl.replace(f'{hom}.', '').replace(':', '_')}$"
-            new_xticks.append(new_lbl)
-        ax.set_xticklabels(new_xticks, fontsize=7)
-
-    # plot a red vertical line at each new block of parameters.
-    params = [v.split("-")[0] for v in variables_j]
-    old_param = params[0]
-    for i, p in enumerate(params):
-        if p != old_param:
-            ax.axvline(i - 0.5, color="red", linewidth=1.0)
-            ax.annotate(
-                text=f"${p.replace(':0', '^x').replace(':1', '^y').replace('l.','').replace('.','')}$",
-                xy=(float(i - 0.4), 0.0),
-                fontsize=8,
-                color="red",
-            )
-            old_param = p
-    return fig, ax
-
-
-
-[docs] -class Constraint(object): - """ - This class serves the main purpose of not recomputing representations of constraints more than once. - """ - - def __init__( - self, - index=0, - polyrow_a=None, - polyrow_b=None, - A_poly=None, - A_sparse=None, - b=None, - a=None, - a_full=None, - b_full=None, - mat_var_dict=None, - mat_param_dict=None, - known=False, - template_idx=0, - ): - self.index = index - self.mat_var_dict = mat_var_dict - self.mat_param_dict = mat_param_dict - - self.b_ = b - self.polyrow_b_ = polyrow_b - self.polyrow_a_ = polyrow_a - self.A_poly_ = A_poly - self.A_sparse_ = A_sparse - self.a_ = a - self.b_full_ = b_full - self.a_full_ = a_full - - self.known = known - self.template_idx = template_idx - - # list of applied constraints derived from this constraint. - self.applied_list = [] - - @staticmethod - # @profile - def init_from_b( - index: int, - b: np.ndarray, - mat_var_dict: dict, - lifter=None, - mat_param_dict: dict | None = None, - convert_to_polyrow: bool = True, - known: bool = True, - template_idx: int = 0, - ): - a = None - A_sparse = None - a_full = None - if lifter is not None: - a = lifter.get_reduced_a( - b, var_subset=mat_var_dict, param_subset=mat_param_dict, sparse=True - ) - A_sparse = lifter.get_mat(a, var_dict=mat_var_dict, sparse=True) - a_full = get_vec(A_sparse, sparse=True) - if a_full is None: - return None - if convert_to_polyrow: - assert lifter is not None - A_poly, __ = PolyMatrix.init_from_sparse( - A_sparse, var_dict=lifter.var_dict, unfold=True - ) - polyrow_b = lifter.convert_b_to_polyrow( - b, mat_var_dict, param_subset=mat_param_dict - ) - else: - A_poly = None - polyrow_b = None - return Constraint( - index=index, - a=a, - b=b, - A_sparse=A_sparse, - A_poly=A_poly, - polyrow_b=polyrow_b, - a_full=a_full, - mat_var_dict=mat_var_dict, - mat_param_dict=mat_param_dict, - known=known, - template_idx=template_idx, - ) - - @staticmethod - def init_from_A_poly( - lifter, - A_poly: PolyMatrix, - mat_var_dict: dict, - known: bool = False, - index: int = 0, - template_idx: int = 0, - compute_polyrow_b=False, - ): - Ai_sparse_small = A_poly.get_matrix(variables=mat_var_dict) - ai = get_vec(Ai_sparse_small, correct=True) - bi = lifter.augment_using_zero_padding(ai) - if compute_polyrow_b: - polyrow_b = lifter.convert_b_to_polyrow(bi, mat_var_dict) - else: - polyrow_b = None - polyrow_a = lifter.convert_a_to_polyrow(ai, mat_var_dict) - Ai_sparse = A_poly.get_matrix(variables=lifter.var_dict) - return Constraint( - a=ai, - polyrow_a=polyrow_a, - b=bi, - polyrow_b=polyrow_b, - A_poly=A_poly, - A_sparse=Ai_sparse, - known=known, - index=index, - mat_var_dict=mat_var_dict, - template_idx=template_idx, - ) - - @staticmethod - def init_from_polyrow_b( - polyrow_b: PolyMatrix, - lifter, - index: int = 0, - known: bool = False, - template_idx: int = 0, - mat_var_dict: dict | None = None, - ): - if mat_var_dict is None: - mat_var_dict = lifter.var_dict - A_poly = lifter.convert_polyrow_to_Apoly(polyrow_b) - dict_unroll = lifter.get_var_dict(mat_var_dict, unroll_keys=True) - A_sparse = A_poly.get_matrix(dict_unroll) - a_full = get_vec(A_sparse, sparse=True) - return Constraint( - index=index, - A_poly=A_poly, - polyrow_b=polyrow_b, - A_sparse=A_sparse, - a_full=a_full, - known=known, - template_idx=template_idx, - mat_var_dict=mat_var_dict, - ) - - def scale_to_new_lifter(self, lifter): - if self.known: - assert self.A_poly_ is not None - # known matrices are stored in origin variables, not unrolled form - self.A_sparse_ = self.A_poly_.get_matrix(lifter.var_dict) - self.a_full_ = get_vec(self.A_sparse_, sparse=True) - - else: - assert self.A_poly_ is not None - # known matrices are stored in origin variables, not unrolled form - target_dict_unroll = lifter.get_var_dict(unroll_keys=True) - self.A_sparse_ = self.A_poly_.get_matrix(target_dict_unroll) - self.a_full_ = get_vec(self.A_sparse_, sparse=True) - return self
- -
- -
-
-
- -
- -
-

© Copyright 2025, POPCOR Contributors.

-
- - Built with Sphinx using a - theme - provided by Read the Docs. - - -
-
-
-
-
- - - - - - \ No newline at end of file diff --git a/docs/build/_modules/popr/auto_template.html b/docs/build/_modules/popr/auto_template.html deleted file mode 100644 index 79ec10c..0000000 --- a/docs/build/_modules/popr/auto_template.html +++ /dev/null @@ -1,1354 +0,0 @@ - - - - - - - - popr.auto_template — POPR 0.0.1 documentation - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -

Source code for popr.auto_template

-import time
-from copy import deepcopy
-
-import matplotlib
-import matplotlib.patches
-import numpy as np
-import pandas as pd
-import scipy.sparse as sp
-from cert_tools.linalg_tools import find_dependent_columns, rank_project
-from cert_tools.sdp_solvers import solve_feasibility_sdp
-from cert_tools.sdp_solvers import solve_lambda_cvxpy as solve_lambda
-from cert_tools.sdp_solvers import solve_sdp_cvxpy
-from poly_matrix import PolyMatrix
-
-from popr.base_lifters import StateLifter
-from popr.solvers.common import find_local_minimum
-from popr.solvers.sparse import bisection, brute_force
-from popr.utils.common import get_aggregate_sparsity, get_vec
-from popr.utils.constraint import Constraint, generate_poly_matrix, plot_poly_matrix
-from popr.utils.plotting_tools import (
-    add_colorbar,
-    add_rectangles,
-    import_plt,
-    initialize_discrete_cbar,
-    plot_basis,
-    plot_singular_values,
-    savefig,
-)
-
-plt = import_plt()
-
-# parameter of SDP solver
-TOL = 1e-10
-
-NOISE_SEED = 5
-
-ADJUST_Q = True  # rescale Q matrix
-PRIMAL = False  # use primal or dual formulation of SDP. Recommended is False, because of how MOSEK handles this parameter.
-
-FACTOR = 1.2  # oversampling factor.
-
-PLOT_MAX_MATRICES = 10  # set to np.inf to plot all individual matrices.
-
-USE_KNOWN = True
-USE_INCREMENTAL = False
-
-GLOBAL_THRESH = 1e-3  # consider dual problem optimal when eps<GLOBAL_THRESH
-
-METHOD_NULL = "qrp"  # use svd or qp for comparison only, otherwise leave it at qrp
-
-EPSILON = 1e-4  # fixed epsilon for sparsity-promoting SDP
-
-
-
-[docs] -class AutoTemplate(object): - """ - Class to incrementally learn and augment constraint templates until we reach tightness. - """ - - TOL_RANK_ONE = 1e7 - TOL_REL_GAP = 1e-3 - - # number of random inits to find the global solution - # we always try from ground truth, so for low-enough noise - # that should be good enough. - N_INITS = 1 - - APPLY_TEMPLATES_TO_OTHERS = True - - def __init__( - self, - lifter: StateLifter, - ): - self.lifter = lifter - - # templates contains the learned "templates" of the form: - # ((i, mat_vars), <i-th learned vector for these mat_vars variables, PolyRow form>) - self.templates_poly_ = None # for plotting only: all templats stacked in one - - # constraints after applying templates to the parameters. - self.constraints = [] - - # templates contains all the learned templates - self.templates = [] - - # contains all known constraints, computed only once. - self.templates_known = [] - - # contains the currently relevant known constraints - self.templates_known_sub = [] - self.constraint_index = 0 - - # keep track of which constraints have been tested any constraint twice. - self.index_tested = set() - - # solver results - self.solver_vars = None - self.df_tight = None - self.ranks = [] - self.dual_costs = [] - - # tightness dict makes sure we don't compute tightness twice. - self.reset_tightness_dict() - - # currently used variables - self.mat_vars = [] - - # so-far used variables - self.variable_list = [] - - # can be overwritten later - self.use_known = USE_KNOWN - self.use_incremental = USE_INCREMENTAL - - def reset_tightness_dict(self): - self.tightness_dict = {"rank": None, "cost": None} - - @property - def templates_poly(self): - if self.templates_poly_ is None: - self.templates_poly_ = self.generate_templates_poly( - factor_out_parameters=True - ) - return self.templates_poly_ - - @property - def A_matrices(self): - return [c.A_sparse_ for c in self.constraints] - - def check_violation(self, dual_cost): - assert self.solver_vars is not None - primal_cost = self.solver_vars["qcqp_cost"] - if primal_cost is None: - print("warning can't check violation, no primal cost.") - return False - return (dual_cost - primal_cost) / abs(dual_cost) > self.TOL_REL_GAP - - def duality_gap_is_zero(self, dual_cost, verbose=False, data_dict={}): - assert self.solver_vars is not None - primal_cost = self.solver_vars["qcqp_cost"] - RDG = (primal_cost - dual_cost) / abs(dual_cost) - if RDG < -1e-2: - print( - f"Warning: dual is significantly larger than primal: d={dual_cost:.3e} > p={primal_cost:.3e}, diff={dual_cost-primal_cost:.3e}" - ) - return False - res = RDG < self.TOL_REL_GAP - data_dict["RDG"] = RDG - if not verbose: - return res - - if res: - print("achieved cost tightness:") - else: - print("no cost tightness yet:") - print(f"qcqp cost={primal_cost:.4e}, dual cost={dual_cost:.4e}") - return res - - def is_rank_one(self, eigs, verbose=False, data_dict={}): - SVR = eigs[0] / eigs[1] - data_dict["SVR"] = SVR - res = SVR > self.TOL_RANK_ONE - if not verbose: - return res - if res: - print("achieved rank tightness:") - else: - print("no rank tightness yet:") - print( - f"first two eigenvalues: {eigs[0]:.2e}, {eigs[1]:.2e}, ratio:{eigs[0] / eigs[1]:.2e}" - ) - return res - - def is_tight(self, verbose=False, data_dict={}, tightness=None): - - if tightness is None: - tightness = self.lifter.TIGHTNESS - - if self.tightness_dict[tightness] is not None: - return self.tightness_dict[tightness] - - A_b_list_all = self.get_A_b_list() - A_list = [A for A, __ in A_b_list_all[1:]] # for debugging only - - B_list = self.lifter.get_B_known() - X, info = self._test_tightness(A_b_list_all, B_list, verbose=verbose) - - assert self.solver_vars is not None - self.solver_vars["X"] = X # type: ignore - - self.dual_costs.append(info["cost"]) - self.variable_list.append(self.mat_vars) - - data_dict["q"] = self.solver_vars["qcqp_cost"] - data_dict.update(self.solver_vars) - - if info["cost"] is None: - self.ranks.append(np.zeros(self.lifter.get_dim_x())) - print(f"Warning: solver failed with message: {info['msg']}") - max_error, bad_list = self.lifter.test_constraints(A_list, errors="print") - print("Maximum error:", max_error) - return False - elif self.check_violation(info["cost"]): - self.ranks.append(np.zeros(A_list[0].shape[0])) # type: ignore - print( - f"Warning: dual cost higher than QCQP, d={info['cost']:.2e}, q={self.solver_vars['qcqp_cost']:.2e}" - ) - print( - "Usually this means that MOSEK tolerances are too loose, or that there is a mistake in the constraints." - ) - print( - "It can also mean that we are not sampling enough of the space close to the true solution." - ) - max_error, bad_list = self.lifter.test_constraints(A_list, errors="print") - print("Maximum feasibility error at random x:", max_error) - - tol = 1e-10 - xhat = self.solver_vars["xhat"] - max_error = -np.inf - - assert xhat is not None - assert X is not None - for Ai in A_list: - assert isinstance(Ai, np.ndarray) or isinstance(Ai, sp.spmatrix) - assert isinstance(xhat, np.ndarray) - error = xhat.T @ Ai @ xhat - - errorX = np.trace(X @ Ai) - max_error = max(errorX, max_error) - if abs(error) > tol: - print( - f"Feasibility error too high! xAx:{error:.2e}, <X,A>:{errorX:.2e}" - ) - print(f"Maximum feasibility error at solution x: {max_error}") - - assert X is not None - - data_dict["d"] = info["cost"] - - # sanity check - final_cost = np.trace(self.solver_vars["Q"] @ X) - if abs(final_cost - info["cost"]) / info["cost"] >= 1e-1: - print( - f"Warning: cost is inconsistent: {final_cost:.3e}, {info['cost']:.3e}" - ) - - eigs = np.linalg.eigvalsh(X)[::-1] - self.ranks.append(eigs) - - if self.lifter.robust: - x_dim = self.lifter.d + self.lifter.d**2 + 1 - wi = X[0, x_dim::x_dim] - print("should be plus or minus ones:", wi.round(4)) - - if self.solver_vars["qcqp_cost"] is not None: - cost_tight = self.duality_gap_is_zero( - info["cost"], verbose=tightness == "cost", data_dict=data_dict - ) - else: - cost_tight = False - rank_tight = self.is_rank_one( - eigs, verbose=tightness == "rank", data_dict=data_dict - ) - self.tightness_dict["rank"] = rank_tight - self.tightness_dict["cost"] = cost_tight # type: ignore - if tightness == "rank": - return rank_tight - elif tightness == "cost": - return cost_tight - - def get_A_list(self, var_dict=None): - if var_dict is None: - A_known = [] - if self.use_known: - A_known += [constraint.A_sparse_ for constraint in self.templates_known] - return A_known + [constraint.A_sparse_ for constraint in self.constraints] - else: - A_known = [] - if self.use_known: - A_known += [constraint.A_poly_ for constraint in self.templates_known] - A_list_poly = A_known + [ - constraint.A_poly_ for constraint in self.constraints - ] - return [A.get_matrix(var_dict) for A in A_list_poly] - - def get_A_b_list(self): - A_list = self.get_A_list() - A_b_list_all = self.lifter.get_A_b_list(A_list) - return A_b_list_all - - def generate_minimal_subset( - self, - reorder=False, - tightness="rank", - use_last=None, - use_bisection=False, - tol=TOL, - ): - def function(A_b_list_here, df_data, verbose=False): - """Function for bisection or brute_force""" - if (len(A_b_list_here) in df_data.keys()) and not verbose: - new_data = df_data[len(A_b_list_here)] - else: - new_data = {"lifter": str(self.lifter), "reorder": reorder} - X, info = self._test_tightness( - A_b_list_here, B_list=B_list, verbose=False - ) - dual_cost = info["cost"] - new_data["dual cost"] = dual_cost - if dual_cost is None: - print(f"{len(A_b_list_here)}: solver error? msg: {info['msg']}") - new_data["eigs"] = np.full(self.lifter.get_dim_X(), np.nan) - new_data["cost_tight"] = False - new_data["rank_tight"] = False - df_data[len(A_b_list_here)] = deepcopy(new_data) - return False - - elif self.duality_gap_is_zero(dual_cost): - print(f"{len(A_b_list_here)}: cost-tight") - new_data["cost_tight"] = True - else: - print(f"{len(A_b_list_here)}: not cost-tight yet") - new_data["cost_tight"] = False - - assert X is not None - assert self.solver_vars is not None - - eigs = np.linalg.eigvalsh(X)[::-1] - new_data["eigs"] = eigs - if self.is_rank_one(eigs): - print(f"{len(A_b_list_here)}: rank-tight") - new_data["rank_tight"] = True - else: - new_data["rank_tight"] = False - print(f"{len(A_b_list_here)}: not rank-tight yet") - df_data[len(A_b_list_here)] = deepcopy(new_data) - - if verbose: - print( - f"dual cost: {dual_cost:4.4e}, primal cost: {self.solver_vars['qcqp_cost']:4.4f}" - ) - print(f"largest 10 eigenvalues: {eigs[:10]}") - - if tightness == "rank": - return new_data["rank_tight"] - else: - return new_data["cost_tight"] - - A_b_list_all = self.get_A_b_list() - B_list = self.lifter.get_B_known() - - force_first = 1 - if self.use_known: - force_first += len(self.templates_known) - - if reorder: - if self.solver_vars is None: - self.find_local_solution() - assert self.solver_vars is not None - - # find the importance of each constraint - _, lamdas = solve_lambda( - self.solver_vars["Q"], - A_b_list_all, - self.solver_vars["xhat"], - B_list=B_list, - force_first=force_first, - tol=tol, - adjust=True, - primal=False, - verbose=False, - fixed_epsilon=EPSILON, - ) - if lamdas is None: - print("Warning: problem doesn't have feasible solution!") - print("Sanity checks:") - B_list = self.lifter.get_B_known() - X, info = self._test_tightness(A_b_list_all, B_list, verbose=False) - xhat_from_X, _ = rank_project(X, p=1) - xhat = self.solver_vars["xhat"] - - assert xhat is not None - print("max xhat error:", np.min(xhat - xhat_from_X)) - print("max Hx", np.max(np.abs(info["H"] @ xhat))) - print("max Hx_from_X", np.max(np.abs(info["H"] @ xhat_from_X))) - eigs = np.linalg.eigvalsh(info["H"].toarray()) - print("min eig of H", np.min(eigs)) - return None - print("found valid lamdas") - - # order the redundant constraints by importance - redundant_idx = np.argsort(np.abs(lamdas[force_first:]))[::-1] - sorted_idx = np.r_[np.arange(force_first), force_first + redundant_idx] - else: - sorted_idx = range(len(A_b_list_all)) - - inputs = [A_b_list_all[idx] for idx in sorted_idx] - - B_list = self.lifter.get_B_known() - df_data = [] - - if use_last is None: - start_idx = force_first - else: - start_idx = max(len(inputs) - use_last, force_first) - - df_data = {} - if use_bisection: - bisection( - function, (inputs, df_data), left_num=start_idx, right_num=len(inputs) - ) - else: - brute_force( - function, (inputs, df_data), left_num=start_idx, right_num=len(inputs) - ) - - df_tight = pd.DataFrame(df_data.values(), index=list(df_data.keys())) - if self.df_tight is None: - self.df_tight = df_tight - else: - self.df_tight = pd.concat([self.df_tight, df_tight], axis=0) - - minimal_indices = [] - if tightness == "cost": - min_num = df_tight[df_tight.cost_tight == 1].index.min() - elif tightness == "rank": - min_num = df_tight[df_tight.rank_tight == 1].index.min() - if not np.isnan(min_num): - minimal_indices = list(sorted_idx[:min_num]) - return minimal_indices - - def find_local_solution(self, n_inits=None, verbose=False, plot=False): - if n_inits is None: - n_inits = self.N_INITS - np.random.seed(NOISE_SEED) - Q = self.lifter.get_Q() - y = self.lifter.y_ - qcqp_that, qcqp_cost, info = find_local_minimum( - self.lifter, y=y, verbose=verbose, n_inits=n_inits, plot=plot - ) - self.solver_vars = dict(Q=Q, y=y, qcqp_cost=qcqp_cost, xhat=None) - self.solver_vars.update(info) # type: ignore - if qcqp_cost is not None: - xhat = self.lifter.get_x(qcqp_that) - self.solver_vars["xhat"] = xhat # type: ignore - - # calculate error for global estimate - self.solver_vars.update(self.lifter.get_error(qcqp_that)) - # calculate errors for local estimates - for key, qcqp_that_local in info.items(): - if key.startswith("local solution"): - solution_idx = key.strip("local solution ") - error_dict = self.lifter.get_error(qcqp_that_local) - self.solver_vars.update( - { - f"local {solution_idx} {error_name}": err - for error_name, err in error_dict.items() - } - ) - - return True - - def find_global_solution(self, data_dict={}): - from cert_tools.sdp_solvers import options_cvxpy - - assert self.solver_vars is not None - - A_b_list_all = self.get_A_b_list() - options_cvxpy["accept_unknown"] = True - - # find or certify global solution - if self.lifter.TIGHTNESS == "rank": - X = self.solver_vars["X"] - x, info = rank_project(X, p=1) - x = x.flatten() - else: - """Try to solve dual problem.""" - xhat = self.solver_vars["xhat"] - - H, info = solve_feasibility_sdp( - self.solver_vars["Q"], - A_b_list_all, - xhat, - adjust=True, - options=options_cvxpy, - tol=1e-10, - # soft_epsilon=False, - # eps_tol=1e-4, - soft_epsilon=True, - ) - if info["eps"] is not None: - cert = abs(info["eps"]) <= GLOBAL_THRESH - print(f"global solution eps: {info['eps']:.2e}, cert: {cert}") - data_dict["global solution cert"] = cert - - if info["eps"] and cert: - x = xhat - else: - x = None - - # sanity check: try to certify local minima (should fail) - keys = [key for key in data_dict.keys() if key.startswith("local solution")] - for key in keys: - x_local = data_dict[key] - x_local = self.lifter.get_x(theta=x_local) - H, info = solve_feasibility_sdp( - self.solver_vars["Q"], - A_b_list_all, - x_local, - adjust=True, - tol=1e-10, - options=options_cvxpy, - ) - if info["eps"] is not None: - print(f"local solution eps: {info['eps']:.2e}") - cert = abs(info["eps"]) <= GLOBAL_THRESH - data_dict[key + " cert"] = cert - - if x is not None: - theta = self.lifter.get_theta(x) - cost = self.lifter.get_cost(theta, self.solver_vars["y"]) - data_dict["global theta"] = theta - data_dict["global cost"] = cost - return True - return False - - def _test_tightness(self, A_b_list_all, B_list=[], verbose=False): - from cert_tools.sdp_solvers import options_cvxpy - - if self.solver_vars is None: - self.find_local_solution(verbose=verbose) - assert self.solver_vars is not None - - options_cvxpy["accept_unknown"] = True - X, info = solve_sdp_cvxpy( - self.solver_vars["Q"], - A_b_list_all, - B_list=B_list, - adjust=ADJUST_Q, - verbose=verbose, - primal=PRIMAL, - tol=TOL, - options=options_cvxpy, - ) - return X, info - - def update_variables(self): - # add new variable to the list of variables to study - try: - self.mat_vars = next(self.variable_iter) - return True - except StopIteration: - return False - - def extract_known_templates(self): - """Find which of the known constraints are relevant for the current variables.""" - templates_known_sub = [] - for c in self.templates_known: - var_subset = set(c.A_poly_.get_variables()) - if var_subset.issubset(self.mat_vars): - templates_known_sub.append(c) - - new_index_set = set([t.index for t in templates_known_sub]) - old_index_set = set([t.index for t in self.templates_known_sub]) - diff_index_set = new_index_set.difference(old_index_set) - - self.templates_known_sub = templates_known_sub - return len(diff_index_set) - - def learn_templates(self, plot=False, data_dict=None): - from popr import AutoTight - - templates = [] - mat_var_dict = self.lifter.get_var_dict(self.mat_vars) - param_dict = self.lifter.get_involved_param_dict(self.mat_vars) - - t1 = time.time() - Y = AutoTight.generate_Y( - self.lifter, - var_subset=self.mat_vars, - param_subset=param_dict, - factor=FACTOR, - ) - a_vectors = [] - if self.use_incremental: - for c in self.templates: - ai = get_vec(c.A_poly_.get_matrix(mat_var_dict)) - bi = self.lifter.augment_using_zero_padding(ai, param_dict) - a_vectors.append(bi) - if self.use_known: - for c in self.templates_known_sub: - ai = get_vec(c.A_poly_.get_matrix(mat_var_dict)) - bi = self.lifter.augment_using_zero_padding(ai, param_dict) - a_vectors.append(bi) - Y = np.vstack([Y] + a_vectors) - - if plot: - fig, ax = plt.subplots() - - print(f"data matrix Y has shape {Y.shape} ") - for i in range(AutoTight.N_CLEANING_STEPS + 1): - if i == 0: - print(f"getting basis...", end="") - else: - print(f"cleaning step {i}/{AutoTight.N_CLEANING_STEPS+1}...", end="") - basis_new, S = AutoTight.get_basis(self.lifter, Y, method=METHOD_NULL) - print("...done, analyzing...", end="") - corank = basis_new.shape[0] - if corank > 0: - AutoTight.test_S_cutoff(S, corank) - - bad_idx = AutoTight.clean_Y(basis_new, Y, S, plot=False) - - if plot: - if len(bad_idx): - plot_singular_values( - S, eps=AutoTight.EPS_SVD, label=f"run {i}", ax=ax - ) - else: - plot_singular_values(S, eps=AutoTight.EPS_SVD, ax=ax, label=None) - - if len(bad_idx) > 0: - print(f"there are {len(bad_idx)} bad basis vectors (with high error).") - Y = np.delete(Y, bad_idx, axis=0) - else: - print(f"no bad basis vectors found.") - break - - if basis_new.shape[0]: - for i, b in enumerate(basis_new): - constraint = Constraint.init_from_b( - index=self.constraint_index, - mat_var_dict=mat_var_dict, - mat_param_dict=param_dict, - b=b, - lifter=self.lifter, - convert_to_polyrow=self.APPLY_TEMPLATES_TO_OTHERS, - known=False, - ) - if constraint is None: - print("Warning: found an all-zero constraint; not adding it.") - continue - templates.append(constraint) - self.constraint_index += 1 - - if len(templates + self.templates): - # we assume that all known constraints are linearly independent, and also - # that all known+previously found constraints are linearly independent. - indep_templates = self.clean_constraints( - constraints=templates + self.templates, - remove_dependent=True, - remove_imprecise=False, - ) - else: - indep_templates = [] - - if data_dict is not None: - ttot = time.time() - t1 - data_dict["t learn templates"] = ttot - data_dict["n rank"] = Y.shape[1] - corank - data_dict["n nullspace"] = corank - - if len(templates) > 0: - n_all = len(indep_templates) - n_new = n_all - len(self.templates) - self.templates = indep_templates - return n_new, n_all - return 0, len(self.constraints) - - def apply_templates(self): - # the new templates are all the ones corresponding to the new matrix variables. - new_constraints = self.lifter.apply_templates( - self.templates, self.constraint_index - ) - self.constraint_index += len(new_constraints) - if not len(new_constraints): - return 0, 0 - - n_all = len(new_constraints) - n_new = n_all - len(self.constraints) - self.constraints = new_constraints - return n_new, n_all - - def clean_constraints( - self, - constraints, - remove_dependent=True, - remove_imprecise=True, - ): - """ - This function is used in two different ways. - - First use case: Given the new templates, in b-PolyRow form, we determine which of the templates are actually - independent to a_current. We only want to augment the independent ones, otherwise we waste computing effort. - - Second use case: After applying the templates to as many variable pairs as we wish, we call this function again, - to make sure all the matrices going into the SDP are in fact linearly independent. - """ - if remove_dependent: - # find which constraints are lin. dep. - A_vec = sp.vstack( - [constraint.a_full_ for constraint in constraints], format="coo" - ).T - - # make sure that matrix is tall (we have less constraints than number of dimensions of x) - if A_vec.shape[0] < A_vec.shape[1]: - print("Warning: fat matrix.") - - bad_idx = find_dependent_columns(A_vec) - if len(bad_idx): - for idx in sorted(bad_idx)[::-1]: - del constraints[idx] - - if remove_imprecise: - error, bad_idx = self.lifter.test_constraints( - [c.A_sparse_ for c in constraints if c.index not in self.index_tested], - errors="ignore", - n_seeds=2, - ) - self.index_tested = self.index_tested.union([c.index for c in constraints]) - if len(bad_idx): - print(f"removing {bad_idx} because high error, up to {error:.2e}") - for idx in list(sorted(bad_idx))[ - ::-1 - ]: # reverse order to not mess up indexing - del constraints[idx] - return constraints - - def get_known_templates(self, unroll=False): - templates_known = [] - if not self.use_known: - return templates_known - - # TODO(FD) we should not always recompute from scratch, but it's not very expensive so it's okay for now. - target_dict = self.lifter.get_var_dict(unroll_keys=unroll) - for i, Ai in enumerate( - self.lifter.get_A_known(var_dict=target_dict, output_poly=True) - ): - template = Constraint.init_from_A_poly( - lifter=self.lifter, - A_poly=Ai, - known=True, - index=self.constraint_index, - template_idx=self.constraint_index, - mat_var_dict=self.lifter.var_dict, - compute_polyrow_b=True, - ) - self.constraint_index += 1 - templates_known.append(template) - return templates_known - - def get_sufficient_templates(self, new_order, new_lifter): - """Use the templates in learner to populate the own templates and constraints.""" - template_indices = sorted( - [t.index for t in self.templates + self.templates_known] - ) - new_templates = [] - template_unique_idx = set() - - # The index list new_order contains the indices of constraints, but we want to track back - # which templates those corresponded to. - # We thus create the set of all template indices that are represented in the - # sufficient constraints. - all_constraints = self.templates_known + self.constraints - for i in new_order: - # the first constraint ALWAYS corresponds to A0, whichs not part of our templates. - if i > 0: - new_index = all_constraints[i - 1].template_idx - assert new_index in template_indices # just a sanity check - template_unique_idx.add(new_index) - - # now we can create the new templates by looping through the sufficent template list. - for t in template_unique_idx: - # find the template of the requested index - other_templates = self.templates + self.templates_known - template_indices = [temp.index for temp in other_templates] - idx = template_indices.index(t) # raises Error if t is not in list. - template = other_templates[idx] - - assert isinstance(template, Constraint) - - # scale the template to the dimensions of the new learner. - # (not the known ones as those where already through other_learner.templates_known) - if not template.known: - scaled_template = template.scale_to_new_lifter(new_lifter) - new_templates.append(scaled_template) - return new_templates - - def get_sorted_df(self, templates_poly=None, add_columns={}): - def sort_fun_sparsity(series): - # This is a bit complicated because we don't want the order to change - # because of the values, only isna() should matter. - # To make this work, we temporarily change the non-nan values to the order in which they appear - index = pd.MultiIndex.from_product([[0], series.index]) - series.index = index - scipy_sparse = series.sparse.to_coo()[0] - # don't start at 0 because it's considered empty by scipy - scipy_sparse.data = np.arange(1, 1 + scipy_sparse.nnz) - pd_sparse = pd.Series.sparse.from_coo(scipy_sparse, dense_index=True) - return pd_sparse - - if templates_poly is None: - templates_poly = self.templates_poly - - series = [] - - variable_dict_j = list(templates_poly.variable_dict_j.keys()) - for i, key_i in enumerate(templates_poly.variable_dict_i): - data = {j: float(val) for j, val in templates_poly.matrix[key_i].items()} - for key, idx_list in add_columns.items(): - # if the list is not empty, then indicate which constraints are required. - if idx_list is not None and len(idx_list): - idx_list = list(idx_list) - try: - data[key] = idx_list.index(i) - except Exception: - data[key] = -1 - # if the list is empty, all of them are required (and more) - else: - data[key] = 1.0 - series.append( - pd.Series( - data, - index=variable_dict_j + list(add_columns.keys()), - dtype="Sparse[float]", - ) - ) - df = pd.DataFrame( - series, dtype="Sparse[float]", index=templates_poly.variable_dict_i - ) - df.dropna(axis=1, how="all", inplace=True) - - try: - df_sorted = df.sort_values( - key=sort_fun_sparsity, - by=list(df.columns), - axis=0, - na_position="last", - inplace=False, - ) - df_sorted["order_sparsity"] = range(len(df_sorted)) - return df_sorted - except Exception as e: - print("failed to sort:", e) - return df - - def generate_templates_poly(self, constraints=None, factor_out_parameters=False): - if constraints is None: - constraints = self.templates_known + self.constraints - - plot_rows = [] - plot_row_labels = [] - j = -1 - old_mat_vars = "" - for constraint in constraints: - mat_vars = constraint.mat_var_dict - i = constraint.index - if factor_out_parameters: # use a and not b. - if constraint.polyrow_a_ is not None: - plot_rows.append(constraint.polyrow_a_) - else: - if constraint.a_ is not None: - polyrow_a = self.lifter.convert_a_to_polyrow( - constraint.a_, mat_vars - ) - elif constraint.a_full_ is not None: - polyrow_a = self.lifter.convert_a_to_polyrow( - constraint.a_full_, mat_vars - ) - plot_rows.append(polyrow_a) - else: - if constraint.polyrow_b_ is not None: - plot_rows.append(constraint.polyrow_b_) - else: - plot_rows.append( - self.lifter.convert_b_to_polyrow(constraint.b_, mat_vars) - ) - - if mat_vars != old_mat_vars: - j += 1 - plot_row_labels.append(f"{j}:b{i}") - # plot_row_labels.append(f"{j}{mat_vars}:b{i}") - old_mat_vars = mat_vars - else: - plot_row_labels.append(f"{j}:b{i}") - - templates_poly = PolyMatrix.init_from_row_list( - plot_rows, row_labels=plot_row_labels - ) - - # make sure variable_dict_j is ordered correctly. - templates_poly.variable_dict_j = self.lifter.var_dict_row( - mat_vars, force_parameters_off=factor_out_parameters - ) - return templates_poly - - def save_sorted_templates( - self, df, fname_root="", title="", drop_zero=False, simplify=True - ): - - # convert to poly matrix for plotting purposes only. - poly_matrix = PolyMatrix(symmetric=False) - keys_j = [] - keys_i = [] - for i, row in df.iterrows(): - for k, val in row[~row.isna()].items(): - if "order" in k or "required" in k: - continue - poly_matrix[i, k] = val - keys_j.append(k) - keys_i.append(i) - - variables_j = self.lifter.var_dict_row( - var_subset=self.lifter.var_dict, force_parameters_off=False - ) - assert set(keys_j).issubset(variables_j) - if drop_zero: - variables_j = {k: v for k, v in variables_j.items() if k in keys_j} - variables_i = {i: 1 for i in keys_i} - fig, ax = plot_basis( - poly_matrix, - variables_j=variables_j, - variables_i=variables_i, - discrete=True, - ) - ax.set_yticklabels([]) - ax.set_yticks([]) - if simplify: - ax.set_xticks([]) - ax.set_xticklabels([]) - else: - new_xticks = [] - for lbl in ax.get_xticklabels(): - lbl = lbl.get_text() - if "_" in lbl: # avoid double subscript - new_lbl = f"${lbl.replace('h-', '').replace(':', '^')}$" - else: - new_lbl = f"${lbl.replace('h-', '').replace(':', '_')}$" - new_xticks.append(new_lbl) - ax.set_xticklabels(new_xticks, fontsize=7) - - # plot a red vertical line at each new block of parameters. - params = [v.split("-")[0] for v in variables_j] - old_param = params[0] - for i, p in enumerate(params): - if p != old_param: - ax.axvline(i, color="red", linewidth=1.0) - ax.annotate( - text=f"${p.replace(':0', '^x').replace(':1', '^y').replace('l.','').replace('.','')}$", - xy=(float(i), 0.0), - fontsize=8, - color="red", - ) - old_param = p - ax.set_title(title) - if "required (sorted)" in df.columns: - for i, (_, row) in enumerate(df.iterrows()): - if row["required (sorted)"] < 0: - ax.add_patch( - matplotlib.patches.Rectangle( - (ax.get_xlim()[0], i - 0.5), - ax.get_xlim()[1] + 0.5, - 1.0, - fc="white", - alpha=0.5, - lw=0.0, - ) - ) - if fname_root != "": - savefig(fig, fname_root + "_templates-sorted.png") - return fig, ax - - def save_templates(self, fname_root="", title="", with_parameters=False): - - templates_poly = self.generate_templates_poly( - factor_out_parameters=not with_parameters - ) - variables_j = self.lifter.var_dict_row( - self.mat_vars, force_parameters_off=not with_parameters - ) - fig, ax = plot_basis(templates_poly, variables_j=variables_j, discrete=True) - if with_parameters: - for p in range(1, self.lifter.get_dim_P(self.mat_vars)): - ax.axvline(p * self.lifter.get_dim_X(self.mat_vars) - 0.5, color="red") - - ax.set_title(title) - if fname_root != "": - savefig(fig, fname_root + "_templates.png") - return fig, ax - - def save_tightness(self, fname_root, title=""): - labels = self.variable_list - assert self.solver_vars is not None - - fig, ax = plt.subplots() - xticks = range(len(self.dual_costs)) - ax.semilogy(xticks, self.dual_costs, marker="o") - ax.set_xticks(xticks, labels) - if self.solver_vars["qcqp_cost"] is not None: - ax.axhline(float(self.solver_vars["qcqp_cost"]), color="k", ls=":") - ax.set_title(title) - if fname_root != "": - savefig(fig, fname_root + "_tightness.png") - - fig, ax = plt.subplots() - for eig, label in zip(self.ranks, labels): - ax.semilogy(eig, label=label) - ax.legend(loc="upper right") - ax.set_title(title) - if fname_root != "": - savefig(fig, fname_root + "_eigs.png") - return - - def save_matrices_sparsity(self, A_matrices=None, fname_root="", title=""): - assert self.solver_vars is not None - - if A_matrices is None: - A_matrices = self.A_matrices - - Q = self.solver_vars["Q"].toarray() # type:ignore - - sorted_i = self.lifter.get_var_dict(unroll_keys=True) - A_matrices_sparse = [ - A_poly.get_matrix(variables=sorted_i) for A_poly in A_matrices - ] - - A_agg = get_aggregate_sparsity(A_matrices_sparse) - - fig, axs = plt.subplots(1, 2) - fig.set_size_inches(6, 3) - im0 = axs[0].matshow( - 1 - A_agg.toarray(), vmin=0, vmax=1, cmap="gray" - ) # 1 (white) is empty, 0 (black) is nonempty - - vmin = min(-np.max(Q), np.min(Q)) - vmax = max(np.max(Q), -np.min(Q)) - norm = matplotlib.colors.SymLogNorm(10**-5, vmin=vmin, vmax=vmax) - im1 = axs[1].matshow(Q, norm=norm) - - for ax in axs: - add_rectangles(ax, self.lifter.var_dict) - - add_colorbar(fig, axs[1], im1, nticks=3) - # only for dimensions - add_colorbar(fig, axs[0], im0, visible=False) - if fname_root != "": - savefig(fig, fname_root + "_matrices-sparisty.png") - return fig, axs - - def save_matrices_poly( - self, - A_matrices=None, - n_matrices=5, - fname_root="", - reduced_mode=False, - save_individual=False, - max_matrices=PLOT_MAX_MATRICES, - ): - if A_matrices is None: - A_matrices = self.A_matrices - - n_rows = n_matrices // 10 + 1 - n_cols = min(n_matrices, 10) - fig, axs = plt.subplots(n_rows, n_cols, squeeze=False) - fig.set_size_inches(5 * n_cols / n_rows, 5) - axs = axs.flatten() - i = 0 - for i, A_poly in enumerate(A_matrices): - if reduced_mode: - sorted_i = sorted(A_poly.variable_dict_i.keys()) - else: - sorted_i = self.lifter.get_var_dict(unroll_keys=True) - - plot_axs = [] - if i < n_matrices: - plot_axs.append(axs[i]) - - if save_individual and (i < max_matrices): - figi, axi = plt.subplots() - figi.set_size_inches(3, 3) - plot_axs.append(axi) - - if isinstance(A_poly, PolyMatrix): - A_sparse = A_poly.get_matrix(sorted_i) - else: - A_sparse = A_poly - cmap, norm, colorbar_yticks = initialize_discrete_cbar(A_sparse.data) # type: ignore - - for ax in plot_axs: - if sp.isspmatrix(A_sparse): - arr = A_sparse.toarray() # type: ignore - else: - arr = A_sparse - im = ax.matshow(arr, cmap=cmap, norm=norm) - # Use sp.isspmatrix to check if A_sparse is a scipy sparse matrix - if sp.isspmatrix(A_sparse): - add_rectangles(ax, self.lifter.var_dict) - cax = add_colorbar(fig, ax, im, size=0.1) - cax.set_yticklabels(colorbar_yticks) - - if save_individual and (i < max_matrices): - savefig(figi, fname_root + f"_matrix{i}.pdf") - for ax in axs[i + 1 :]: - ax.axis("off") - return fig, axs - -
-[docs] - def run( - self, - use_known: bool = USE_KNOWN, - use_incremental: bool = USE_INCREMENTAL, - variable_list: list[list[str]] | None = None, - verbose: bool = False, - plot: bool = False, - ): - """Run the template learning algorithm until we reach tightness, or run out of variables to add. - - :param use_known: whether to use the known constraints of the lfiter (must have get_A_known). - :param use_incremental: whether to keep adding the learned tempaltes to the set of known constraints, to enforce we find orthogonal ones. - :param variable_list: list of lists of variables to consider. If not given, will use the VARIABLE_LIST parameter of the lifter class. - - """ - data = [] - success = False - self.use_known = use_known - self.use_incremental = use_incremental - - if use_known: - self.templates_known = self.get_known_templates() - n_known = len(self.templates_known) - print(f"there are total {n_known} known constraints") - - if variable_list is None: - variable_list = self.lifter.VARIABLE_LIST - self.variable_iter = iter(variable_list) - - while 1: - # add one more variable to the list of variables to vary - if not self.update_variables(): - print("no more variables to add") - break - print(f"======== {self.mat_vars} ========") - - n_new = 0 - if use_known: - n_known_here = self.extract_known_templates() - n_new += n_known_here - print( - f"using {n_known_here}/{n_known} known constraints (only the ones that contain the current variables)" - ) - - data_dict = {"variables": self.mat_vars} - param_dict = self.lifter.get_involved_param_dict(self.mat_vars) - - # Set the type expectation for the dictionary if using type hints - data_dict: dict[str, float | int | list | None] - data_dict["n dims"] = self.lifter.get_dim_Y( - var_subset=self.mat_vars, param_subset=param_dict - ) - - print("-------- templates learning --------") - # learn new templates, orthogonal to the ones found so far. - n_new_learned, n_all = self.learn_templates(plot=plot, data_dict=data_dict) - n_new += n_new_learned - print( - f"found {n_new_learned} learned templates, new total learned: {n_all} " - ) - data_dict["n templates"] = ( - len(self.templates) + len(self.templates_known) + 1 - ) - if n_new == 0: - data.append(data_dict) - continue - - if plot: - # turn the current list of templates into a poly matrix. - templates = self.templates_known + self.templates - poly_matrix = generate_poly_matrix(templates, lifter=self.lifter) - - # make sure we use sorted column names - variables_j_all = self.lifter.var_dict_row() - variables_j = { - key: val - for key, val in variables_j_all.items() - if key in poly_matrix.variable_dict_j - } - - fig, ax = plot_poly_matrix( - poly_matrix, variables_j, simplify=False, hom="l" - ) - w, h = fig.get_size_inches() - fig.set_size_inches(10, 10 * h / w) - - # apply the pattern to all landmarks - if self.APPLY_TEMPLATES_TO_OTHERS: - print("------- applying templates ---------") - t1 = time.time() - n_new, n_all = self.apply_templates() - print( - f"found {n_new} independent learned constraints, new total: {n_all} " - ) - ttot = time.time() - t1 - - data_dict["n constraints"] = n_all + len(self.templates_known) + 1 - print( - f"total including known and homogenization:", - data_dict["n constraints"], - ) - data_dict["t apply templates"] = ttot - else: - self.constraints = [] - for temp in self.templates: - con = deepcopy(temp) - con.template_idx = temp.index - self.constraints.append(con) - - t1 = time.time() - print("-------- checking tightness ----------") - self.reset_tightness_dict() - is_tight = self.is_tight(verbose=verbose, data_dict=data_dict) - ttot = time.time() - t1 - data_dict["t check tightness"] = ttot - data.append(data_dict) - if is_tight: - success = True - break - return data, success
- - -
-[docs] - def apply(self, lifter: StateLifter, use_known: bool = False) -> list: - """Apply the learned templates to a new lifter.""" - constraints = lifter.apply_templates(self.templates) - - if use_known: - # if we set use_known=True in running AutoTemplate, then we learned only - # constraints that were not already known, so we need to add them to the - # overall set of constraints. - A_known = lifter.get_A_known() - assert isinstance(A_known, list) - return A_known + [c.A_sparse_ for c in constraints] # type: ignore
-
- -
- -
-
-
- -
- -
-

© Copyright 2025, POPR Contributors.

-
- - Built with Sphinx using a - theme - provided by Read the Docs. - - -
-
-
-
-
- - - - \ No newline at end of file diff --git a/docs/build/_modules/popr/auto_tight.html b/docs/build/_modules/popr/auto_tight.html deleted file mode 100644 index 6226fdc..0000000 --- a/docs/build/_modules/popr/auto_tight.html +++ /dev/null @@ -1,521 +0,0 @@ - - - - - - - - popr.auto_tight — POPR 0.0.1 documentation - - - - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -

Source code for popr.auto_tight

-import matplotlib.pylab as plt
-import numpy as np
-import scipy.sparse as sp
-import scipy.sparse.linalg as splinalg
-from cert_tools.linalg_tools import find_dependent_columns, get_nullspace
-
-from popr.utils.common import get_vec
-from popr.utils.constraint import Constraint
-from popr.utils.plotting_tools import add_colorbar, initialize_discrete_cbar
-
-
-
-[docs] -class AutoTight(object): - """Class for automatic constraint generation.""" - - # consider singular value zero below this - EPS_SVD = 1e-5 - - # basis pursuit method, can be - # - qr: qr decomposition - # - qrp: qr decomposition with permutations (sparser), recommended - # - svd: svd - METHOD = "qrp" - - # normalize learned Ai or not - NORMALIZE = False - - # how much to oversample (>= 1) - FACTOR = 1.2 - - # number of times we remove bad samples from data matrix - N_CLEANING_STEPS = 1 # was 3 - - # maximum number of iterations of local solver - LOCAL_MAXITER = 100 - - # find and remove linearly dependent constraints - REDUCE_DEPENDENT = False - - def __init__(self): - pass - - @staticmethod - def clean_Y(basis_new, Y, s, plot=False): - errors = np.abs(basis_new @ Y.T) # Nb x n x n x Ns = Nb x Ns - if np.all(errors < 1e-10): - return [] - bad_bins = np.unique(np.argmax(errors, axis=1)) - if plot: - fig, ax = plt.subplots() - ax.semilogy(np.min(errors, axis=1)) - ax.semilogy(np.max(errors, axis=1)) - ax.semilogy(np.median(errors, axis=1)) - ax.semilogy(s) - return bad_bins - - @staticmethod - def test_S_cutoff(S, corank, eps_svd=None): - if eps_svd is None: - eps_svd = AutoTight.EPS_SVD - if corank > 1: - try: - assert abs(S[-corank]) / eps_svd < 1e-1 # 1e-1 1e-10 - assert abs(S[-corank - 1]) / eps_svd > 10 # 1e-11 1e-10 - except AssertionError: - print(f"there might be a problem with the chosen threshold {eps_svd}:") - print(S[-corank], eps_svd, S[-corank - 1]) - - @staticmethod - def get_basis_sparse( - lifter, var_list, param_list, A_known=[], plot=False, eps_svd=None - ): - - Y = AutoTight.generate_Y_sparse( - lifter, var_subset=var_list, param_subset=param_list, factor=1.0 - ) - basis, S = AutoTight.get_basis(lifter, Y, A_known=A_known, eps_svd=eps_svd) - AutoTight.test_S_cutoff(S, corank=basis.shape[0], eps_svd=eps_svd) - constraints = [] - for i, b in enumerate(basis): - constraints.append( - Constraint.init_from_b( - i, - b, - mat_var_dict=var_list, - mat_param_dict=param_list, - convert_to_polyrow=False, - known=False, - ) - ) - if plot: - plot_matrix = np.vstack([t.b_[None, :] for t in constraints]) - - cmap, norm, colorbar_yticks = initialize_discrete_cbar(plot_matrix) - X_dim = lifter.get_dim_X(var_list) - fig, ax = plt.subplots() - ax.axvline(X_dim - 0.5, color="red") - im = ax.matshow(plot_matrix, cmap=cmap, norm=norm) - ax.set_title(f"{var_list}, {param_list}") - cax = add_colorbar(fig, ax, im) - if colorbar_yticks is not None: - cax.set_yticklabels(colorbar_yticks) - plt.show(block=False) - return constraints - -
-[docs] - @staticmethod - def get_A_learned( - lifter, - A_known=[], - var_dict=None, - method=METHOD, - verbose=False, - ) -> list: - """Generate list of learned constraints by sampling the lifter. - - :param lifter: StateLifter object - :param A_known: list of known constraints, if given, will generate basis that is orthogonal to these given constraints. - :param var_dict: variable dictionary, if None, will use all variables - :param method: method to use for basis generation, can be 'qr', 'qrp', or 'svd'. 'qrp' is recommended. - :param verbose: if True, will print timing information - - :return: list of learned constraints. - """ - import time - - t1 = time.time() - Y = AutoTight.generate_Y(lifter, var_subset=var_dict, factor=1.0) - if verbose: - print(f"generate Y ({Y.shape}): {time.time() - t1:4.4f}") - t1 = time.time() - basis, S = AutoTight.get_basis(lifter, Y, A_known=A_known, method=method) - if verbose: - print(f"get basis ({basis.shape})): {time.time() - t1:4.4f}") - t1 = time.time() - A_learned = AutoTight.generate_matrices(lifter, basis, var_dict=var_dict) - if verbose: - print(f"get matrices ({len(A_learned)}): {time.time() - t1:4.4f}") - return A_learned
- - - @staticmethod - def get_A_learned_simple( - lifter, - A_known=[], - var_dict=None, - method=METHOD, - verbose=False, - ) -> list: - """Simplified version of get_A_learned that does not consider parameters.""" - import time - - t1 = time.time() - Y = AutoTight.generate_Y_simple(lifter, var_subset=var_dict, factor=1.5) - if verbose: - print(f"generate Y ({Y.shape}): {time.time() - t1:4.4f}") - t1 = time.time() - if len(A_known): - basis_known = np.vstack( - [ - np.asarray(get_vec(Ai.get_matrix(var_dict))) - for Ai in A_known - if get_vec(Ai.get_matrix(var_dict)) is not None - ] - ).T - else: - basis_known = None - basis, S = AutoTight.get_basis( - lifter, Y, basis_known=basis_known, method=method - ) - if verbose: - print(f"get basis ({basis.shape})): {time.time() - t1:4.4f}") - t1 = time.time() - A_learned = AutoTight.generate_matrices_simple(lifter, basis, var_dict=var_dict) - if verbose: - print(f"get matrices ({len(A_learned)}): {time.time() - t1:4.4f}") - return A_learned - - @staticmethod - def generate_Y_simple(lifter, var_subset, factor): - # need at least dim_Y different random setups - dim_Y = lifter.get_dim_X(var_subset) - n_seeds = int(dim_Y * factor) - Y = np.empty((n_seeds, dim_Y)) - for seed in range(n_seeds): - np.random.seed(seed) - - theta = lifter.sample_theta() - x = lifter.get_x(theta=theta, parameters=None, var_subset=var_subset) - X = np.outer(x, x) - Y[seed, :] = get_vec(X) - return Y - - @staticmethod - def generate_Y_sparse(lifter, var_subset, param_subset, factor=FACTOR, ax=None): - from popr.base_lifters import StateLifter - - assert isinstance(lifter, StateLifter) - assert lifter.HOM in param_subset - - # need at least dim_Y different random setups - dim_Y = lifter.get_dim_Y(var_subset, param_subset) - n_seeds = int(dim_Y * factor) - Y = np.empty((n_seeds, dim_Y)) - for seed in range(n_seeds): - np.random.seed(seed) - - theta = lifter.sample_theta() - parameters = lifter.sample_parameters(theta) - - if seed < 10 and ax is not None: - if np.ndim(lifter.theta) == 1: - ax.scatter(np.arange(len(theta)), theta) - else: - ax.scatter(*theta[:, :2].T) - - x = lifter.get_x(theta=theta, parameters=parameters, var_subset=var_subset) - X = np.outer(x, x) - - # generates [1*x, a1*x, ..., aK*x] - p = lifter.get_p(parameters=parameters, param_subset=param_subset) - Y[seed, :] = np.kron(p, get_vec(X)) - return Y - - @staticmethod - def generate_Y(lifter, factor=FACTOR, ax=None, var_subset=None, param_subset=None): - # need at least dim_Y different random setups - dim_Y = lifter.get_dim_Y(var_subset, param_subset) - n_seeds = int(dim_Y * factor) - Y = np.empty((n_seeds, dim_Y)) - for seed in range(n_seeds): - np.random.seed(seed) - - theta = lifter.sample_theta() - parameters = lifter.sample_parameters(theta) - if seed < 10 and ax is not None: - if np.ndim(lifter.theta) == 1: - ax.scatter(np.arange(len(theta)), theta) - else: - ax.scatter(*theta[:, :2].T) - - x = lifter.get_x(theta=theta, parameters=parameters, var_subset=var_subset) - X = np.outer(x, x) - - # generates [1*x, a1*x, ..., aK*x] - p = lifter.get_p(parameters=parameters, param_subset=param_subset) - assert p[0] == 1 - Y[seed, :] = np.kron(p, get_vec(X)) - return Y - - @staticmethod - def get_basis( - lifter, - Y, - A_known: list = [], - basis_known: np.ndarray | None = None, - method=METHOD, - eps_svd=None, - ): - """Generate basis from lifted state matrix Y. - - :param A_known: if given, will generate basis that is orthogonal to these given constraints. - - :return: basis, S - """ - if eps_svd is None: - eps_svd = AutoTight.EPS_SVD - - # if there is a known list of constraints, add them to the Y so that resulting nullspace is orthogonal to them - if basis_known is not None: - if len(A_known): - print( - "Warning: ignoring given A_known because basis_all is also given." - ) - Y = np.vstack([Y, basis_known.T]) - elif len(A_known): - A = np.vstack( - [lifter.augment_using_zero_padding(get_vec(a)) for a in A_known] - ) - Y = np.vstack([Y, A]) - - basis, info = get_nullspace(Y, method=method, tolerance=eps_svd) - - basis[np.abs(basis) < lifter.EPS_SPARSE] = 0.0 - return basis, info["values"] - - @staticmethod - def generate_matrices_simple( - lifter, - basis, - normalize=NORMALIZE, - sparse=True, - trunc_tol=1e-10, - var_dict=None, - ): - """ - Generate constraint matrices from the rows of the nullspace basis matrix. - """ - try: - n_basis = len(basis) - except Exception: - n_basis = basis.shape[0] - - if isinstance(var_dict, list): - var_dict = lifter.get_var_dict(var_dict) - - from popr.base_lifters import StateLifter - - assert isinstance(lifter, StateLifter) - - A_list = [] - for i in range(n_basis): - ai = basis[i] - Ai = lifter.get_mat(ai, sparse=sparse, correct=True, var_dict=None) - # Normalize the matrix - if normalize and not sparse: - # Ai /= np.max(np.abs(Ai)) - assert isinstance(Ai, np.ndarray) - Ai /= np.linalg.norm(Ai, p=2) # type: ignore - elif normalize and sparse: - Ai /= splinalg.norm(Ai, ord="fro") - # Sparsify and truncate - if sparse: - Ai.eliminate_zeros() # type: ignore - else: - Ai[np.abs(Ai) < trunc_tol] = 0.0 # type: ignore - # add to list - A_list.append(Ai) - return A_list - - @staticmethod - def generate_matrices( - lifter, - basis, - normalize=NORMALIZE, - sparse=True, - trunc_tol=1e-10, - var_dict=None, - ): - """ - Generate constraint matrices from the rows of the nullspace basis matrix. - """ - from popr.base_lifters import StateLifter - - assert isinstance(lifter, StateLifter) - - try: - n_basis = len(basis) - except Exception: - n_basis = basis.shape[0] - - if isinstance(var_dict, list): - var_dict = lifter.get_var_dict(var_dict) - - A_list = [] - basis_reduced = [] - for i in range(n_basis): - ai = lifter.get_reduced_a(bi=basis[i], var_subset=var_dict, sparse=True) - basis_reduced.append(ai) - basis_reduced = sp.vstack(basis_reduced) - - if AutoTight.REDUCE_DEPENDENT: - bad_idx = find_dependent_columns(basis_reduced.T, tolerance=1e-6) - else: - bad_idx = [] - - for i in range(basis_reduced.shape[0]): # type: ignore - if i in bad_idx: - continue - ai = basis_reduced[[i], :].toarray().flatten() # type: ignore - Ai = lifter.get_mat(ai, sparse=sparse, correct=True, var_dict=None) - # Normalize the matrix - if normalize and not sparse: - # Ai /= np.max(np.abs(Ai)) - Ai /= np.linalg.norm(Ai, p=2) # type: ignore - elif normalize and sparse: - Ai /= splinalg.norm(Ai, ord="fro") - # Sparsify and truncate - if sparse: - Ai.eliminate_zeros() # type: ignore - else: - Ai[np.abs(Ai) < trunc_tol] = 0.0 # type: ignore - # add to list - A_list.append(Ai) - return A_list - -
-[docs] - @staticmethod - def get_duality_gap(cost_local, cost_sdp): - return (cost_local - cost_sdp) / abs(cost_sdp)
-
- -
- -
-
-
- -
- -
-

© Copyright 2025, POPR Contributors.

-
- - Built with Sphinx using a - theme - provided by Read the Docs. - - -
-
-
-
-
- - - - GitHub logo - - - - - \ No newline at end of file diff --git a/docs/build/_modules/popr/base_lifters/_base_class.html b/docs/build/_modules/popr/base_lifters/_base_class.html deleted file mode 100644 index a3f9dc4..0000000 --- a/docs/build/_modules/popr/base_lifters/_base_class.html +++ /dev/null @@ -1,884 +0,0 @@ - - - - - - - - popr.base_lifters._base_class — POPR 0.0.1 documentation - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
-
    -
  • - - -
  • -
  • -
-
-
-
-
- -

Source code for popr.base_lifters._base_class

-"""
-The BaseClass contains all the functionalities that are required by StateLifter but that
-are tedious and uninteresting, such as converting between different formats.
-
-Ideally, the user never has to look at this code.
-"""
-
-import itertools
-from abc import abstractmethod
-from collections.abc import Iterable
-
-import numpy as np
-import scipy.sparse as sp
-from poly_matrix import PolyMatrix, unroll
-
-from popr.utils.common import create_symmetric, get_labels, get_vec
-from popr.utils.constraint import Constraint, remove_dependent_constraints
-
-
-class BaseClass(object):
-    # Homogenization variable name
-    HOM = "h"
-
-    # set elements below this threshold to zero.
-    EPS_SPARSE = 1e-9
-
-    # properties of template scaling
-    ALL_PAIRS = True
-    # Below only have effect if ALL_PAIRS is False.
-    # Then, they determine the clique size hierarchy.
-    CLIQUE_SIZE = 5
-    STEP_SIZE = 1
-
-    # tolerance for feasibility error of learned constraints
-    EPS_ERROR = 1e-8
-
-    PARAM_LEVELS = ["no", "p", "ppT"]
-
-    @property
-    @abstractmethod
-    def var_dict(self) -> dict:
-        pass
-
-    @property
-    @abstractmethod
-    def param_dict(self) -> dict:
-        pass
-
-    @abstractmethod
-    def sample_theta(self) -> np.ndarray:
-        pass
-
-    @abstractmethod
-    def sample_parameters(self) -> np.ndarray:
-        pass
-
-    @staticmethod
-    def get_variable_indices(var_subset, variable="z"):
-        return np.unique(
-            [int(v.split("_")[-1]) for v in var_subset if v.startswith(f"{variable}_")]
-        )
-
-    def __init__(self, d, param_level, n_parameters):
-        assert param_level in self.PARAM_LEVELS
-        self.param_level = param_level
-        self.d = d
-
-        if param_level == "no":
-            self.n_parameters = 1
-        elif param_level in ["p", "ppT"]:
-            self.n_parameters = n_parameters
-        else:
-            raise ValueError(f"Unknown param_level: {param_level}")
-        # n_parameters * (self.d + (self.d * (self.d + 1)) // 2)
-        self.generate_random_setup()
-
-    ### Functionalities related to var_dict
-    def get_var_dict(self, var_subset=None, unroll_keys=False):
-        if var_subset is not None:
-            var_dict = {k: v for k, v in self.var_dict.items() if k in var_subset}
-            if unroll_keys:
-                return unroll(var_dict)
-            else:
-                return var_dict
-        if unroll_keys:
-            return unroll(self.var_dict)
-        return self.var_dict
-
-    def get_param_dict(self, param_subset=None):
-        if param_subset is not None:
-            return {k: v for k, v in self.param_dict.items() if k in param_subset}
-        return self.param_dict
-
-    ### Functionalities related to random setups
-    @property
-    def theta(self):
-        if self.theta_ is None:
-            self.theta_ = self.sample_theta()
-        return self.theta_
-
-    @theta.setter
-    def theta(self, t):
-        assert (
-            self.theta_ is None
-        ), "The property self.theta is only meant to be set once!"
-        self.theta_ = t
-
-    @property
-    def parameters(self) -> dict:
-        if self.parameters_ is None:
-            self.parameters_ = self.sample_parameters()
-            assert isinstance(self.parameters_, dict)
-        return self.parameters_  # type: ignore
-
-    @parameters.setter
-    def parameters(self, p):
-        assert (
-            self.parameters_ is None
-        ), "The property self.parameters is only meant to be set once!"
-        assert isinstance(p, dict)
-        self.parameters_ = p
-
-    def extract_A_known(self, A_known, var_subset, output_type="csc"):
-        """
-        Extract from the list of constraint matrices only the ones that
-        touch only a subset of var_subset.
-        """
-        if output_type == "dense":
-            sub_A_known = np.empty((0, self.get_dim_Y(var_subset)))
-        else:
-            sub_A_known = []
-        for A in A_known:
-            A_poly, var_dict = PolyMatrix.init_from_sparse(A, self.var_dict)
-
-            assert len(A_poly.get_variables()) > 0
-
-            # if all of the non-zero elements of A_poly are in var_subset,
-            # we can use this matrix.
-            if np.all([v in var_subset for v in A_poly.get_variables()]):
-                Ai = A_poly.get_matrix(
-                    self.get_var_dict(var_subset), output_type=output_type
-                )
-                if output_type == "dense":
-                    ai = self.augment_using_zero_padding(
-                        get_vec(Ai, correct=True), var_subset
-                    )
-                    sub_A_known = np.r_[sub_A_known, ai[None, :]]
-                else:
-                    assert isinstance(sub_A_known, list)
-                    sub_A_known.append(Ai)
-        return sub_A_known
-
-    def get_param_idx_dict(self, var_subset=None):
-        """
-        Give the current subset of variables, extract the parameter dictionary to use.
-        Example:
-            var_subset = ['z_0', 'x_1']
-            -> Parameters to include:  self.HOM (always), p_0, p_1
-        - if param_level == 'no': {'l': 0}
-        - if param_level == 'p': {'l': 0, 'p_0:0': 1, ..., 'p_0:d-1': d}
-        - if param_level == 'ppT': {'l': 0, 'p_0:0.p_0:0': 1, ..., 'p_0:d-1:.p_0:d-1': 1}
-        """
-        # TODO(FD) change to use  param_subset instead.
-        param_subset = [self.HOM] + [
-            f"p_{i}" for i in self.get_variable_indices(var_subset)
-        ]
-        return unroll(self.get_param_dict(param_subset))
-
-    def get_mat(self, vec, sparse=False, var_dict=None, correct=True):
-        """Convert (N+1)N/2 vectorized matrix to NxN Symmetric matrix in a way that preserves inner products.
-
-        In particular, this means that we divide the off-diagonal elements by sqrt(2).
-
-        :param vec (ndarray): vector of upper-diagonal elements
-        :return: symmetric matrix filled with vec.
-        """
-        # len(vec) = k = n(n+1)/2 -> dim_x = n =
-        if var_dict is None:
-            pass
-
-        elif not isinstance(var_dict, dict):
-            var_dict = {k: v for k, v in self.var_dict.items() if k in var_dict}
-
-        Ai = create_symmetric(
-            vec, correct=correct, sparse=sparse, eps_sparse=self.EPS_SPARSE
-        )
-        if var_dict is None:
-            return Ai
-
-        # if var_dict is not None, then Ai corresponds to the subblock
-        # defined by var_dict, of the full constraint matrix.
-        Ai_poly, __ = PolyMatrix.init_from_sparse(Ai, var_dict, unfold=True)
-        from poly_matrix.poly_matrix import augment
-
-        augment_var_dict = augment(self.var_dict)
-        all_var_dict = {key[2]: 1 for key in augment_var_dict.values()}
-        return Ai_poly.get_matrix(all_var_dict)
-
-    def var_list_row(
-        self, var_subset=None, param_subset=None, force_parameters_off=False
-    ):
-        if var_subset is None:
-            var_subset = list(self.var_dict.keys())
-        elif isinstance(var_subset, dict):
-            var_subset = list(var_subset.keys())
-
-        if param_subset is None:
-            param_subset = self.param_dict
-
-        label_list = []
-        if force_parameters_off:
-            param_dict = {self.HOM: 0}
-        else:
-            param_dict = unroll(
-                self.get_param_dict(param_subset)
-            )  # self.get_param_idx_dict(var_subset)
-
-        for idx, key in enumerate(param_dict.keys()):
-            for i in range(len(var_subset)):
-                zi = var_subset[i]
-                sizei = self.var_dict[zi]
-                for di in range(sizei):
-                    keyi = f"{zi}:{di}" if sizei > 1 else f"{zi}"
-                    for j in range(i, len(var_subset)):
-                        zj = var_subset[j]
-                        sizej = self.var_dict[zj]
-                        if zi == zj:
-                            djs = range(di, sizej)
-                        else:
-                            djs = range(sizej)
-
-                        for dj in djs:
-                            keyj = f"{zj}:{dj}" if sizej > 1 else f"{zj}"
-                            label_list.append(f"{key}-{keyi}.{keyj}")
-            # for zi, zj in vectorized_var_list:
-            # label_list += self.get_labels(key, zi, zj)
-            assert len(label_list) == (idx + 1) * self.get_dim_X(var_subset)
-        return label_list
-
-    def var_dict_row(self, var_subset=None, force_parameters_off=False):
-        return {
-            label: 1
-            for label in self.var_list_row(
-                var_subset, force_parameters_off=force_parameters_off
-            )
-        }
-
-    def get_basis_from_poly_rows(self, basis_poly_list, var_subset=None):
-        var_dict = self.get_var_dict(var_subset=var_subset)
-
-        all_dict = {label: 1 for label in self.var_list_row(var_subset)}
-        basis_reduced = np.empty((0, len(all_dict)))
-        for i, bi_poly in enumerate(basis_poly_list):
-            # test that this constraint holds
-
-            bi = bi_poly.get_matrix(([self.HOM], all_dict))
-
-            if bi.shape[1] == self.get_dim_X(var_subset) * self.get_dim_P():
-                ai = self.get_reduced_a(bi, var_subset=var_subset)
-                Ai = self.get_mat(ai, var_dict=var_dict)
-            elif bi.shape[1] == self.get_dim_X():
-                Ai = self.get_mat(bi, var_dict=var_subset)
-
-            err, idx = self.test_constraints([Ai], errors="print")
-            if len(idx):
-                print(f"found b{i} has error: {err}")
-                continue
-
-            # test that this constraint is lin. independent of previous ones.
-            basis_reduced_test = np.vstack([basis_reduced, bi.toarray()])
-            rank = np.linalg.matrix_rank(basis_reduced_test)
-            if rank == basis_reduced_test.shape[0]:
-                basis_reduced = basis_reduced_test
-            else:
-                print(f"b{i} is linearly dependant after factoring out parameters.")
-        print(f"left with {basis_reduced.shape} total constraints")
-        return basis_reduced
-
-    def convert_polyrow_to_Apoly(self, poly_row, correct=True):
-        """Convert poly-row to reduced a.
-
-        poly-row has elements with keys "pk:l.xi:m.xj:n",
-        meaning this element corresponds to the l-th element of parameter i,
-        and the m-n-th element of xj times xk.
-        """
-        parameters = self.get_p()
-        param_dict = dict(zip(unroll(self.param_dict), parameters))
-
-        poly_mat = PolyMatrix(symmetric=True)
-        for key in poly_row.variable_dict_j:
-            param, var_keys = key.split("-")
-            param_val = param_dict[param]
-
-            keyi_m, keyj_n = var_keys.split(".")
-            m = keyi_m.split(":")[-1]
-            n = keyj_n.split(":")[-1]
-
-            # divide off-diagonal elements by sqrt(2)
-            newval = poly_row[self.HOM, key] * param_val
-            if correct and not ((keyi_m == keyj_n) and (m == n)):
-                newval /= np.sqrt(2)
-
-            poly_mat[keyi_m, keyj_n] += newval
-        return poly_mat
-
-    def convert_polyrow_to_Asparse(self, poly_row, var_subset=None):
-        poly_mat = self.convert_polyrow_to_Apoly(poly_row, correct=False)
-
-        var_dict = self.get_var_dict(var_subset)
-        mat_var_list = []
-        for var, size in var_dict.items():
-            if size == 1:
-                mat_var_list.append(var)
-            else:
-                mat_var_list += [f"{var}:{i}" for i in range(size)]
-        mat_sparse = poly_mat.get_matrix({m: 1 for m in mat_var_list})
-        return mat_sparse
-
-    def convert_polyrow_to_a(self, poly_row, var_subset=None, sparse=False):
-        """Convert poly-row to reduced a.
-
-        poly-row has elements with keys "pk:l.xi:m.xj:n",
-        meaning this element corresponds to the l-th element of parameter i,
-        and the m-n-th element of xj times xk.
-        """
-        mat_sparse = self.convert_polyrow_to_Asparse(poly_row, var_subset)
-        return get_vec(mat_sparse, correct=False, sparse=sparse)
-
-    # TODO(FD) consider removing this cause only used in tests.
-    def convert_a_to_polyrow(
-        self,
-        a,
-        var_subset=None,
-    ) -> PolyMatrix:
-        """Convert a array to poly-row."""
-        if var_subset is None:
-            var_subset = self.var_dict
-        var_dict = self.get_var_dict(var_subset)
-        dim_X = self.get_dim_X(var_subset)
-
-        try:
-            dim_a = len(a)
-        except Exception:
-            dim_a = a.shape[1]
-        assert dim_a == dim_X
-
-        mat = create_symmetric(a, sparse=True, eps_sparse=self.EPS_SPARSE)
-        poly_mat, __ = PolyMatrix.init_from_sparse(mat, var_dict)
-        poly_row = PolyMatrix(symmetric=False)
-        for keyi, keyj in itertools.combinations_with_replacement(var_dict, 2):
-            if keyi in poly_mat.matrix and keyj in poly_mat.matrix[keyi]:
-                val = poly_mat.matrix[keyi][keyj]
-                labels = get_labels(self.HOM, keyi, keyj, self.var_dict)
-                if keyi != keyj:
-                    vals = val.flatten()
-                else:
-                    # TODO: use get_vec instead?
-                    vals = val[np.triu_indices(val.shape[0])]
-                assert len(labels) == len(vals)
-                for label, v in zip(labels, vals):
-                    if np.any(np.abs(v) > self.EPS_SPARSE):
-                        poly_row[self.HOM, label] = v
-        return poly_row
-
-    def convert_b_to_polyrow(
-        self, b, var_subset, param_subset=None, tol=1e-10
-    ) -> PolyMatrix:
-        """Convert (augmented) b array to poly-row."""
-        if isinstance(b, PolyMatrix):
-            raise NotImplementedError(
-                "can't call convert_b_to_polyrow with PolyMatrix yet."
-            )
-
-        assert len(b) == self.get_dim_Y(var_subset, param_subset)
-        poly_row = PolyMatrix(symmetric=False)
-        mask = np.abs(b) > tol
-
-        # get the variable names such as p_0:0-x:0.x:4 whch corresponds to p_0[0]*x[0]*x[4]
-        var_list_row = self.var_list_row(var_subset, param_subset)
-        assert len(b) == len(var_list_row)
-
-        for idx in np.where(mask == True)[0]:
-            poly_row[self.HOM, var_list_row[idx]] = b[idx]
-        return poly_row
-
-    def get_dim_x(self, var_subset=None):
-        var_dict = self.get_var_dict(var_subset)
-        return sum([val for val in var_dict.values()])
-
-    def get_dim_p(self, param_subset=None):
-        param_dict = self.get_param_dict(param_subset)
-        return sum([val for val in param_dict.values()])
-
-    def get_dim_Y(self, var_subset=None, param_subset=None):
-        dim_X = self.get_dim_X(var_subset=var_subset)
-        dim_P = self.get_dim_P(param_subset=param_subset)
-        return int(dim_X * dim_P)
-
-    def get_dim_X(self, var_subset=None):
-        dim_x = self.get_dim_x(var_subset)
-        return int(dim_x * (dim_x + 1) / 2)
-
-    def get_dim_P(self, param_subset=None):
-        return len(self.get_p(param_subset=param_subset))
-
-    def get_reduced_a(
-        self, bi, param_here=None, var_subset=None, param_subset=None, sparse=False
-    ):
-        """
-        Extract first block of bi by summing over other blocks times the parameters.
-        """
-        if param_here is None:
-            param_here = self.get_p(param_subset=param_subset)
-
-        if isinstance(bi, np.ndarray):
-            len_b = len(bi)
-        elif isinstance(bi, PolyMatrix):
-            bi = bi.get_matrix(([self.HOM], self.var_dict_row(var_subset)))
-            len_b = bi.shape[1]  # type: ignore
-        else:
-            # bi can be a scipy sparse matrix,
-            len_b = bi.shape[1]
-
-        n_params = self.get_dim_P(param_subset=param_subset)
-        dim_X = self.get_dim_X(var_subset)
-        n_parts = len_b / dim_X
-        assert (
-            n_parts == n_params
-        ), f"{len_b} does not not split in dim_P={n_params} parts of size dim_X={dim_X}"
-
-        ai = np.zeros(dim_X)
-        for i, p in enumerate(param_here):
-            if isinstance(bi, np.ndarray):
-                ai += p * bi[i * dim_X : (i + 1) * dim_X]
-            elif isinstance(bi, sp.csc_array):
-                ai += p * bi[0, i * dim_X : (i + 1) * dim_X].toarray().flatten()
-            else:
-                raise ValueError("untreated case:", type(bi))
-        if sparse:
-            ai_sparse = sp.csr_array(ai[None, :])
-            ai_sparse.eliminate_zeros()
-            return ai_sparse
-        else:
-            return ai
-
-    def augment_using_zero_padding(self, ai, param_subset=None):
-        n_parameters = self.get_dim_P(param_subset)
-        return np.hstack([ai, np.zeros((n_parameters - 1) * len(ai))])
-
-    def augment_using_parameters(self, x, param_subset=None):
-        p = self.get_p(param_subset)
-        return np.kron(p, x)
-
-    def compute_Ai(self, templates, var_dict, param_dict):
-        """
-        Take all elements from the list of templates and apply them
-        to the given pair of var_list and param_list.
-        """
-
-        A_list = []
-        for k, template in enumerate(templates):
-            assert template.b_ is not None
-            assert isinstance(template, Constraint)
-            # First, we find the current parameters, so that we can factor
-            # them into b and compute a from it.
-            p_here = self.get_p(param_subset=param_dict)
-
-            # We need to partition the vector b into its subblocks
-            # so that we can compute a from it.
-            X_dim = self.get_dim_X(template.mat_var_dict)
-            assert self.get_dim_X(var_dict) == X_dim
-            p_dim = self.get_dim_p(template.mat_param_dict)
-            assert self.get_dim_p(param_dict) == p_dim
-            n_blocks = int(len(template.b_) / X_dim)
-            assert n_blocks == p_dim
-
-            a = p_here[0] * template.b_[:X_dim]
-            for i in range(n_blocks - 1):
-                a += p_here[i + 1] * template.b_[(i + 1) * X_dim : (i + 2) * X_dim]
-
-            if not np.any(np.abs(a) > self.EPS_SPARSE):
-                print(f"matrix {k} is zero")
-                continue
-
-            a_test = self.get_reduced_a(
-                template.b_,
-                var_subset=template.mat_var_dict,
-                param_subset=template.mat_param_dict,
-                param_here=p_here,
-                sparse=False,
-            )
-            assert isinstance(a_test, np.ndarray)
-            np.testing.assert_allclose(a, a_test)
-
-            # Get a symmetric matrix where the upper and lower parts have been filled with a,
-            # and applying the correction to the diagonal.
-            # Note that we do not set var_dict because otherwise A would already
-            # be the zero-padded large matrix.
-            A = self.get_mat(a, sparse=True, correct=True)
-
-            # Get the corresponding PolyMatrix.
-            A_poly, __ = PolyMatrix.init_from_sparse(
-                A,
-                var_dict=self.get_var_dict(var_dict),
-                symmetric=True,
-                unfold=False,
-            )
-            A_list.append(A_poly)
-        return A_list
-
-    def get_constraint_rank(self, A_list_poly, output_sorted=False):
-        """Find the number of independent constraints when they are of the form A_i @ x = 0.
-
-        :param A_list_poly: list of constraints matrices
-
-        :return: rank (int) and sorted matrices (list, if output_sorted=True) where the first rank matrices correspond to
-                 linearly independent matrices.
-        """
-        x = self.get_x()
-
-        current_rank = 0
-        independent_indices = []
-        dependent_indices = []
-        basis_incremental = np.zeros((len(x), 0))
-        for i, Ai in enumerate(A_list_poly):
-            if isinstance(Ai, PolyMatrix):
-                new_candidate = (Ai.get_matrix(self.var_dict) @ x).reshape((-1, 1))
-            else:
-                new_candidate = (Ai @ x).reshape((-1, 1))
-            basis_candidate = np.hstack([basis_incremental, new_candidate])
-            new_rank = np.linalg.matrix_rank(basis_candidate)
-            if new_rank == current_rank + 1:
-                independent_indices.append(i)
-                basis_incremental = basis_candidate
-                current_rank = new_rank
-            else:
-                dependent_indices.append(i)
-        if not output_sorted:
-            return current_rank
-        A_list_sorted = [A_list_poly[i] for i in independent_indices] + [
-            A_list_poly[i] for i in dependent_indices
-        ]
-        return current_rank, A_list_sorted
-
-    def apply_template(self, bi_poly, n_parameters=None, verbose=False):
-        if n_parameters is None:
-            n_parameters = len(self.parameters)
-
-        new_poly_rows = []
-        # find the number of variables that this constraint touches.
-        unique_idx = set()
-        for key in bi_poly.variable_dict_j:
-            param, var_keys = key.split("-")
-            vars = var_keys.split(".")
-            vars += param.split(".")
-            for var in vars:
-                var_base = var.split(":")[0]
-                if "_" in var_base:
-                    i = int(var_base.split("_")[-1])
-                    unique_idx.add(i)
-
-        if len(unique_idx) == 0:
-            return [bi_poly]
-        elif len(unique_idx) > 3:
-            raise ValueError("unexpected triple dependencies!")
-
-        variable_indices = self.get_variable_indices(self.var_dict)
-        # if z_0 is in this constraint, repeat the constraint for each landmark.
-        for idx in itertools.combinations(variable_indices, len(unique_idx)):
-            new_poly_row = PolyMatrix(symmetric=False)
-            for key in bi_poly.variable_dict_j:
-                # need intermediate variables cause otherwise z_0 -> z_1 -> z_2 etc. can happen.
-                key_ij = key
-                for from_, to_ in zip(unique_idx, idx):
-                    key_ij = key_ij.replace(f"x_{from_}", f"xi_{to_}")
-                    key_ij = key_ij.replace(f"w_{from_}", f"wi_{to_}")
-                    key_ij = key_ij.replace(f"z_{from_}", f"zi_{to_}")
-                    key_ij = key_ij.replace(f"p_{from_}", f"pi_{to_}")
-                key_ij = (
-                    key_ij.replace("zi", "z")
-                    .replace("pi", "p")
-                    .replace("xi", "x")
-                    .replace("wi", "w")
-                )
-                if verbose and (key != key_ij):
-                    print("changed", key, "to", key_ij)
-
-                try:
-                    params = key_ij.split("-")[0]
-                    pi, pj = params.split(".")
-                    pi, di = pi.split(":")
-                    pj, dj = pj.split(":")
-                    if pi == pj:
-                        if not (int(dj) >= int(di)):
-                            raise IndexError(
-                                "something went wrong in augment_basis_list"
-                            )
-                except ValueError as e:
-                    pass
-                new_poly_row[self.HOM, key_ij] = bi_poly[self.HOM, key]
-            new_poly_rows.append(new_poly_row)
-        return new_poly_rows
-
-    def apply_templates(
-        self, templates, starting_index=0, var_dict=None, all_pairs=None
-    ):
-
-        if all_pairs is None:
-            all_pairs = self.ALL_PAIRS
-        if var_dict is None:
-            var_dict = self.var_dict
-
-        new_constraints = []
-        index = starting_index
-        for template in templates:
-            constraints = self.apply_template(template.polyrow_b_)
-            template.applied_list = []
-            for new_constraint in constraints:
-                template.applied_list.append(
-                    Constraint.init_from_polyrow_b(
-                        index=index,
-                        polyrow_b=new_constraint,
-                        lifter=self,
-                        template_idx=template.index,
-                        known=template.known,
-                        mat_var_dict=var_dict,
-                    )
-                )
-                new_constraints += template.applied_list
-                index += 1
-
-        if len(new_constraints):
-            remove_dependent_constraints(new_constraints)
-        return new_constraints
-
-    def get_vec_around_gt(self, delta: float = 0):
-        """Sample around ground truth.
-        :param delta: sample from gt + std(delta) (set to 0 to start from gt.)
-        """
-        return self.theta + np.random.normal(size=self.theta.shape, scale=delta)
-
-    def test_constraints(self, A_list, errors: str = "raise", n_seeds: int = 3):
-        """
-        :param A_list: can be either list of sparse matrices, or poly matrices
-        :param errors: "raise" or "print" detected violations.
-        """
-        max_violation = -np.inf
-        j_bad = set()
-
-        for j, A in enumerate(A_list):
-            if isinstance(A, PolyMatrix):
-                A = A.get_matrix(self.get_var_dict(unroll_keys=True))
-
-            for i in range(n_seeds):
-                if i == 0:
-                    x = self.get_x().flatten()
-                else:
-                    np.random.seed(i)
-                    t = self.sample_theta()
-                    p = self.sample_parameters()
-                    x = self.get_x(theta=t, parameters=p).flatten()
-
-                constraint_violation = abs(float(x.T @ A @ x))
-                max_violation = max(max_violation, constraint_violation)
-                if constraint_violation > self.EPS_ERROR:
-                    msg = f"big violation at {j}: {constraint_violation:.1e}"
-                    j_bad.add(j)
-                    if errors == "raise":
-                        raise ValueError(msg)
-                    elif errors == "print":
-                        print(msg)
-                    elif errors == "ignore":
-                        pass
-                    else:
-                        raise ValueError(errors)
-        return max_violation, j_bad
-
-    def get_A0(self, var_subset=None):
-        if var_subset is not None:
-            var_dict = {k: self.var_dict[k] for k in var_subset}
-        else:
-            var_dict = self.var_dict
-        A0 = PolyMatrix()
-        A0[self.HOM, self.HOM] = 1.0
-        return A0.get_matrix(var_dict)
-
-    def get_A_b_list(self, A_list, var_subset=None):
-        return [(self.get_A0(var_subset), 1.0)] + [(A, 0.0) for A in A_list]
-
-    def sample_parameters_landmarks(self, landmarks: np.ndarray):
-        """Used by RobustPoseLifter, RangeOnlyLocLifter: the default way of adding landmarks to parameters."""
-        parameters = {self.HOM: 1.0}
-        n_landmarks = landmarks.shape[0]
-
-        if self.param_level == "no":
-            return parameters
-
-        for i in range(n_landmarks):
-            if self.param_level == "p":
-                parameters[f"p_{i}"] = landmarks[i]
-            elif self.param_level == "ppT":
-                parameters[f"p_{i}"] = np.hstack(  # type: ignore
-                    [
-                        landmarks[i],
-                        get_vec(  # type: ignore
-                            np.outer(landmarks[i], landmarks[i]),
-                            correct=False,
-                            sparse=False,
-                        ),
-                    ]
-                )
-        return parameters
-
-    def get_error(self, t) -> dict:
-        err = np.linalg.norm(t - self.theta) ** 2 / self.theta.size
-        return {"MSE": err, "error": err}
-
-    def generate_random_setup(self):
-        if self.parameters is None:
-            self.parameters = self.sample_parameters()
-        if self.theta is None:
-            self.theta = self.sample_theta()
-
-    def get_x(
-        self,
-        theta: np.ndarray | None = None,
-        var_subset: Iterable | None = None,
-        **kwargs,
-    ) -> np.ndarray:
-        """
-        Get the lifted state vector x.
-
-        :param theta: if given, use this theta instead of the ground truth one.
-        :param var_subset: list of parameter keys to use. If None, use all.
-
-        :returns: lifted vector x
-        """
-        if theta is None:
-            theta = self.theta
-        if var_subset is None:
-            var_subset = self.var_dict
-
-        assert theta is not None
-
-        x_data = []
-        for key in var_subset:
-            if key == self.HOM:
-                x_data.append(1.0)
-            else:
-                print(
-                    "Warning: just using theta in x because there is no specific implementation."
-                )
-                x_data += list(theta)
-        return np.hstack(x_data)
-
-    def get_p(
-        self, parameters: dict | None = None, param_subset: dict | list | None = None
-    ):
-        if parameters is None:
-            parameters = self.parameters
-        if param_subset is None:
-            param_subset = self.param_dict
-
-        assert isinstance(parameters, dict)
-
-        p_data = []
-        for key in param_subset:
-            if key == self.HOM:
-                p_data.append(1.0)
-            else:
-                param = parameters[key]
-                if np.ndim(param) == 0:
-                    p_data.append(param)
-                else:
-                    p_data += list(param)
-        return np.array(p_data)
-
- -
-
-
- -
- -
-

© Copyright 2025, POPR Contributors.

-
- - Built with Sphinx using a - theme - provided by Read the Docs. - - -
-
-
-
-
- - - - \ No newline at end of file diff --git a/docs/build/_modules/popr/base_lifters/poly_lifters.html b/docs/build/_modules/popr/base_lifters/poly_lifters.html deleted file mode 100644 index f60fc61..0000000 --- a/docs/build/_modules/popr/base_lifters/poly_lifters.html +++ /dev/null @@ -1,171 +0,0 @@ - - - - - - - - popr.base_lifters.poly_lifters — POPR 0.0.1 documentation - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
-
    -
  • - - -
  • -
  • -
-
-
-
-
- -

Source code for popr.base_lifters.poly_lifters

-import numpy as np
-
-from .state_lifter import StateLifter
-
-
-
-[docs] -class PolyLifter(StateLifter): - def __init__(self, degree, param_level="no"): - """Simple univariate polynomial lifter, mostly for testing and pedagogical purposes.""" - self.degree = degree - super().__init__(d=1, param_level=param_level) - - @property - def var_dict(self): - if self.var_dict_ is None: - self.var_dict_ = {self.HOM: 1, "t": 1} - self.var_dict_.update({f"z{i}": 1 for i in range(self.M)}) - return self.var_dict_ - - @property - def M(self): - return self.degree // 2 - 1 - - def sample_theta(self): - return np.random.rand(1) - - def get_error(self, t): - return {"MAE": float(abs(self.theta - t)), "error": float(abs(self.theta - t))} - - def get_x(self, theta=None, parameters=None, var_subset=None): - if theta is None: - theta = self.theta - return np.array([theta**i for i in range(self.degree // 2 + 1)]) - - def get_cost(self, theta, *args, **kwargs) -> float: - Q = self.get_Q() - x = self.get_x(theta).flatten() - return float(x.T @ Q @ x) - - def get_hess(self, *args, **kwargs): - raise NotImplementedError - - def local_solver(self, t0, *args, **kwargs): - from scipy.optimize import minimize - - sol = minimize(self.get_cost, t0) - info = {"success": sol.success} - return sol.x, info, sol.fun - - def plot(self, thetas, label=None): - from popr.utils.plotting_tools_poly import coordinate_system - - fig, ax = coordinate_system() - ys = [self.get_cost(t) for t in thetas] - ax.plot(thetas, ys, label=label) - ymin = min(-max(ys) / 3, min(ys)) - ax.set_ylim(ymin, max(ys)) - return fig, ax - - def __repr__(self): - return f"poly{self.degree}"
- -
- -
-
-
- -
- -
-

© Copyright 2025, POPR Contributors.

-
- - Built with Sphinx using a - theme - provided by Read the Docs. - - -
-
-
-
-
- - - - \ No newline at end of file diff --git a/docs/build/_modules/popr/base_lifters/robust_pose_lifter.html b/docs/build/_modules/popr/base_lifters/robust_pose_lifter.html deleted file mode 100644 index 1700557..0000000 --- a/docs/build/_modules/popr/base_lifters/robust_pose_lifter.html +++ /dev/null @@ -1,639 +0,0 @@ - - - - - - - - popr.base_lifters.robust_pose_lifter — POPR 0.0.1 documentation - - - - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
-
    -
  • - - -
  • -
  • -
-
-
-
-
- -

Source code for popr.base_lifters.robust_pose_lifter

-from abc import ABC, abstractmethod
-from copy import deepcopy
-
-import numpy as np
-from poly_matrix.poly_matrix import PolyMatrix
-from scipy.spatial.transform import Rotation as R
-
-from popr.utils.geometry import (
-    get_C_r_from_theta,
-    get_noisy_pose,
-    get_pose_errors_from_theta,
-    get_theta_from_C_r,
-)
-
-from .state_lifter import StateLifter
-
-N_TRYS = 10
-
-METHOD = "CG"
-SOLVER_KWARGS = dict(
-    min_gradient_norm=1e-7, max_iterations=10000, min_step_size=1e-8, verbosity=1
-)
-
-# TODO(FD) we need to add a penalty here, otherwise the local solution is not good.
-# However, the penalty results in inequality constraints etc. and that's not easy to deal with.
-PENALTY_RHO = 10
-PENALTY_U = 1e-3
-
-# the cutoff parameter of least squares. If residuals are >= BETA, they are considered outliers.
-BETA = 0.1
-
-
-
-[docs] -class RobustPoseLifter(StateLifter, ABC): - LEVELS = ["no", "xwT", "xxT"] - PARAM_LEVELS = ["no", "p", "ppT"] - LEVEL_NAMES = {"no": "no", "xwT": "x kron w", "xxT": "x kron x"} - MAX_DIST = 10.0 # maximum of norm of t. - - @property - def VARIABLE_LIST(self): - if not self.robust: - return [[self.HOM, "t", "c"]] - else: - base = [self.HOM, "t", "c"] - return [ - base, - base + ["w_0"], - base + ["z_0"], - base + ["w_0", "w_1"], - base + ["w_0", "z_0"], - base + ["z_0", "z_1"], - # base + ["w_0", "w_1", "z_0"], - # base + ["w_0", "w_1", "z_0", "z_1"], - ] - - # Add any parameters here that describe the problem (e.g. number of landmarks etc.) - def __init__( - self, - n_outliers=0, - level="no", - param_level="no", - d=2, - n_landmarks=3, - variable_list=None, - robust=False, - beta=BETA, - ): - """RobustPoseLifter is a general class for point-to-point, point-to-line, and point-to-plane registration problems, - with starndard or robust loss functions. - - The goal is to regress an unknown pose based on extrinsic measurements. - - See :class:`~popr.examples.WahbaLifter` for point-to-point registration and :class:`~popr.examples.MonoLifter`) for point-to-line registration. - - Implemented lifting functions are: - - - xwT: :math:`x \\otimes w` - - xxT: :math:`x \\otimes x` - """ - self.beta = beta - self.n_landmarks = n_landmarks - - self.robust = robust - self.level = level - if variable_list == "all": - variable_list = self.get_all_variables() - # elif variable_list is None: - # self.variable_list = self.VARIABLE_LIST - - if not robust: - assert level == "no" - - self.landmarks_ = None # will be initialized later - super().__init__( - level=level, - param_level=param_level, - d=d, - variable_list=variable_list, - n_outliers=n_outliers, - robust=robust, - ) - - def penalty(self, t, rho=PENALTY_RHO, u=PENALTY_U): - import autograd.numpy as anp - - try: - return anp.sum( # type: ignore - [rho * u * anp.log10(1 + anp.exp(hi / u)) for hi in self.h_list(t)] # type: ignore - ) - except RuntimeWarning: - u = PENALTY_U * 0.1 - return anp.sum( # type: ignore - [rho * u * anp.log10(1 + anp.exp(hi / u)) for hi in self.h_list(t)] # type: ignore - ) - - @property - def var_dict(self): - """Return key,size pairs of all variables.""" - var_dict = {self.HOM: 1, "t": self.d, "c": self.d**2} - if not self.robust: - return var_dict - - n = self.d**2 + self.d - if self.level == "xwT": - for i in range(self.n_landmarks): - var_dict.update({f"w_{i}": 1, f"z_{i}": n}) - elif self.level == "xxT": - var_dict.update({f"w_{i}": 1 for i in range(self.n_landmarks)}) - var_dict.update({"z_0": n**2}) - return var_dict - - @property - def param_dict(self): - return self.param_dict_landmarks - - def get_all_variables(self): - all_variables = [self.HOM, "t", "c"] - if self.robust: - if self.level == "xxT": - all_variables += [f"w_{i}" for i in range(self.n_landmarks)] - all_variables += ["z_0"] - elif self.level == "xwT": - for i in range(self.n_landmarks): - all_variables += [f"w_{i}", f"z_{i}"] - variable_list = [all_variables] - return variable_list - - def sample_theta(self): - """Generate a random new feasible point.""" - - # make sure random pose is looking at world centre (where landmarks are) - success = False - i = 0 - while not success: - pc_cw = self.get_random_position() - success = np.all(np.array(self.h_list(pc_cw)) <= 0) - if success: - break - i += 1 - if i >= N_TRYS: - raise ValueError("didn't find valid initialization") - - if self.d == 2: - angle = np.random.uniform(0, 2 * np.pi) - C = R.from_euler("z", angle).as_matrix()[:2, :2] - else: - C = R.random().as_matrix() - theta_x = get_theta_from_C_r(C, pc_cw) - - if self.robust: - outlier_index = np.random.choice( - self.n_landmarks, replace=False, size=self.n_outliers - ) - w = np.ones(self.n_landmarks) - w[outlier_index] = -1 - return np.hstack([theta_x, w]) - else: - return theta_x - - @property - def landmarks(self): - if self.landmarks_ is None: - self.landmarks_ = np.random.normal( - loc=0, scale=1.0, size=(self.n_landmarks, self.d) - ) - return self.landmarks_ - - def sample_parameters(self, theta=None): - if self.parameters_ is None: - return self.sample_parameters_landmarks(self.landmarks) - landmarks = np.random.normal(loc=0, scale=1.0, size=(self.n_landmarks, self.d)) - return self.sample_parameters_landmarks(landmarks) - - def get_x(self, theta=None, parameters=None, var_subset=None) -> np.ndarray: - """Get the lifted vector x given theta and parameters.""" - if theta is None: - theta = self.theta - if parameters is None: - parameters = self.parameters - if var_subset is None: - var_subset = self.var_dict.keys() - - if self.robust: - theta_here = theta[: -self.n_landmarks] - else: - theta_here = theta - - # RT below is R_cw. (c=camera, w=world) - RT, t = get_C_r_from_theta(theta_here, self.d) - R = RT.T - - x_data = [] - for key in var_subset: - if key == self.HOM: - x_data.append(1.0) - elif key == "t": - x_data += list(t) - elif key == "c": - x_data += list(R.flatten("C")) - elif "w" in key: - j = int(key.split("_")[-1]) - w_j = theta[-self.n_landmarks + j] - x_data.append(w_j) - elif (self.level == "xxT") and (key == "z_0"): - x_vec = list(get_theta_from_C_r(R, t)) - x_data += list(np.kron(x_vec, x_vec).flatten()) - elif (self.level == "xwT") and ("z" in key): - j = int(key.split("_")[-1]) - w_j = theta[-self.n_landmarks + j] - x_vec = get_theta_from_C_r(R, t) - x_data += list(x_vec * w_j) - dim_x = self.get_dim_x(var_subset=var_subset) - assert len(x_data) == dim_x - return np.array(x_data) - - def get_outlier_index(self): - if self.robust: - return np.where(self.theta[-self.n_landmarks :] == -1)[0] - else: - return [] - - def get_error(self, theta_hat): - - theta_hat_pose = theta_hat[: self.d + self.d**2] - theta_gt_pose = self.theta[: self.d + self.d**2] - return get_pose_errors_from_theta(theta_hat_pose, theta_gt_pose, self.d) - - def get_vec_around_gt(self, delta: float = 0): - """Sample around ground truth. - :param delta: sample from gt + std(delta) (set to 0 to start from gt.) - """ - if self.robust: - theta = deepcopy(self.theta[: self.d + self.d**2]) - C, r = get_C_r_from_theta(theta, self.d) - theta_noisy = get_noisy_pose(C, r, delta=delta) - theta_w = self.theta[self.d + self.d**2 :] - return np.r_[theta_noisy, theta_w] - else: - C, r = get_C_r_from_theta(self.theta, self.d) - theta_noisy = get_noisy_pose(C, r, delta=delta) - return theta_noisy - - def get_cost(self, theta, y): - if self.robust: - x = theta[: -self.n_landmarks] - w = theta[-self.n_landmarks :] - assert np.all(w**2 == 1.0) - else: - x = theta - - R, t = get_C_r_from_theta(x, self.d) - - cost = 0 - for i in range(self.n_landmarks): - res = self.residual_sq(R, t, self.landmarks[i], y[i]) - if self.robust: - cost += (1 + w[i]) / self.beta**2 * res + 1 - w[i] - else: - cost += res - return 0.5 * cost - - def local_solver( - self, t0, y, verbose=False, method=METHOD, solver_kwargs=SOLVER_KWARGS - ): - import pymanopt - from pymanopt.manifolds import Euclidean, Product, SpecialOrthogonalGroup - - if method == "CG": - from pymanopt.optimizers import ConjugateGradient as Optimizer # fastest - elif method == "SD": - from pymanopt.optimizers import SteepestDescent as Optimizer # slow - elif method == "TR": - from pymanopt.optimizers import TrustRegions as Optimizer # okay - else: - raise ValueError(method) - - if verbose: - solver_kwargs["verbosity"] = 2 - else: - solver_kwargs["verbosity"] = 0 - - # We assume that we know w! If we wanted to solve for w too we would need - # IRLS or similar. Since we just care about getting the global solution - # with a local sovler that's not necessary. - if self.robust: - w = self.theta[-self.n_landmarks :] - - manifold = Product((SpecialOrthogonalGroup(self.d, k=1), Euclidean(self.d))) - - @pymanopt.function.autograd(manifold) - def cost(R, t): - cost = 0 - for i in range(self.n_landmarks): - residual = self.residual_sq(R, t, self.landmarks[i], y[i]) - if self.robust: - cost += (1 + w[i]) / self.beta**2 * residual + 1 - w[i] - else: - cost += residual - return 0.5 * cost + self.penalty(t) - - @pymanopt.function.autograd(manifold) - def euclidean_gradient_unused(R, t): - grad_R = np.zeros(R.shape) - grad_t = np.zeros(t.shape) - for i in range(self.n_landmarks): - Wi = np.eye(self.d) - np.outer(y[i], y[i]) - # residual = (R @ pi + t).T @ Wi @ (R @ pi + t) - term = self.term_in_norm(R, t, self.landmarks[i], y[i]) - if self.robust: - grad_R += ( - 2 - * w[i] - / self.beta**2 - * np.outer(Wi.T @ term, self.landmarks[i]) - ) - grad_t += 2 * w[i] / self.beta**2 * Wi.T @ term - else: - grad_R += np.outer(Wi.T @ term, self.landmarks[i]) - grad_t += Wi.T @ term - return grad_R, grad_t - - euclidean_gradient = None - problem = pymanopt.Problem( - manifold, cost, euclidean_gradient=euclidean_gradient - ) - optimizer = Optimizer(**solver_kwargs) - - R_0, t_0 = get_C_r_from_theta(t0[: self.d + self.d**2], self.d) - res = optimizer.run(problem, initial_point=(R_0, t_0)) - R, t = res.point - - if verbose: - print("local solver sanity check:") - print("final penalty:", self.penalty(t)) - w = self.theta[-self.n_landmarks :] - for i in range(self.n_landmarks): - residual = self.residual_sq(R, t, self.landmarks[i], y[i]) - if w[i] == -1: - if verbose: - print(f"outlier residual: {residual:.4e}") - assert ( - residual > self.beta - ), f"outlier residual too small: {residual} <= {self.beta}" - else: - if verbose: - print(f"inlier residual: {residual:.4e}") - assert ( - residual < self.beta - ), f"inlier residual too large: {residual} > {self.beta}" - if verbose: - print("qcqp cost:", res.cost) - - if self.robust: - theta_hat = np.r_[get_theta_from_C_r(R, t), w] - else: - theta_hat = get_theta_from_C_r(R, t) - - cost_penalized = res.cost - if self.robust: - pen = self.penalty(t) - if abs(res.cost) > 1e-10: - assert abs(pen) / res.cost <= 1e-1, (pen, res.cost) - cost_penalized -= pen - - success = ("min step_size" in res.stopping_criterion) or ( - "min grad norm" in res.stopping_criterion - ) - info = { - "success": success, - "msg": res.stopping_criterion, - } - if success: - return theta_hat, info, cost_penalized - else: - return None, info, cost_penalized - - def test_and_add(self, A_list, Ai, output_poly): - x = self.get_x() - Ai_sparse = Ai.get_matrix(self.var_dict) - err = x.T @ Ai_sparse @ x - assert abs(err) <= 1e-10, err - if output_poly: - A_list.append(Ai) - else: - A_list.append(Ai_sparse) - - def get_A_known(self, var_dict=None, output_poly=False): - A_list = [] - if var_dict is None: - var_dict = self.var_dict - - if "c" in var_dict: - # enforce diagonal == 1 - for i in range(self.d): - Ei = np.zeros((self.d, self.d)) - Ei[i, i] = 1.0 - constraint = np.kron(Ei, np.eye(self.d)) - Ai = PolyMatrix(symmetric=True) - Ai["c", "c"] = constraint - Ai[self.HOM, self.HOM] = -1 - self.test_and_add(A_list, Ai, output_poly=output_poly) - - # enforce off-diagonal == 0 - for i in range(self.d): - for j in range(i + 1, self.d): - Ei = np.zeros((self.d, self.d)) - Ei[i, j] = 1.0 - Ei[j, i] = 1.0 - constraint = np.kron(Ei, np.eye(self.d)) - Ai = PolyMatrix(symmetric=True) - Ai["c", "c"] = constraint - self.test_and_add(A_list, Ai, output_poly=output_poly) - if self.robust: - for key in var_dict: - if "w" in key: - i = key.split("_")[-1] - Ai = PolyMatrix(symmetric=True) - Ai[self.HOM, self.HOM] = -1.0 - Ai[f"w_{i}", f"w_{i}"] = 1.0 - self.test_and_add(A_list, Ai, output_poly=output_poly) - - # below doesn't hold: w_i*w_j = += 1 - # for key_other in [k for k in var_dict if (k.startswith("w") and (k!= key))]: - # Ai = PolyMatrix(symmetric=True) - # Ai[self.HOM, self.HOM] = -1.0 - # Ai[key, key_other] = 0.5 - # self.test_and_add(A_list, Ai, output_poly=output_poly) - - if "z" in key: - if self.level == "xwT": - i = key.split("_")[-1] - """ each z_i equals x * w_i""" - - for j in range(self.d): - Ai = PolyMatrix(symmetric=True) - constraint = np.zeros((self.d + self.d**2)) - constraint[j] = 1.0 - Ai[self.HOM, f"z_{i}"] = constraint[None, :] - constraint = np.zeros((self.d)) - constraint[j] = -1.0 - Ai[f"t", f"w_{i}"] = constraint[:, None] - self.test_and_add(A_list, Ai, output_poly=output_poly) - - for j in range(self.d**2): - Ai = PolyMatrix(symmetric=True) - constraint = np.zeros((self.d + self.d**2)) - constraint[self.d + j] = 1.0 - Ai[self.HOM, f"z_{i}"] = constraint[None, :] - constraint = np.zeros((self.d**2)) - constraint[j] = -1.0 - Ai[f"c", f"w_{i}"] = constraint[:, None] - self.test_and_add(A_list, Ai, output_poly=output_poly) - return A_list - - def get_B_known(self): - """Get inequality constraints of the form x.T @ B @ x <= 0. - By default, we always add ||t|| <= MAX_DIST - """ - B1 = PolyMatrix(symmetric=True) - B1[self.HOM, self.HOM] = -self.MAX_DIST - B1["t", "t"] = np.eye(self.d) - return [B1.get_matrix(self.var_dict)] - - @abstractmethod - def h_list(self, t): - """ - Any inequality constraints to enforce, returned as a list [h_1(t), h_2(t), ...] - We use the convention h_i(t) <= 0. - - By default, we always add |t| <= MAX_DIST - """ - try: - import autograd.numpy as anp - - return [anp.sqrt(anp.sum(t[: self.d] ** 2)) - self.MAX_DIST] # type: ignore - except ModuleNotFoundError: - return [np.sqrt(np.sum(t[: self.d] ** 2)) - self.MAX_DIST] - - @abstractmethod - def get_random_position(self): - """Generate a new random position. Orientation angles will be drawn uniformly from [0, pi].""" - return None - - @abstractmethod - def term_in_norm(self, R, t, pi, ui) -> np.ndarray: - pass - - @abstractmethod - def residual_sq(self, R, t, pi, ui) -> float: - pass
- -
- -
-
-
- -
- -
-

© Copyright 2025, POPR Contributors.

-
- - Built with Sphinx using a - theme - provided by Read the Docs. - - -
-
-
-
-
- - - - GitHub logo - - - - - \ No newline at end of file diff --git a/docs/build/_modules/popr/base_lifters/state_lifter.html b/docs/build/_modules/popr/base_lifters/state_lifter.html deleted file mode 100644 index 206bf24..0000000 --- a/docs/build/_modules/popr/base_lifters/state_lifter.html +++ /dev/null @@ -1,365 +0,0 @@ - - - - - - - - popr.base_lifters.state_lifter — POPR 0.0.1 documentation - - - - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
-
    -
  • - - -
  • -
  • -
-
-
-
-
- -

Source code for popr.base_lifters.state_lifter

-from abc import abstractmethod
-
-import numpy as np
-
-from ._base_class import BaseClass
-
-
-
-[docs] -class StateLifter(BaseClass): - # sparse hierarchy: define the levels that are implemented - LEVELS = ["no"] - - # used for AutoTemplate - VARIABLE_LIST = [["h"]] - TIGHTNESS = "cost" - - # to be overwritten by inheriting class - NOISE = 1e-2 - - def __init__( - self, - level="no", - param_level="no", - d=2, - variable_list=None, - robust=False, - n_outliers=0, - n_parameters=1, - ): - - # variables that get overwritten upon initialization - self.parameters_ = None - self.theta_ = None - self.var_dict_ = None - self.y_ = None - - self.robust = robust - self.n_outliers = n_outliers - - assert level in self.LEVELS - self.level = level - - if variable_list is not None: - self.variable_list = variable_list - else: - self.variable_list = self.VARIABLE_LIST - - if (param_level != "no") and (n_parameters == 1): - print("Warning: make sure to give the correct n_parameters for the level.") - - super().__init__(d, param_level, n_parameters) - - # MUST OVERWRITE THESE - - @property - def var_dict(self): - raise ValueError("Inheriting class must implement this!") - -
-[docs] - @abstractmethod - def sample_theta(self) -> np.ndarray: - """Randomly sample a feasible state theta. This function must be - implemented by the inheriting class.""" - raise NotImplementedError("need to implement sample_theta")
- - - # MUST OVERWRITE THESE FOR TIGHTNESS CHECKS - -
-[docs] - def get_Q(self, output_poly=False, noise=None): - """Construct the cost matrix Q. - - :param noise: set the noise level, if appropriate. - :param output_poly: if True, return the matrix in PolyMatrix format. - - :returns: the cost matrix as a sparse matrix or PolyMatrix. - """ - raise NotImplementedError( - "Need to impelement get_Q in inheriting class if you want to use it." - )
- - - def get_Q_from_y(self, y): - raise NotImplementedError( - "Need to impelement get_Q_from_y in inheriting class if you want to use it." - ) - -
-[docs] - def get_A_known( - self, - add_redundant: bool = False, - var_dict: dict | None = None, - output_poly: bool = False, - ) -> list: - """Construct the matrices defining the known equality constraints. - - :param add_redundant: if True, add redundant constraints. - :param var_dict: if provided, return only the matrices that involve these variables. - :param output_poly: if True, return the matrices in PolyMatrix format. - """ - return []
- - -
-[docs] - def get_B_known(self) -> list: - """Construct the matrices defining the known inequality constraints.""" - return []
- - - # MUST OVERWRITE THESE FOR ADDING PARAMETERS - -
-[docs] - def sample_parameters(self, theta=None) -> dict: - """Create random set of parameters. By default, there are no parameters - so this function just returns `{self.HOM: 1.0}`.""" - assert ( - self.param_level == "no" - ), "Need to overwrite sample_parameters to use level different than 'no'" - return {self.HOM: 1.0}
- - - @property - def param_dict(self): - assert ( - self.param_level == "no" - ), "Need to overwrite param_dict to use level different than 'no'" - return {self.HOM: 1} - - def get_involved_param_dict(self, var_subset): - """Find which parameters to include, given the current var_subset. Here we implicitly assume - that each parameter is associated with a variable. This is true for parameters that involve - substitution variables.""" - keys = [self.HOM] - for v in var_subset: - index = v.split("_") - if len(index) > 1: - index = int(index[-1]) - key = f"p_{index}" - if key not in keys: - keys.append(key) - return {k: self.param_dict[k] for k in keys if k in self.param_dict} - - # CAN OPTINALLY OVERWRITE THESE FOR BETTER PERFORMANCE - - def get_grad(self, theta, y=None) -> float: - raise NotImplementedError("must define get_grad if you want to use it.") - - def get_hess(self, theta, y=None) -> float: - raise NotImplementedError("must define get_hess if you want to use it.") - -
-[docs] - def get_cost(self, theta, y=None) -> float: - """Compute the cost of the given state theta. This uses the simple form - x.T @ Q @ x. Consider overwriting this for more efficient computations.""" - print( - "Warning: using default get_cost, which may be less efficient than a custom one." - ) - x = self.get_x(theta=theta).flatten("C") - if y is not None: - Q = self.get_Q_from_y(y) - else: - Q = self.get_Q() - return float(x.T @ Q @ x)
- - -
-[docs] - def local_solver(self, t0, y=None, *args, **kwargs): - """ - Default local solver that uses IPOPT to solve the QCQP problem defined by Q and the constraints matrices. - Consider overwriting this for more efficient solvers. - """ - print( - "Warning: using default local_solver, which may be less efficient than a custom one." - ) - print("Ignoring args and kwargs:", args, kwargs) - from cert_tools.sdp_solvers import solve_low_rank_sdp - - if y is not None: - Q = self.get_Q_from_y(y) - else: - Q = self.get_Q() - - B = self.get_B_known() - if len(B) > 0: - raise NotImplementedError( - "Inequality constraints are not currently considered by default solver. Must implement your own." - ) - - Constraints = self.get_A_b_list(A_list=self.get_A_known()) - x0 = self.get_x(theta=t0) - X, info = solve_low_rank_sdp( - Q, Constraints=Constraints, rank=1, verbose=True, x_cand=x0 - ) - # TODO(FD) identify when the solve is not successful. - info["success"] = True - try: - theta = self.get_theta(X[:, 0]) - except AttributeError: - theta = X[1 : 1 + self.d, 0] - return theta, info, info["cost"]
- - - @property - def param_dict_landmarks(self): - assert self.n_parameters is not None - - param_dict = {self.HOM: 1} - if self.param_level == "no": - return param_dict - if self.param_level == "p": - param_dict.update({f"p_{i}": self.d for i in range(self.n_parameters)}) - if self.param_level == "ppT": - # Note that ppT is actually - # [p; vech(ppT)] (linear and quadratic terms) - # TODO(FD): rename ppT to quadratic - param_dict.update( - { - f"p_{i}": self.d + int(self.d * (self.d + 1) / 2) - for i in range(self.n_parameters) - } - ) - return param_dict - -
-[docs] - def get_theta(self, x): - """Inverse of get_x: given lifted vector x, extract elements corresponding to theta.""" - assert np.ndim(x) == 1 or x.shape[1] == 1 - return x.flatten()[1 : 1 + self.d]
-
- -
- -
-
-
- -
- -
-

© Copyright 2025, POPR Contributors.

-
- - Built with Sphinx using a - theme - provided by Read the Docs. - - -
-
-
-
-
- - - - GitHub logo - - - - - \ No newline at end of file diff --git a/docs/build/_modules/popr/base_lifters/stereo_lifter.html b/docs/build/_modules/popr/base_lifters/stereo_lifter.html deleted file mode 100644 index 8748b96..0000000 --- a/docs/build/_modules/popr/base_lifters/stereo_lifter.html +++ /dev/null @@ -1,610 +0,0 @@ - - - - - - - - popr.base_lifters.stereo_lifter — POPR 0.0.1 documentation - - - - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
-
    -
  • - - -
  • -
  • -
-
-
-
-
- -

Source code for popr.base_lifters.stereo_lifter

-from abc import ABC, abstractmethod
-
-import numpy as np
-import scipy.sparse as sp
-from poly_matrix.poly_matrix import PolyMatrix
-
-from popr.utils.geometry import (
-    generate_random_pose,
-    get_C_r_from_theta,
-    get_noisy_pose,
-    get_pose_errors_from_theta,
-    get_T,
-    get_theta_from_C_r,
-)
-
-from .state_lifter import StateLifter
-
-NOISE = 1.0  #
-
-
-SOLVER_KWARGS = dict(
-    min_gradient_norm=1e-6, max_iterations=10000, min_step_size=1e-10, verbosity=1
-)
-
-
-
-[docs] -class StereoLifter(StateLifter, ABC): - """StereoLifter is a general lifter class for the stereo localization problem, supporting both 2D and 3D cases. - - See :class:`~popr.examples.Stereo2DLifter` for 2D and :class:`~popr.examples.Stereo3DLifter` for 3D. - """ - - NORMALIZE = True - - # Levels that were experimented with for creating a tight relaxation. - LEVELS = [ - "no", - "u@u", # ... - "u2", - "u@r", - "uuT", - "urT", - "uxT", - ] - PARAM_LEVELS = ["no", "p", "ppT"] - LEVEL_NAMES = { - "no": "$\\boldsymbol{u}_n$", - "urT": "$\\boldsymbol{u}\\boldsymbol{t}^\\top_n$", - "uxT": "$\\boldsymbol{u}\\boldsymbol{x}^\\top_n$", - } - - EPS_ERROR = 1e-7 # for constraints test. default is 1e-8 - - def __init__( - self, n_landmarks, d, level="no", param_level="no", variable_list=None - ): - self.y_ = None - self.n_landmarks = n_landmarks - self.landmarks_ = None # will be initialized on first access - super().__init__( - d=d, - level=level, - param_level=param_level, - variable_list=variable_list, - n_parameters=n_landmarks, - ) - - @property - @abstractmethod - def M_matrix(self): - raise NotImplementedError("Inheriting class must initialize M_matrix.") - - def get_all_variables(self): - return [[self.HOM, "x"] + [f"z_{i}" for i in range(self.n_landmarks)]] - - def get_level_dims(self, n=1): - """ - :param n: number of landmarks to consider - """ - return { - "no": 0, - "u@u": n, # ... - "u2": n * self.d, - "u@r": n, - "uuT": n * self.d**2, - "urT": n * self.d**2, - "uxT": n * (self.d * (self.d + self.d**2)), - } - - @property - def landmarks(self): - if self.landmarks_ is None: - landmarks = self.generate_random_landmarks(self.theta) - self.landmarks_ = landmarks - return self.landmarks_ - - def generate_random_landmarks(self, theta=None): - if theta is not None: - C, r = get_C_r_from_theta(theta, self.d) - if self.d == 3: - # sample left u, v coordinates in left image, and compute landmark coordinates from that. - fu, cu, b = self.M_matrix[0, [0, 2, 3]] - fv, cv = self.M_matrix[1, [1, 2]] - u = np.random.uniform(0, cu * 2, self.n_landmarks) - v = np.random.uniform(0, cv * 2, self.n_landmarks) - z = np.random.uniform(0, 5, self.n_landmarks) - x = 1 / fu * (z * (u - cu) - b) - y = 1 / fv * z * (v - cv) - points_cam = np.c_[x, y, z] # N x 3 - else: - # sample left u in left image, and compute landmark coordinates from that. - fu, cu, b = self.M_matrix[0, :] - u = np.random.uniform(0, cu * 2, self.n_landmarks) - y = np.random.uniform(1, 5, self.n_landmarks) - x = 1 / fu * (y * (u - cu) - b) - points_cam = np.c_[x, y] - # transform points from camera to world - return (C.T @ (points_cam.T - r[:, None])).T - else: - return np.random.rand(self.n_landmarks, self.d) - - def sample_parameters(self, theta=None): - landmarks = self.generate_random_landmarks(theta=self.theta) - return self.sample_parameters_landmarks(landmarks) - - def get_parameters(self, var_subset=None): - return self.get_p(param_subset=var_subset) - - @property - def VARIABLE_LIST(self): - return [ - [self.HOM, "x"], - [self.HOM, "z_0"], - [self.HOM, "x", "z_0"], - [self.HOM, "z_0", "z_1"], # should achieve tightness here - ] - - @property - def param_dict(self): - return self.param_dict_landmarks - - @property - def var_dict(self): - level_dim = self.get_level_dims()[self.level] - if self.var_dict_ is None: - self.var_dict_ = {self.HOM: 1} - self.var_dict.update({"x": self.d**2 + self.d}) - self.var_dict.update( - {f"z_{k}": self.d + level_dim for k in range(self.n_landmarks)} - ) - return self.var_dict_ - - def get_x(self, theta=None, parameters=None, var_subset=None): - """ - :param var_subset: list of variables to include in x vector. Set to None for all. - """ - if theta is None: - theta = self.theta - if parameters is None: - parameters = self.parameters - if var_subset is None: - var_subset = self.var_dict.keys() - - # TODO(FD) below is a bit hacky, these two variables should not both be called theta. - # theta is either (x, y, alpha) or (x, y, z, a1, a2, a3) - C, r = get_C_r_from_theta(theta, self.d) - if (self.param_level != "no") and (len(parameters) > 1): - landmarks = parameters - else: - landmarks = { - f"p_{i}": self.landmarks[i, :] for i in range(self.landmarks.shape[0]) - } - - x_data = [] - for key in var_subset: - if key == self.HOM: - x_data.append(1.0) - elif key == "x": - x_data += list(r) + list(C.flatten("C")) # row-wise flatten - elif "z" in key: - j = int(key.split("_")[-1]) - - pj = landmarks[f"p_{j}"][: self.d] # - - zj = C[self.d - 1, :] @ pj + r[self.d - 1] - u = 1 / zj * np.r_[C[: self.d - 1, :] @ pj + r[: self.d - 1], 1] - x_data += list(u) - - if self.level == "no": - continue - elif self.level == "u2": - x_data += list(u**2) - elif self.level == "u@u": - x_data += [u @ u] - elif self.level == "u@r": - x_data += [u @ r] - elif self.level == "uuT": - x_data += list(np.outer(u, u).flatten()) - elif self.level == "urT": - # this works - x_data += list(np.outer(u, r).flatten()) - elif self.level == "uxT": - x = np.r_[r, C.flatten("C")] - x_data += list(np.outer(u, x).flatten()) - dim_x = self.get_dim_x(var_subset=var_subset) - assert len(x_data) == dim_x - return np.array(x_data) - - def get_A_known(self, var_dict=None, output_poly=False): - """ - T = | cx' tx | - | cy' ty | - | cz' tz | - | 0 0 0 1 | - Let pj be the j-th landmark coordinate. - [xj] [cx @ pj + tx] - [yj] = [cy @ pj + ty] - [zj] [cz @ pj + tz] - - Let u be the substitution variable, which has d-1 elements. - Then we want to enforce that: - u_xj = 1/zj * xj -> u_xj * zj = xj -> (cz @ pj + tz) * u_xj - (cx @ pj + tx) = 0 - u_yj = 1/zj * yj -> u_yj * zj = yj -> same as above - u_zj = 1/zj -> u_zj * zj = 1 -> u_zj * (cz @ pj + tz) -1 = 0 - Writing things as homogeneous constraints: - a1) cz @ pj * u_xj + tz*u_xj - cx @ pj - h * tx = 0 - a2) -----1x------- --2x--- -- 3 -- --4--- - a3) cz @ pj * u_zj + tz*u_zj - h*h = 0 - ------1z------- --2z--- - """ - print("not using known stereo templates because they depend on the landmarks.") - return [] - - # x contains: [c1, c2, c3, t] - # z contains: [u_xj, u_yj, u_zj, H.O.T.] - if self.d == 2: - x = self.get_x() - _, tx, tz, cx1, cx2, cz1, cz2, u_xj, u_zj, *_ = x - cz = np.array([cz1, cz2]) - cx = np.array([cx1, cx2]) - pj = self.landmarks[0] - assert abs(cz @ pj * u_xj + tz * u_xj - cx @ pj - tx) < 1e-10 - assert abs(u_zj * cz @ pj + u_zj * tz - 1) < 1e-10 - elif self.d == 3: - x = self.get_x() - # fmt: off - (_, tx, ty, tz, cx1, cx2, cx3, cy1, cy2, cy3, cz1, cz2, cz3, u_x1, u_y1, u_z1, *_) = x - # fmt: on - p1 = self.landmarks[0] - assert ( - abs(u_z1 * (cx1 * p1[0] + cx2 * p1[1] + cx3 * p1[2]) + u_z1 * tx - u_x1) - < 1e-10 - ) - assert ( - abs(u_z1 * (cy1 * p1[0] + cy2 * p1[1] + cy3 * p1[2]) + u_z1 * ty - u_y1) - < 1e-10 - ) - assert ( - abs(u_z1 * (cz1 * p1[0] + cz2 * p1[1] + cz3 * p1[2]) + u_z1 * tz - 1) - < 1e-10 - ) - - if var_dict is None: - var_dict = self.var_dict - - A_known = [] - z_dim = self.get_level_dims()[self.level] - - if "x" not in var_dict or self.HOM not in var_dict: - return A_known - landmarks = [j for j in range(self.n_landmarks) if f"z_{j}" in var_dict] - for j in landmarks: - # one complete constraint has x, z_j and h. - pj = self.landmarks[j] - for i in range(self.d): - A = PolyMatrix() - # -----1i------- --2i--- -- 3 -- --4--- - # a1) cz @ pj * u_xj + tz*u_xj - cx @ pj - h * tx = 0 - # a2) cz @ pj * u_yj + tz*u_yj - cy @ pj - h * ty = 0 - # a3) cz @ pj * u_zj + tz*u_zj - h*h = 0 - # ------1i------- --2i--- - # --- 1i --- - fill_mat = np.zeros((self.d + self.d**2, self.d + z_dim)) - # chooses cz of x, and u_xj, u_yj or u_zj of z - fill_mat[-self.d :, i] = pj - - # --- 2 --- u_zj * tx - # chooses tz of x, and u_ij of z - fill_mat[self.d - 1, i] = 1.0 - A[f"x", f"z_{j}"] = fill_mat - - if i < self.d - 1: # u, (v) - fill_mat = np.zeros((self.d + self.d**2, 1)) - # chooses ci of x - fill_mat[(i + 1) * self.d : (i + 2) * self.d, 0] = -pj - - # chooses ti of x - fill_mat[i, 0] = -1 - A["x", self.HOM] = fill_mat - elif i == self.d - 1: # z - A[self.HOM, self.HOM] = -0 # 2.0 - if output_poly: - A_known.append(A) - else: - A_known.append(A.get_matrix(var_dict)) - self.test_constraints(A_known) - return A_known - - def sample_theta(self): - return generate_random_pose(d=self.d).flatten() - - def simulate_y(self, noise: float | None = None): - if noise is None: - noise = NOISE - - T = get_T(theta=self.theta, d=self.d) - - y_sim = np.zeros((self.n_landmarks, self.M_matrix.shape[0])) - for j in range(self.n_landmarks): - y_gt = T @ np.r_[self.landmarks[j], 1.0] - - # in 2d: y_gt[1] - # in 3d: y_gt[2] - y_gt /= y_gt[self.d - 1] - y_gt = self.M_matrix @ y_gt - y_sim[j, :] = y_gt + np.random.normal(loc=0, scale=noise, size=len(y_gt)) - return y_sim - - def get_Q( - self, - noise: float | None = None, - output_poly: bool = False, - use_cliques: list = [], - ) -> PolyMatrix | sp.csr_matrix | sp.csc_matrix: - if self.y_ is None: - if noise is None: - noise = NOISE - self.y_ = self.simulate_y(noise=noise) - - Q = self.get_Q_from_y(self.y_, output_poly=output_poly, use_cliques=use_cliques) - return Q - - def get_Q_from_y( - self, y, output_poly=False, use_cliques=[] - ) -> PolyMatrix | sp.csr_matrix | sp.csc_matrix: - """ - The least squares problem reads - min_T sum_{n=0}^{N-1} || y - Mtilde@z || - where the first d elements of z correspond to u, and Mtilde contains the first d-1 and last element of M - Mtilde is thus of shape d*2 by dim_z, where dim_z=d+dL (the additional Lasserre variables) - y is of length d*2, corresponding to the measured pixel values in left and right image. - """ - from poly_matrix.least_squares_problem import LeastSquaresProblem - - if len(use_cliques): - js = use_cliques - else: - js = range(y.shape[0]) - - # when using lifting (level=urT), then we have - # in 2d: M_tilde is 2 by 6, with first 2 columns: M[:, [0, 2]] - # in 3d: M_tilde is 4 by 12, with first 3 columns: M[:, [0, 1, 3]] - M_tilde = np.zeros((len(y[0]), self.var_dict["z_0"])) - M_tilde[:, : self.d] = self.M_matrix[:, list(range(self.d - 1)) + [self.d]] - - # in 2d: M[:, 1] - # in 3d: M[:, 2] - m = self.M_matrix[:, self.d - 1] - - ls_problem = LeastSquaresProblem() - for j in js: - ls_problem.add_residual({self.HOM: (y[j] - m), f"z_{j}": -M_tilde}) - - if output_poly: - Q = ls_problem.get_Q() - else: - Q = ls_problem.get_Q().get_matrix(self.var_dict) - if self.NORMALIZE: - Q /= self.n_landmarks * self.d - - # sanity check - x = self.get_x() - - # sanity checks. Below is the best conditioned because we don't have to compute B.T @ B, which - # can contain very large values. - B = ls_problem.get_B_matrix(self.var_dict) - errors = B @ x - cost_test = errors.T @ errors - if self.NORMALIZE: - cost_test /= self.n_landmarks * self.d - - if output_poly: - assert isinstance(Q, PolyMatrix) - cost_Q = x.T @ Q.get_matrix(self.var_dict, output_type="csr") @ x - else: - cost_Q = x.T @ Q @ x - assert abs(cost_test - cost_Q) < 1e-6, (cost_test, cost_Q) - if not len(use_cliques): - cost_raw = self.get_cost(self.theta, y) - assert abs(cost_test - cost_raw) < 1e-6, (cost_test, cost_raw) - assert isinstance(Q, (PolyMatrix, sp.csr_matrix, sp.csc_matrix)), type(Q) - return Q - - def get_theta(self, x): - return x[1 : 1 + self.d + self.d**2] - - def get_vec_around_gt(self, delta: float = 0): - if delta == 0: - return self.theta - - C, r = get_C_r_from_theta(self.theta, self.d) - if self.d == 2: - return super().get_vec_around_gt(delta=delta) - else: - return get_noisy_pose(C, r, delta) - - def get_C_cw(self, theta=None): - C_cw, __ = get_C_r_from_theta(theta, self.d) - return C_cw - - def get_position(self, theta=None): - C_cw, r_wc_c = get_C_r_from_theta(theta, self.d) - return (-C_cw.T @ r_wc_c)[None, :] - - def get_error(self, theta_hat): - return get_pose_errors_from_theta(theta_hat, self.theta, self.d) - - def local_solver_manopt(self, t0, y, W=None, verbose=False, method="CG", **kwargs): - """Alternative solver using Pymanopt. By default, :ref:`StateLifter.local_solver` by is used.""" - import pymanopt - from pymanopt.manifolds import Euclidean, Product, SpecialOrthogonalGroup - - if method == "CG": - from pymanopt.optimizers import ConjugateGradient as Optimizer # fastest - elif method == "SD": - from pymanopt.optimizers import SteepestDescent as Optimizer # slow - elif method == "TR": - from pymanopt.optimizers import TrustRegions as Optimizer # okay - else: - raise ValueError(method) - - solver_kwargs = SOLVER_KWARGS - solver_kwargs.update(kwargs) - - if verbose: - solver_kwargs["verbosity"] = 2 - else: - solver_kwargs["verbosity"] = 1 - - manifold = Product((SpecialOrthogonalGroup(self.d, k=1), Euclidean(self.d))) - - if W is None: - W = np.eye(4) if self.d == 3 else np.eye(2) - - @pymanopt.function.autograd(manifold) - def cost(R, t): - cost = 0 - for i in range(self.n_landmarks): - pi_cam = np.concatenate([R @ self.landmarks[i] + t, [1]], axis=0) # type: ignore - y_gt = self.M_matrix @ (pi_cam / pi_cam[self.d - 1]) - residual = y[i] - y_gt - cost += residual.T @ W @ residual - if self.NORMALIZE: - return cost / (self.n_landmarks * self.d) - return cost - - euclidean_gradient = None # set to None - problem = pymanopt.Problem( - manifold, cost, euclidean_gradient=euclidean_gradient # - ) - optimizer = Optimizer(**solver_kwargs) # type: ignore - - R_0, t_0 = get_C_r_from_theta(t0[: self.d + self.d**2], self.d) - res = optimizer.run(problem, initial_point=(R_0, t_0)) - R, t = res.point - - theta_hat = get_theta_from_C_r(R, t) - return theta_hat, res.stopping_criterion, res.cost - - def __repr__(self): - level_str = str(self.level).replace(".", "-") - return f"stereo{self.d}d_{level_str}_{self.param_level}"
- -
- -
-
-
- -
- -
-

© Copyright 2025, POPR Contributors.

-
- - Built with Sphinx using a - theme - provided by Read the Docs. - - -
-
-
-
-
- - - - GitHub logo - - - - - \ No newline at end of file diff --git a/docs/build/_modules/popr/examples/example_lifter.html b/docs/build/_modules/popr/examples/example_lifter.html deleted file mode 100644 index 1f201ae..0000000 --- a/docs/build/_modules/popr/examples/example_lifter.html +++ /dev/null @@ -1,170 +0,0 @@ - - - - - - - - popr.examples.example_lifter — POPR 0.0.1 documentation - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -

Source code for popr.examples.example_lifter

-import numpy as np
-
-from popr.base_lifters import StateLifter
-
-
-
-[docs] -class ExampleLifter(StateLifter): - """Example Lifter class. - - This class implements the bare minimum to use AutoTight. - - To create a new Lifter for your problem formulation, create - a copy of this file and fill in the missing parts. - - You can take a look at the :ref:`Examples` for inspiration. - """ - - # choose your homogenization variable here - HOM = "h" - - # chose the "lifting" levels when going up in the sparse Lasserre's hierarchy. - LEVELS = ["no"] - - def __init__(self, param_level="no"): - # you can choose if you want to use parameters. Otherwise remove param_level or set to "no" - super().__init__(param_level=param_level) - - @property - def var_dict(self): - var_dict = {self.HOM: 1} - return var_dict - - @property - def param_dict(self): - param_dict = {self.HOM: 1} - return param_dict - - def get_x(self, theta=None, parameters=None, var_subset=None) -> np.ndarray: - if theta is None: - theta = self.theta - if parameters is None: - parameters = self.parameters - if var_subset is None: - var_subset = self.var_dict - - x_data = [] - for key in var_subset: - if key == self.HOM: - x_data.append(1.0) - # fill in the rest of x according to var_subset. - # elif "x" in key: - # elif "z" in key: - assert len(x_data) == self.get_dim_x(var_subset) - return np.array(x_data) - - def sample_parameters(self, theta: np.ndarray | None = None) -> dict: - pass - - def sample_theta(self) -> np.ndarray: - pass
- -
- -
-
-
- -
- -
-

© Copyright 2025, POPR Contributors.

-
- - Built with Sphinx using a - theme - provided by Read the Docs. - - -
-
-
-
-
- - - - \ No newline at end of file diff --git a/docs/build/_modules/popr/examples/mono_lifter.html b/docs/build/_modules/popr/examples/mono_lifter.html deleted file mode 100644 index 4787a9e..0000000 --- a/docs/build/_modules/popr/examples/mono_lifter.html +++ /dev/null @@ -1,390 +0,0 @@ - - - - - - - - popr.examples.mono_lifter — POPR 0.0.1 documentation - - - - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -

Source code for popr.examples.mono_lifter

-from copy import deepcopy
-
-# import autograd.numpy as np
-import numpy as np
-from poly_matrix.poly_matrix import PolyMatrix
-
-from popr.base_lifters import RobustPoseLifter
-from popr.utils.geometry import get_C_r_from_theta
-from popr.utils.plotting_tools import plot_frame
-
-FOV = np.pi / 2  # camera field of view
-
-N_TRYS = 10
-
-# TODO(FD) for some reason this is not required as opposed to what is stated in Heng's paper
-# and it currently breaks tightness (might be a bug in my implementation though)
-USE_INEQ = False
-
-NORMALIZE = False
-
-
-
-[docs] -class MonoLifter(RobustPoseLifter): - """This example is treated in more details in `this paper <https://arxiv.org/abs/2308.05783>`_, - under the name "PLR" (point-to-line registration). - """ - - NOISE = 1e-3 # inlier noise - NOISE_OUT = 0.1 # outlier noise - - @property - def TIGHTNESS(self): - return "cost" if self.robust else "rank" - - def h_list(self, t): - """ - We want to inforce that - - norm(t) <= 10 (default) - - tan(a/2)*t3 >= sqrt(t1**2 + t2**2) - as constraints h_j(t)<=0 - """ - default = super().h_list(t) - try: - import autograd.numpy as anp - - return default + [ - anp.sum(t[:-1] ** 2) - anp.tan(FOV / 2) ** 2 * t[-1] ** 2, # type: ignore - -t[-1], - ] - except ModuleNotFoundError: - return default + [ - np.sum(t[:-1] ** 2) - np.tan(FOV / 2) ** 2 * t[-1] ** 2, - -t[-1], - ] - - def get_random_position(self): - pc_cw = np.random.rand(self.d) * 0.1 - # make sure all landmarks are in field of view: - # min_dist = max(np.linalg.norm(self.landmarks[:, :self.d-1], axis=1)) - pc_cw[self.d - 1] = np.random.uniform(1, self.MAX_DIST) - return pc_cw - - def get_B_known(self): - """Get inequality constraints of the form x.T @ B @ x <= 0""" - - # TODO(FD) for some reason this is not required as opposed to what is stated in Heng's paper - # and it currently breaks tightness (might be a bug in my implementation though) - if not USE_INEQ: - return [] - - default = super().get_B_known() - # B2 and B3 enforce that tan(FOV/2)*t3 >= sqrt(t1**2 + t2**2) - # 0 <= - tan**2(FOV/2)*t3**2 + t1**2 + t2**2 - B3 = PolyMatrix(symmetric=True) - constraint = np.zeros((self.d, self.d)) - constraint[range(self.d - 1), range(self.d - 1)] = 1.0 - constraint[self.d - 1, self.d - 1] = -np.tan(FOV / 2) ** 2 - B3["t", "t"] = constraint - - # t3 >= 0 - constraint = np.zeros(self.d) - constraint[self.d - 1] = -1 - B2 = PolyMatrix(symmetric=True) - B2[self.HOM, "t"] = constraint[None, :] - return default + [ - B2.get_matrix(self.var_dict), - B3.get_matrix(self.var_dict), - ] - - def term_in_norm(self, R, t, pi, ui): - return R @ pi + t - - def residual_sq(self, R, t, pi, ui): - W = np.eye(self.d) - np.outer(ui, ui) - term = self.term_in_norm(R, t, pi, ui) - if NORMALIZE: - return term.T @ W @ term / (self.n_landmarks * self.d) ** 2 - else: - return term.T @ W @ term - - def plot_setup(self): - if self.d != 2: - print("Plotting currently only supported for d=2") - return - import matplotlib.pylab as plt - - assert self.landmarks is not None - - fig, ax = plt.subplots() - - # R, t = get_C_r_from_theta(self.theta, self.d) - # ax.scatter(*t, color="k", label="pose") - - ax.axis("equal") - t_wc_w, C_cw = plot_frame(ax, self.theta, label="pose", color="gray", d=2) - - if self.y_ is not None: - for i in range(self.y_.shape[0]): - ax.scatter( - self.landmarks[i][0], - self.landmarks[i][1], - color=f"C{i}", - label="landmarks", - ) - - # this vector is in camera coordinates - ui_c = self.y_[i] - assert abs(np.linalg.norm(ui_c) - 1.0) < 1e-10 - - ax.plot( - [t_wc_w[0], self.landmarks[i][0]], - [t_wc_w[1], self.landmarks[i][1]], - color=f"C{i}", - ls=":", - ) - if C_cw is not None: - ui_w = C_cw.T @ ui_c - ax.plot( - [t_wc_w[0], t_wc_w[0] + ui_w[0]], - [t_wc_w[1], t_wc_w[1] + ui_w[1]], - color=f"r" if i < self.n_outliers else "g", - ) - - def get_Q( - self, - noise: float | None = None, - output_poly: bool = False, - use_cliques: list = [], - ): - assert self.landmarks is not None, "landmarks must be set before calling get_Q" - if noise is None: - noise = self.NOISE - - if self.y_ is None: - self.y_ = np.zeros((self.n_landmarks, self.d)) - theta = self.theta[: self.d + self.d**2] - outlier_index = self.get_outlier_index() - - R, t = get_C_r_from_theta(theta, self.d) - for i in range(self.n_landmarks): - pi = self.landmarks[i] - # ui = deepcopy(pi) #R @ pi + t - ui = R @ pi + t - ui /= ui[self.d - 1] - - # random unit vector inside the FOV cone - # tan(a/2)*t3 >= sqrt(t1**2 + t2**2) or t3 >= 1 - if np.tan(FOV / 2) * ui[self.d - 1] < np.sqrt( - np.sum(ui[: self.d - 1] ** 2) - ): - print("warning: inlier not in FOV!!") - - if i in outlier_index: - # randomly sample a vector - success = False - for _ in range(N_TRYS): - ui_test = deepcopy(ui) - ui_test[: self.d - 1] += np.random.normal( - scale=self.NOISE_OUT, loc=0, size=self.d - 1 - ) - if np.tan(FOV / 2) * ui_test[self.d - 1] >= np.sqrt( - np.sum(ui_test[: self.d - 1] ** 2) - ): - success = True - ui = ui_test - break - if not success: - raise ValueError("did not find valid outlier ui") - else: - ui[: self.d - 1] += np.random.normal( - scale=noise, loc=0, size=self.d - 1 - ) - assert ui[self.d - 1] == 1.0 - ui /= np.linalg.norm(ui) - self.y_[i] = ui - - Q = self.get_Q_from_y(self.y_, output_poly=output_poly, use_cliques=use_cliques) - return Q - - def get_Q_from_y(self, y, output_poly: bool = False, use_cliques: list = []): - """ - every cost term can be written as - (1 + wi)/b**2 [l x'] Qi [l; x] / norm + 1 - wi - = [l x'] Qi/b**2 [l; x] /norm + wi * [l x']Qi/b**2[l;x] / norm + 1 - wi - - cost term: - (Rpi + t) (I - uiui') (Rpi + t) - """ - assert ( - self.landmarks is not None - ), "landmarks must be set before calling get_Q_from_y" - - Q = PolyMatrix(symmetric=True) - if NORMALIZE: - norm = (self.n_landmarks * self.d) ** 2 - - if len(use_cliques): - js = use_cliques - else: - js = list(range(self.n_landmarks)) - - for i in js: - pi = self.landmarks[i] - ui = y[i] - Pi = np.c_[np.eye(self.d), np.kron(pi, np.eye(self.d))] # I, pi x I - Wi = np.eye(self.d) - np.outer(ui, ui) - Qi = Pi.T @ Wi @ Pi # "t,t, t,c, c,c: Wi, Wi @ kron, kron.T @ Wi @ kron - if NORMALIZE: - Qi /= norm - - if self.robust: - Qi /= self.beta**2 - # last two terms, should not be affected by norm - Q[self.HOM, self.HOM] += 1 - Q[self.HOM, f"w_{i}"] += -0.5 - if self.level == "xwT": - # Q[f"z_{i}", "x"] += 0.5 * Qi - Q[f"z_{i}", "t"] += 0.5 * Qi[:, : self.d] - Q[f"z_{i}", "c"] += 0.5 * Qi[:, self.d :] - # Q["x", "x"] += Qi - Q["t", "t"] += Qi[: self.d, : self.d] - Q["t", "c"] += Qi[: self.d, self.d :] - Q["c", "c"] += Qi[self.d :, self.d :] - elif self.level == "xxT": - Q["z_0", f"w_{i}"] += 0.5 * Qi.flatten()[:, None] - # Q["x", "x"] += Qi - Q["t", "t"] += Qi[: self.d, : self.d] - Q["t", "c"] += Qi[: self.d, self.d :] - Q["c", "c"] += Qi[self.d :, self.d :] - else: - # Q["x", "x"] += Qi - Q["t", "t"] += Qi[: self.d, : self.d] - Q["t", "c"] += Qi[: self.d, self.d :] - Q["c", "c"] += Qi[self.d :, self.d :] - if output_poly: - return 0.5 * Q - Q_sparse = 0.5 * Q.get_matrix(variables=self.var_dict) - return Q_sparse - - def __repr__(self): - appendix = "_robust" if self.robust else "" - return f"mono_{self.d}d_{self.level}_{self.param_level}{appendix}"
- -
- -
-
-
- -
- -
-

© Copyright 2025, POPR Contributors.

-
- - Built with Sphinx using a - theme - provided by Read the Docs. - - -
-
-
-
-
- - - - GitHub logo - - - - - \ No newline at end of file diff --git a/docs/build/_modules/popr/examples/poly4_lifter.html b/docs/build/_modules/popr/examples/poly4_lifter.html deleted file mode 100644 index 03341fc..0000000 --- a/docs/build/_modules/popr/examples/poly4_lifter.html +++ /dev/null @@ -1,225 +0,0 @@ - - - - - - - - popr.examples.poly4_lifter — POPR 0.0.1 documentation - - - - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -

Source code for popr.examples.poly4_lifter

-import numpy as np
-
-from popr.base_lifters import PolyLifter
-
-
-
-[docs] -class Poly4Lifter(PolyLifter): - """Fourth-degree polynomial examples. - - Two types are provided: - - - poly_type="A": one global minimum, one local minimum - - poly_type="B": two global minima - """ - - @property - def VARIABLE_LIST(self): - return [[self.HOM, "t", "z0"]] - - def __init__(self, poly_type="A"): - # actual minimum - assert poly_type in ["A", "B"] - self.poly_type = poly_type - super().__init__(degree=4) - - def get_Q(self, *args, **kwargs): - if self.poly_type == "A": - # fmt: off - # noqa - Q = np.r_[ - np.c_[2, 1, 0], - np.c_[1, -1 / 2, -1 / 3], - np.c_[0, -1 / 3, 1 / 4] - ] - # fmt: on - elif self.poly_type == "B": - # below is constructed such that f'(t) = (t-1)*(t-2)*(t-3) - # fmt: off - # noqa - Q = np.r_[ - np.c_[3, -3, 0], - np.c_[-3, 11 / 2, -1], - np.c_[0, -1, 1 / 4] - ] - # fmt: on - return Q - - def get_A_known(self, output_poly=False, add_redundant=False): - from poly_matrix import PolyMatrix - - if add_redundant: - print("No redundant constraitns for 4-degree polynomial.") - - # z_0 = t^2 - A_1 = PolyMatrix(symmetric=True) - A_1[self.HOM, "z0"] = -1 - A_1["t", "t"] = 2 - if output_poly: - return [A_1] - else: - return [A_1.get_matrix(self.var_dict)] - - def generate_random_setup(self): - self.theta_ = np.array([-1]) - - def get_D(self, that): - """Not currently used.""" - D = np.array( - [ - [1.0, 0.0, 0.0], - [that, 1.0, 0.0], - [that**2, 2 * that, 1.0], - ] - ) - return D
- - - -if __name__ == "__main__": - import os - - import matplotlib.pylab as plt - - # Get the directory two levels up from this file - base_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "..")) - - thetas = np.linspace(-2, 3, 100) - poly_lifter = Poly4Lifter(poly_type="A") - fig, ax = poly_lifter.plot(thetas) - fig.savefig(os.path.join(base_dir, "docs", "figures", "poly4_lifter_A.png")) - - thetas = np.linspace(0, 4, 100) - poly_lifter = Poly4Lifter(poly_type="B") - fig, ax = poly_lifter.plot(thetas) - fig.savefig(os.path.join(base_dir, "docs", "figures", "poly4_lifter_B.png")) - - plt.show(block=False) - print("done") -
- -
-
-
- -
- -
-

© Copyright 2025, POPR Contributors.

-
- - Built with Sphinx using a - theme - provided by Read the Docs. - - -
-
-
-
-
- - - - GitHub logo - - - - - \ No newline at end of file diff --git a/docs/build/_modules/popr/examples/poly6_lifter.html b/docs/build/_modules/popr/examples/poly6_lifter.html deleted file mode 100644 index 4d8d947..0000000 --- a/docs/build/_modules/popr/examples/poly6_lifter.html +++ /dev/null @@ -1,218 +0,0 @@ - - - - - - - - popr.examples.poly6_lifter — POPR 0.0.1 documentation - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -

Source code for popr.examples.poly6_lifter

-import numpy as np
-
-from popr.base_lifters import PolyLifter
-
-
-
-[docs] -class Poly6Lifter(PolyLifter): - """Sixth-degree polynomial examples. - - Two types are provided: - - - poly_type="A": one global minimum, two local minima, 2 local maxima - - poly_type="B": one global minimum, one local minimum, one local maximum - """ - - @property - def VARIABLE_LIST(self): - return [[self.HOM, "t", "z0", "z1"]] - - def __init__(self, poly_type="A"): - assert poly_type in ["A", "B"] - self.poly_type = poly_type - super().__init__(degree=6) - - def get_Q(self, *args, **kwargs): - if self.poly_type == "A": - return 0.1 * np.array( - [ - [25, 12, 0, 0], - [12, -13, -2.5, 0], - [0, -2.5, 6.25, -0.9], - [0, 0, -0.9, 1 / 6], - ] - ) - elif self.poly_type == "B": - return np.array( - [ - [5.0000, 1.3167, -1.4481, 0], - [1.3167, -1.4481, 0, 0.2685], - [-1.4481, 0, 0.2685, -0.0667], - [0, 0.2685, -0.0667, 0.0389], - ] - ) - - def get_A_known(self, output_poly=False, add_redundant=True): - from poly_matrix import PolyMatrix - - A_list = [] - - # z_0 = t^2 - A_1 = PolyMatrix(symmetric=True) - A_1[self.HOM, "z0"] = -1 - A_1["t", "t"] = 2 - A_list.append(A_1) - - # z_1 = t^3 = t z_0 - A_2 = PolyMatrix(symmetric=True) - A_2[self.HOM, "z1"] = -1 - A_2["t", "z0"] = 1 - A_list.append(A_2) - - # t^4 = z_1 t = z_0 z_0 - if add_redundant: - B_0 = PolyMatrix(symmetric=True) - B_0["z0", "z0"] = 2 - B_0["t", "z1"] = -1 - A_list.append(B_0) - - if output_poly: - return A_list - else: - return [A_i.get_matrix(self.var_dict) for A_i in A_list] - - def get_D(self, that): - D = np.array( - [ - [1.0, 0.0, 0.0, 0.0], - [that, 1.0, 0.0, 0.0], - [that**2, 2 * that, 1.0, 0.0], - [that**3, 3 * that**2, 3 * that, 1.0], - ] - ) - return D - - def generate_random_setup(self): - self.theta_ = np.array([-1])
- - - -if __name__ == "__main__": - import os - - import matplotlib.pylab as plt - - # Get the directory two levels up from this file - base_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "..")) - - thetas = np.linspace(-1.5, 4.5, 100) - poly_lifter = Poly6Lifter(poly_type="A") - fig, ax = poly_lifter.plot(thetas) - fig.savefig(os.path.join(base_dir, "docs", "figures", "poly6_lifter_A.png")) - - thetas = np.linspace(-3, 3, 100) - poly_lifter = Poly6Lifter(poly_type="B") - fig, ax = poly_lifter.plot(thetas) - fig.savefig(os.path.join(base_dir, "docs", "figures", "poly6_lifter_B.png")) - - plt.show(block=False) - print("done") -
- -
-
-
- -
- -
-

© Copyright 2025, POPR Contributors.

-
- - Built with Sphinx using a - theme - provided by Read the Docs. - - -
-
-
-
-
- - - - \ No newline at end of file diff --git a/docs/build/_modules/popr/examples/range_only_lifters.html b/docs/build/_modules/popr/examples/range_only_lifters.html deleted file mode 100644 index de26270..0000000 --- a/docs/build/_modules/popr/examples/range_only_lifters.html +++ /dev/null @@ -1,609 +0,0 @@ - - - - - - - - popr.examples.range_only_lifters — POPR 0.0.1 documentation - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
-
    -
  • - - -
  • -
  • -
-
-
-
-
- -

Source code for popr.examples.range_only_lifters

-import matplotlib.pylab as plt
-import numpy as np
-import scipy.sparse as sp
-from poly_matrix.least_squares_problem import LeastSquaresProblem
-from scipy.optimize import minimize
-
-from popr.base_lifters import StateLifter
-from popr.utils.common import diag_indices, upper_triangular
-
-plt.ion()
-
-NOISE = 1e-2  # std deviation of distance noise
-
-METHOD = "BFGS"
-NORMALIZE = True
-
-# TODO(FD): parameters below are not all equivalent.
-SOLVER_KWARGS = {
-    "BFGS": dict(gtol=1e-6, xrtol=1e-10),  # relative step size
-    "Nelder-Mead": dict(xatol=1e-10),  # absolute step size
-    "Powell": dict(ftol=1e-6, xtol=1e-10),
-    "TNC": dict(gtol=1e-6, xtol=1e-10),
-}
-
-
-
-[docs] -class RangeOnlyLocLifter(StateLifter): - """Range-only localization in 2D or 3D. - - We minimize the cost function - - .. math:: f(\\theta) = \\sum_{n=0}^{N-1} \\sum_{k=0}^{K-1} w_{nk} (d_{nk}^2 - ||p_n - a_k||^2)^2 - - where - - - :math:`w_{nk}` is the weight for the nth point and kth landmark (currently assumed binary to mark missing edges). - - :math:`\\theta` is the flattened vector of positions :math:`p_n`. - - :math:`d_{nk}` is the distance measurement from point n to landmark k. - - :math:`a_k` is the kth landmark. - - Note that in the current implementation, there is no regularization term so the problem could be split into individual points. - - We experiment with two different substitutions to turn the cost function into aquadratic form: - - - level "no" uses substitution :math:`z_i=||p_i||^2=x_i^2 + y_i^2` (or equivalent 3D version). - - level "quad" uses substitution :math:`y_i=[x_i^2, x_iy_i, y_i^2]` (or equivalent 3D version). - - This example is treated in more details in `this paper <https://arxiv.org/abs/2308.05783>`_. - """ - - TIGHTNESS = "rank" - LEVELS = ["no", "quad"] - LEVEL_NAMES = { - "no": "$z_n$", - "quad": "$\\boldsymbol{y}_n$", - } - - def get_vec_around_gt(self, delta: float = 0): - """Sample around ground truth. - :param delta: sample from gt + std(delta) (set to 0 to start from gt.) - """ - assert self.landmarks is not None, "landmarks must be set before sampling" - - if delta == 0: - return self.theta - else: - bbox_max = np.max(self.landmarks, axis=0) * 2 - bbox_min = np.min(self.landmarks, axis=0) * 2 - pos = ( - np.random.rand(self.n_positions, self.d) - * (bbox_max - bbox_min)[None, :] - + bbox_min[None, :] - ) - return pos.flatten() - - def __init__( - self, - n_positions, - n_landmarks, - d, - W=None, - level="no", - variable_list=None, - param_level="no", - ): - self.n_positions = n_positions - self.n_landmarks = n_landmarks - self.landmarks_ = None # will be set later - - if W is not None: - assert W.shape == (n_landmarks, n_positions) - self.W = W - else: - self.W = np.ones((n_positions, n_landmarks)) - self.y_ = None - - if variable_list == "all": - variable_list = self.get_all_variables() - super().__init__( - level=level, d=d, variable_list=variable_list, param_level=param_level - ) - - @property - def landmarks(self): - landmarks = np.random.rand(self.n_landmarks, self.d) - if self.landmarks_ is None: - self.landmarks_ = landmarks - return self.landmarks_ - - @property - def VARIABLE_LIST(self): - return [ - [self.HOM, "x_0"], - [self.HOM, "x_0", "z_0"], - [self.HOM, "x_0", "z_0", "z_1"], - [self.HOM, "x_0", "x_1", "z_0", "z_1"], - ] - - def get_all_variables(self): - vars = [self.HOM] - vars += [f"x_{i}" for i in range(self.n_positions)] - vars += [f"z_{i}" for i in range(self.n_positions)] - return [vars] - - def sample_parameters(self, theta=None): - landmarks = np.random.rand(self.n_landmarks, self.d) - return self.sample_parameters_landmarks(landmarks) - - def sample_theta(self): - return np.random.rand(self.n_positions, self.d).flatten() - - def get_A_known(self, var_dict=None, output_poly=False): - from poly_matrix.poly_matrix import PolyMatrix - - if var_dict is None: - var_dict = self.var_dict - positions = self.get_variable_indices(var_dict) - - A_list = [] - for n in positions: - if self.level == "no": - A = PolyMatrix(symmetric=True) - A[f"x_{n}", f"x_{n}"] = np.eye(self.d) - A[self.HOM, f"z_{n}"] = -0.5 - if output_poly: - A_list.append(A) - else: - A_list.append(A.get_matrix(self.var_dict)) - - elif self.level == "quad": - count = 0 - for i in range(self.d): - for j in range(i, self.d): - A = PolyMatrix(symmetric=True) - mat_x = np.zeros((self.d, self.d)) - mat_z = np.zeros((1, self.size_z)) - if i == j: - mat_x[i, i] = 1.0 - else: - mat_x[i, j] = 0.5 - mat_x[j, i] = 0.5 - mat_z[0, count] = -0.5 - A[f"x_{n}", f"x_{n}"] = mat_x - A[self.HOM, f"z_{n}"] = mat_z - count += 1 - if output_poly: - A_list.append(A) - else: - A_list.append(A.get_matrix(self.var_dict)) - return A_list - - def get_x(self, theta=None, parameters=None, var_subset=None): - if var_subset is None: - var_subset = self.var_dict - if theta is None: - theta = self.theta - if parameters is None: - parameters = self.parameters - - positions = theta.reshape(self.n_positions, -1) - - x_data = [] - for key in var_subset: - if key == self.HOM: - x_data.append(1.0) - elif "x" in key: - n = int(key.split("_")[-1]) - x_data += list(positions[n]) - elif "z" in key: - n = int(key.split("_")[-1]) - if self.level == "no": - x_data.append(np.linalg.norm(positions[n]) ** 2) - elif self.level == "quad": - x_data += list(upper_triangular(positions[n])) - assert len(x_data) == self.get_dim_x(var_subset) - return np.array(x_data) - - def get_J_lifting(self, t): - pos = t.reshape((-1, self.d)) - ii = [] - jj = [] - data = [] - - idx = 0 - for n in range(self.n_positions): - if self.level == "no": - ii += [n] * self.d - jj += list(range(n * self.d, (n + 1) * self.d)) - data += list(2 * pos[n]) - elif self.level == "quad": - # it seemed easier to do this manually that programtically - if self.d == 3: - x, y, z = pos[n] - jj += [n * self.d + j for j in [0, 0, 1, 0, 2, 1, 1, 2, 2]] - data += [2 * x, y, x, z, x, 2 * y, z, y, 2 * z] - ii += [idx + i for i in [0, 1, 1, 2, 2, 3, 4, 4, 5]] - elif self.d == 2: - x, y = pos[n] - jj += [n * self.d + j for j in [0, 0, 1, 1]] - data += [2 * x, y, x, 2 * y] - ii += [idx + i for i in [0, 1, 1, 2]] - idx += self.size_z - J_lifting = sp.csr_array( - (data, (ii, jj)), - shape=(self.M, self.N), - ) - return J_lifting - - def get_hess_lifting(self, t): - """return list of the hessians of the M lifting functions.""" - hessians = [] - for n in range(self.n_positions): - idx = range(n * self.d, (n + 1) * self.d) - if self.level == "no": - hessian = sp.csr_array( - ([2] * self.d, (idx, idx)), - shape=(self.N, self.N), - ) - hessians.append(hessian) - elif self.level == "quad": - for h in self.fixed_hessian_list: - ii, jj = np.meshgrid(idx, idx) - hessian = sp.csr_array( - (h.flatten(), (ii.flatten(), jj.flatten())), - shape=(self.N, self.N), - ) - hessians.append(hessian) - return hessians - - @property - def fixed_hessian_list(self): - if self.d == 2: - return [ - np.array([[2, 0], [0, 0]]), - np.array([[0, 1], [1, 0]]), - np.array([[0, 0], [0, 2]]), - ] - elif self.d == 3: - return [ - np.array([[2, 0, 0], [0, 0, 0], [0, 0, 0]]), - np.array([[0, 1, 0], [1, 0, 0], [0, 0, 0]]), - np.array([[0, 0, 1], [0, 0, 0], [1, 0, 0]]), - np.array([[0, 0, 0], [0, 2, 0], [0, 0, 0]]), - np.array([[0, 0, 0], [0, 0, 1], [0, 1, 0]]), - np.array([[0, 0, 0], [0, 0, 0], [0, 0, 2]]), - ] - else: - raise ValueError(f"Unsupported dimension {self.d} for fixed hessians.") - - def get_residuals(self, t, y): - positions = t.reshape((-1, self.d)) - y_current = ( - np.linalg.norm(self.landmarks[None, :, :] - positions[:, None, :], axis=2) - ** 2 - ) - return self.W * (y - y_current) - - def get_cost(self, t, y, sub_idx=None): - """ - get cost for given positions, landmarks and noise. - - :param t: flattened positions of length Nd - :param y: N x K distance measurements - """ - residuals = self.get_residuals(t, y) - if sub_idx is None: - cost = np.sum(residuals**2) - else: - cost = np.sum(residuals[sub_idx] ** 2) - if NORMALIZE: - return cost / np.sum(self.W > 0) - return cost - - def get_grad(self, t, y, sub_idx=None): - """get gradient""" - J = self.get_J(t, y) - x = self.get_x(t) - Q = self.get_Q_from_y(y) - if sub_idx is None: - return 2 * J.T @ Q @ x - else: - sub_idx_x = self.get_sub_idx_x(sub_idx) - return 2 * J.T[:, sub_idx_x] @ Q[sub_idx_x, :][:, sub_idx_x] @ x[sub_idx_x] - - def get_J(self, t, y): - J = sp.csr_array( - (np.ones(self.N), (range(1, self.N + 1), range(self.N))), - shape=(self.N + 1, self.N), - ) - J_lift = self.get_J_lifting(t) - J = sp.vstack([J, J_lift]) - return J - - def get_hess(self, t, y): - """get Hessian""" - x = self.get_x(t) - Q = self.get_Q_from_y(y) - J = self.get_J(t, y) - hess = 2 * J.T @ Q @ J - - hessians = self.get_hess_lifting(t) - B = self.ls_problem.get_B_matrix(self.var_dict) - residuals = B @ x - for m, h in enumerate(hessians): - bm_tilde = B[:, -self.M + m] - factor = float(bm_tilde.T @ residuals) - hess += 2 * factor * h - return hess - - def get_Q_from_y(self, y): - import itertools - - self.ls_problem = LeastSquaresProblem() - - if self.level == "quad": - diag_idx = diag_indices(self.d) - - for n, k in itertools.product(range(self.n_positions), range(self.n_landmarks)): - if self.W[n, k] > 0: - ak = self.landmarks[k] - if self.level == "no": - self.ls_problem.add_residual( - { - self.HOM: y[n, k] - np.linalg.norm(ak) ** 2, - f"x_{n}": 2 * ak.reshape((1, -1)), - f"z_{n}": -1, - } - ) - elif self.level == "quad": - mat = np.zeros((1, self.size_z)) - mat[0, diag_idx] = -1 - res_dict = { - self.HOM: y[n, k] - np.linalg.norm(ak) ** 2, - f"x_{n}": 2 * ak.reshape((1, -1)), - f"z_{n}": mat, - } - self.ls_problem.add_residual(res_dict) - Q = self.ls_problem.get_Q().get_matrix(self.var_dict) - if NORMALIZE: - return Q / np.sum(self.W > 0) - return Q - - def simulate_y(self, noise: float | None = None): - assert self.landmarks is not None - # N x K matrix - if noise is None: - noise = NOISE - positions = self.theta.reshape(self.n_positions, -1) - y_gt = ( - np.linalg.norm(self.landmarks[None, :, :] - positions[:, None, :], axis=2) - ** 2 - ) - return y_gt + np.random.normal(loc=0, scale=noise, size=y_gt.shape) - - def get_Q(self, noise: float | None = None) -> tuple: - if self.y_ is None: - self.y_ = self.simulate_y(noise=noise) - Q = self.get_Q_from_y(self.y_) - - # DEBUGGING - x = self.get_x() - cost1 = x.T @ Q @ x - cost3 = self.get_cost(self.theta, self.y_) - assert abs(cost1 - cost3) < 1e-10 - return Q - - def get_D(self, that): - D = np.eye(1 + self.n_positions * self.d + self.size_z) - x = self.get_x(theta=that) - J = self.get_J_lifting(t=that) - - D = sp.lil_array((len(x), len(x))) - D[range(len(x)), range(len(x))] = 1.0 - D[:, 0] = x - D[-J.shape[0] :, 1 : 1 + J.shape[1]] = J # type: ignore - return D.tocsc() - - def get_sub_idx_x(self, sub_idx, add_z=True): - sub_idx_x = [0] - for idx in sub_idx: - sub_idx_x += [1 + idx * self.d + d for d in range(self.d)] - if not add_z: - return sub_idx_x - for idx in sub_idx: - sub_idx_x += [ - 1 + self.n_positions * self.d + idx * self.size_z + d - for d in range(self.size_z) - ] - return sub_idx_x - - def get_theta(self, x): - return x[1 : self.d + 1] - - def get_position(self, theta=None): - if theta is not None: - return theta.reshape(self.n_positions, self.d) - - def get_error(self, that): - err = np.sqrt(np.mean((self.theta - that) ** 2)) - return {"total error": err, "error": err} - - def local_solver( - self, - t_init, - y, - verbose=False, - method="BFGS", - solver_kwargs=SOLVER_KWARGS, - ): - """ - :param t_init: (positions, landmarks) tuple - """ - - # TODO(FD): split problem into individual points. - options = solver_kwargs[method] - options["disp"] = verbose - sol = minimize( - self.get_cost, - x0=t_init, - args=y, - jac=self.get_grad, - # hess=self.get_hess, not used by any solvers. - method=method, - options=options, - ) - - info = {} - info["success"] = sol.success - info["msg"] = sol.message + f"(# iterations: {sol.nit})" - if sol.success: - that = sol.x - rel_error = self.get_cost(that, y) - self.get_cost(sol.x, y) - assert abs(rel_error) < 1e-10, rel_error - residuals = self.get_residuals(that, y) - cost = sol.fun - info["max res"] = np.max(np.abs(residuals)) - hess = self.get_hess(that, y) - eigs = np.linalg.eigvalsh(hess.toarray()) - info["cond Hess"] = eigs[-1] / eigs[0] - else: - that = cost = None - info["max res"] = None - info["cond Hess"] = None - return that, info, cost - - @property - def var_dict(self): - var_dict = {self.HOM: 1} - var_dict.update({f"x_{n}": self.d for n in range(self.n_positions)}) - var_dict.update({f"z_{n}": self.size_z for n in range(self.n_positions)}) - return var_dict - - @property - def param_dict(self): - return self.param_dict_landmarks - - @property - def size_z(self): - if self.level == "no": - return 1 - elif self.level == "quad": - return int(self.d * (self.d + 1) / 2) - else: - raise ValueError(f"Unknown level {self.level}") - - @property - def N(self): - return self.n_positions * self.d - - @property - def M(self): - return self.n_positions * self.size_z - - def __repr__(self): - return f"rangeonlyloc{self.d}d_{self.level}"
- - - -if __name__ == "__main__": - lifter = RangeOnlyLocLifter(n_positions=3, n_landmarks=4, d=2) -
- -
-
-
- -
- -
-

© Copyright 2025, POPR Contributors.

-
- - Built with Sphinx using a - theme - provided by Read the Docs. - - -
-
-
-
-
- - - - \ No newline at end of file diff --git a/docs/build/_modules/popr/examples/range_only_slam1.html b/docs/build/_modules/popr/examples/range_only_slam1.html deleted file mode 100644 index 22bbc74..0000000 --- a/docs/build/_modules/popr/examples/range_only_slam1.html +++ /dev/null @@ -1,533 +0,0 @@ - - - - - - - - popr.examples.range_only_slam1 — POPR 0.0.1 documentation - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
-
    -
  • - - -
  • -
  • -
-
-
-
-
- -

Source code for popr.examples.range_only_slam1

-import itertools
-
-import numpy as np
-from poly_matrix.least_squares_problem import LeastSquaresProblem
-from poly_matrix.poly_matrix import PolyMatrix
-
-from popr.lifters import RangeOnlyLifter
-
-
-def vkron(a, b):
-    """
-    if a is 1xN, make it Nx1
-    if b is NxN leave it
-    """
-    if (np.ndim(a) == 2) and (a.shape[0] == 1):
-        a = a.T
-    elif np.ndim(a) == 1:
-        a = a.reshape((-1, 1))
-    if (np.ndim(b) == 2) and (b.shape[0] == 1):
-        b = b.T
-    elif np.ndim(b) == 1:
-        b = b.reshape((-1, 1))
-    return np.kron(a, b)
-
-
-
-[docs] -class RangeOnlySLAM1Lifter(RangeOnlyLifter): - """Range-only SLAM, version 1 - - Uses substitution tau_i=||t_i||^2, alpha_k=||a_k||^2, e_ik = a_k @ t_i - """ - - LEVELS = [ - "no", - "inner", - "outer", - ] - - def __init__( - self, - n_positions, - n_landmarks, - d, - edges=None, - remove_gauge="hard", - resample_landmarks=False, - level="inner", - ): - self.level = level - self.resample_landmarks = resample_landmarks - super().__init__( - n_positions, n_landmarks, d, edges=edges, remove_gauge=remove_gauge - ) - - @property - def base_var_dict(self): - var_dict = {} - var_dict.update({f"x{n}": self.d for n in range(self.n_positions)}) - if self.remove_gauge == "hard": - # for 2d, a1_x, a2_x, a2_y, ... - # for 3d, a1_x, a2_x, a2_y, a3_x, a3_y, a3_z, ... - var_dict.update({f"a{k}": k for k in range(1, self.d)}) - var_dict.update({f"a{k}": self.d for k in range(self.d, self.n_landmarks)}) - else: - var_dict.update({f"a{k}": self.d for k in range(self.n_landmarks)}) - return var_dict - - @property - def sub_var_dict(self): - var_dict = {} - if self.level == "inner": - var_dict.update({f"tau{n}": 1 for n in range(self.n_positions)}) - var_dict.update({f"alpha{k}": 1 for k in range(self.n_landmarks)}) - var_dict.update({f"e{n}{k}": 1 for n, k in self.edges}) - elif self.level == "outer": - dim = self.d**2 - var_dict.update({f"tau{n}": dim for n in range(self.n_positions)}) - var_dict.update({f"alpha{k}": dim for k in range(self.n_landmarks)}) - var_dict.update({f"e{n}{k}": dim for n, k in self.edges}) - return var_dict - - @property - def var_dict(self): - var_dict = {self.HOM: 1} - var_dict.update(self.base_var_dict) - var_dict.update(self.sub_var_dict) - return var_dict - - def get_x(self, theta=None): - if theta is None: - theta = self.theta - positions, landmarks = self.get_positions_and_landmarks(theta) - - x_data = [[1]] - x_data += [list(theta)] - if self.level == "inner": - x_data += [[np.linalg.norm(p) ** 2] for p in positions] - x_data += [[np.linalg.norm(a) ** 2] for a in landmarks] - x_data += [[landmarks[k] @ positions[n]] for n, k in self.edges] - elif self.level == "outer": - x_data += [list(np.kron(p, p)) for p in positions] - x_data += [list(np.kron(a, a)) for a in landmarks] - x_data += [list(np.kron(positions[n], landmarks[k])) for n, k in self.edges] - x = np.concatenate(x_data, axis=0) - return x - - def sample_theta(self): - positions = self.sample_random_positions() - if self.resample_landmarks: - landmarks = self.sample_random_landmarks() - else: - landmarks = self.landmarks - return self.get_theta(positions, landmarks) - - def get_Q_from_y(self, y): - self.ls_problem = LeastSquaresProblem() - if self.level == "outer": - I = np.eye(self.d).flatten().reshape((1, -1)) - for n, k in self.edges: - if self.level == "inner": - # d_nk**2 - ||t_n||**2 + 2t_n@a_k - ||a_k||**2 - # l tau_n e_nk alpha_k - self.ls_problem.add_residual( - {self.HOM: y[n, k], f"tau{n}": -1, f"alpha{k}": -1, f"e{n}{k}": 2} - ) - elif self.level == "outer": - # d_nk**2 - ||t_n||**2 + 2t_n@a_k - ||a_k||**2 - # l -I @ tau_n +2I @ e_nk -I @ alpha_k - self.ls_problem.add_residual( - { - self.HOM: y[n, k], - f"tau{n}": -I, - f"alpha{k}": -I, - f"e{n}{k}": 2 * I, - } - ) - # fix Gauge freedom - if self.remove_gauge == "cost": - I = np.eye(self.d) - for d in range(self.d): - self.ls_problem.add_residual({"a0": I[d].reshape((1, -1))}) - return self.ls_problem.get_Q().get_matrix(self.var_dict) - - def get_A_known(self): - A_list = [] - for n in range(self.n_positions): - if self.level == "inner": - A = PolyMatrix() - A[f"x{n}", f"x{n}"] = np.eye(self.d) - A[self.HOM, f"tau{n}"] = -0.5 - A_list.append(A.get_matrix(self.var_dict)) - else: - for j, k in itertools.product(range(self.d), range(self.d)): - X = np.zeros((self.d, self.d)) - x = np.zeros(self.d**2) - A = PolyMatrix() - X[j, k] += 1.0 - X[k, j] += 1.0 - x[j * self.d + k] += -1.0 - A[f"x{n}", f"x{n}"] += X - A[self.HOM, f"tau{n}"] += x.reshape((1, -1)) - A_list.append(A.get_matrix(self.var_dict)) - - if self.level == "outer": - # TODO(FD) implement the other known matrices - return A_list - - for k in range(self.n_landmarks): - A = PolyMatrix() - if self.remove_gauge == "hard": - if k > 0: - A[f"a{k}", f"a{k}"] = np.eye(self.var_dict[f"a{k}"]) - else: - A[f"a{k}", f"a{k}"] = np.eye(self.d) - A[self.HOM, f"alpha{k}"] = -0.5 - A_list.append(A.get_matrix(self.var_dict)) - for n, k in self.edges: - A = PolyMatrix() - if self.remove_gauge == "hard": - if k > 0: - A[f"x{n}", f"a{k}"] = np.eye(self.d)[:, : self.var_dict[f"a{k}"]] - else: - A[f"x{n}", f"a{k}"] = np.eye(self.d) - A[self.HOM, f"e{n}{k}"] = -1 - A_list.append(A.get_matrix(self.var_dict)) - return A_list - - def get_cost(self, t, y): - # fix Gauge freedom - cost = super().get_cost(t, y) - if self.remove_gauge == "cost": - cost += np.linalg.norm(self.landmarks[0]) ** 2 - return cost - - def fill_depending_on_k(self, row, counter, k, vec): - """Because of Gauge freedom removal, - the first columns of the landmark-based part of J - are incomplete. - """ - if k == 0: - return counter - - # below is equivalent to row[counter, f"a{k}"] = min(k, 3) - # keeping it like this for better readability - elif k == 1: - # i = self.n_positions * self.d - # row[i] = vec[0] - row[counter, f"a{k}"] = vec[0] - return counter + 1 - elif k == 2: - # i = self.n_positions * self.d + 1 - # row[i : i + 2] = vec[:2] - row[counter, f"a{k}"] = vec[:2][None, :] - return counter + 1 - elif k >= 3: - # i = self.n_positions * self.d + 3 + (k - 3) * self.d - # row[i : i + self.d] = vec - row[counter, f"a{k}"] = vec[None, :] - return counter + 1 - - def get_J_lifting(self, t): - if self.level == "inner": - return self.get_J_lifting_inner(t) - elif self.level == "outer": - return self.get_J_lifting_outer(t) - - def get_J_lifting_outer(self, t): - positions, landmarks = self.get_positions_and_landmarks(t) - J_lifting = PolyMatrix(symmetric=False) - for n in range(self.n_positions): - # below is d/d(p_n) (p_n kron p_n) - # fmt:off - J_lifting[f"tau{n}", f"x{n}"] = ( - vkron(positions[n], np.eye(self.d)) - + vkron(np.eye(self.d), positions[n]) - ) - # fmt:on - for k in range(self.n_landmarks): - if self.remove_gauge == "hard": - if k == 0: - continue - # below is d/d(a_k) (a_k kron a_k) - dim = self.var_dict[f"a{k}"] - I = np.zeros((self.d, self.d)) - I[range(dim), range(dim)] = 1.0 - ak = landmarks[k] - # fmt:off - J_lifting[f"alpha{k}", f"a{k}"] = ( - vkron(ak, I) + - vkron(I, ak) - )[:, :dim] - # fmt:on - else: - ak = landmarks[k] - # fmt:off - J_lifting[f"alpha{k}", f"a{k}"] = ( - vkron(ak, np.eye(self.d)) + - vkron(np.eye(self.d), ak) - ) - # fmt:on - for n, k in self.edges: - # d/d(p_n) (p_n kron a_n) - J_lifting[f"e{n}{k}", f"x{n}"] = vkron(np.eye(self.d), self.landmarks[k]) - if self.remove_gauge == "hard": - if k == 0: - continue - dim = self.var_dict[f"a{k}"] - # d/d(a_k) (p_n kron a_k) - # if a_n has k < d elements: - # - # p_n = [x y z] a_k = [a b] - # p_n kron a_k = [xa xb ya yb za zb] - # J = [x - # x - # 0 - # y - # y - # 0 - # z - # z - # 0] - I = np.zeros((self.d, self.d)) - I[range(dim), range(dim)] = 1.0 - J_lifting[f"e{n}{k}", f"a{k}"] = vkron( - self.positions[n], - I, - )[:, :dim] - else: - J_lifting[f"e{n}{k}", f"a{k}"] = vkron( - self.positions[n], - np.eye(self.d), - ) - return J_lifting.get_matrix((self.sub_var_dict, self.base_var_dict)) - - def get_J_lifting_inner(self, t): - positions, landmarks = self.get_positions_and_landmarks(t) - J_lifting = PolyMatrix(symmetric=False) - for n in range(self.n_positions): - J_lifting[f"tau{n}", f"x{n}"] = 2 * positions[n].reshape((1, -1)) - for k in range(self.n_landmarks): - if self.remove_gauge == "hard": - if k == 0: - continue - J_lifting[f"alpha{k}", f"a{k}"] = ( - 2 * landmarks[k, : self.var_dict[f"a{k}"]] - ).reshape((1, -1)) - else: - J_lifting[f"alpha{k}", f"a{k}"] = 2 * landmarks[k].reshape((1, -1)) - for n, k in self.edges: - J_lifting[f"e{n}{k}", f"x{n}"] = landmarks[k].reshape((1, -1)) - if self.remove_gauge == "hard": - if k == 0: - continue - J_lifting[f"e{n}{k}", f"a{k}"] = positions[ - n, : self.var_dict[f"a{k}"] - ].reshape((1, -1)) - else: - J_lifting[f"e{n}{k}", f"a{k}"] = positions[n].reshape((1, -1)) - return J_lifting.get_matrix((self.sub_var_dict, self.base_var_dict)) - - def fill_hessian_depending_on_k(self, hessian, k, fix_i=None, val=2.0): - if k == 0: # and (fix_i is None): - return # no Hessian! - # elif k == 0: - # pass - - elif k == 1: - i = self.n_positions * self.d - if fix_i is None: - hessian[i, i] = val # a1_x - else: - hessian[fix_i[0], i] = val - hessian[i, fix_i[0]] = val - elif k == 2: - i = self.n_positions * self.d + 1 - var_i = range(i, i + 2) - if fix_i is None: - hessian[var_i, var_i] = val # a2_x, a2_y - else: - hessian[fix_i[:2], var_i] = val # a2_x, a2_y - hessian[var_i, fix_i[:2]] = val # a2_x, a2_y - elif k >= 3: - i = self.n_positions * self.d + 3 + (k - 3) * self.d - var_i = range(i, i + self.d) - if fix_i is None: - hessian[var_i, var_i] = val # a3_x, a3_y, a3_z - else: - hessian[fix_i, var_i] = val - hessian[var_i, fix_i] = val - - def get_hess_lifting(self, t): - if self.level == "inner": - return self.get_hess_lifting_inner(t) - else: - raise NotImplementedError(self.level) - - def get_hess_lifting_inner(self, t): - """return list of the hessians of the M lifting functions.""" - hessians = [] - # Hessian of || tau_j ||^2: 2 * I - for n in range(self.n_positions): - hessian = PolyMatrix() - hessian[f"x{n}", f"x{n}"] = 2 * np.eye(self.d) - hessians.append(hessian.get_matrix(self.base_var_dict)) - # Hessian of || alpha_k ||^2: 2 * I - for k in range(self.n_landmarks): - hessian = PolyMatrix() - if k > 0: - hessian[f"a{k}", f"a{k}"] = 2 * np.eye(self.var_dict[f"a{k}"]) - hessians.append(hessian.get_matrix(self.base_var_dict)) - # Hessian of alpha_j@tau_j: tau_j or alpha_j - for n, k in self.edges: - hessian = PolyMatrix() - hessian_old = np.zeros((self.N, self.N)) - if self.remove_gauge == "hard": - # old implementation - i = n * self.d - self.fill_hessian_depending_on_k( - hessian_old, k, fix_i=range(i, i + self.d), val=1.0 - ) - - # new - if k > 0: - hessian[f"x{n}", f"a{k}"] = np.eye(self.d)[ - :, : self.var_dict[f"a{k}"] - ] - else: - # old implementation - i = n * self.d - j = (self.n_positions + k) * self.d - hessian_old[range(i, i + self.d), range(j, j + self.d)] = 1 - hessian_old[range(j, j + self.d), range(i, i + self.d)] = 1 - - # new - hessian[f"x{n}", f"a{k}"] = np.eye(self.d) - - hessian_new = hessian.get_matrix(self.base_var_dict).toarray() - np.testing.assert_allclose(hessian_old, hessian_new) - - hessians.append(hessian.get_matrix(self.base_var_dict)) - assert len(hessians) == self.M - return hessians - - def __repr__(self): - return f"rangeonlyslam1-{self.d}d"
- - - -if __name__ == "__main__": - lifter = RangeOnlySLAM1Lifter( - n_positions=3, n_landmarks=4, d=2, resample_landmarks=True, level="outer" - ) - lifter.run(n_dual=1, noise=0.1, plot=True) - - lifter = RangeOnlySLAM1Lifter( - n_positions=3, n_landmarks=4, d=2, resample_landmarks=False - ) - lifter.run(n_dual=1, noise=0.1, plot=True) - - lifter = RangeOnlySLAM1Lifter( - n_positions=3, n_landmarks=4, d=2, resample_landmarks=True - ) - lifter.run(n_dual=1, noise=0.1, plot=True) - lifter.run(n_dual=1, noise=0.1, plot=True) -
- -
-
-
- -
- -
-

© Copyright 2025, POPR Contributors.

-
- - Built with Sphinx using a - theme - provided by Read the Docs. - - -
-
-
-
-
- - - - \ No newline at end of file diff --git a/docs/build/_modules/popr/examples/range_only_slam2.html b/docs/build/_modules/popr/examples/range_only_slam2.html deleted file mode 100644 index c95b1c7..0000000 --- a/docs/build/_modules/popr/examples/range_only_slam2.html +++ /dev/null @@ -1,231 +0,0 @@ - - - - - - - - popr.examples.range_only_slam2 — POPR 0.0.1 documentation - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
-
    -
  • - - -
  • -
  • -
-
-
-
-
- -

Source code for popr.examples.range_only_slam2

-import numpy as np
-from poly_matrix.least_squares_problem import LeastSquaresProblem
-from popr.examples.range_only_slam1 import RangeOnlySLAM1Lifter
-
-
-
-[docs] -class RangeOnlySLAM2Lifter(RangeOnlySLAM1Lifter): - """Range-only SLAM, version 1 - - Uses substitutions e_ik = ||a_k - t_i|| - """ - - def __init__(self, n_positions, n_landmarks, d, edges=None): - super().__init__(n_positions, n_landmarks, d, edges=edges) - - @property - def M(self): - return len(self.edges) - - @property - def sub_var_dict(self): - var_dict = {} - var_dict.update({f"e{n}{k}": 1 for n, k in self.edges}) - return var_dict - - def get_x(self, theta=None): - if theta is None: - theta = self.theta - positions, landmarks = self.get_positions_and_landmarks(theta) - - x_data = [[1]] - x_data += [list(theta)] - x_data += [ - [np.linalg.norm(landmarks[k] - positions[n]) ** 2] for n, k in self.edges - ] - x = np.concatenate(x_data, axis=0) - assert len(x) == self.N + self.M + 1 - return x - - def get_Q_from_y(self, y): - self.ls_problem = LeastSquaresProblem() - for n, k in self.edges: - self.ls_problem.add_residual({self.HOM: y[n, k], f"e{n}{k}": -1}) - # fix Gauge freedom - if self.remove_gauge == "cost": - I = np.eye(self.d) - for d in range(self.d): - self.ls_problem.add_residual({"a0": I[d].reshape((1, -1))}) - return self.ls_problem.get_Q().get_matrix(self.var_dict) - - def get_A_known(self): - from poly_matrix.poly_matrix import PolyMatrix - - A_list = [] - for n, k in self.edges: - A = PolyMatrix() - A[f"x{n}", f"x{n}"] = np.eye(self.d) - if self.remove_gauge == "hard": - if k > 0: - A[f"a{k}", f"a{k}"] = np.eye(self.var_dict[f"a{k}"]) - A[f"x{n}", f"a{k}"] = -np.eye(self.d)[:, : self.var_dict[f"a{k}"]] - else: - A[f"a{k}", f"a{k}"] = np.eye(self.d) - A[f"x{n}", f"a{k}"] = -np.eye(self.d) - A[self.HOM, f"e{n}{k}"] = -0.5 - A_list.append(A.get_matrix(self.var_dict)) - return A_list - - def get_J_lifting(self, t): - positions, landmarks = self.get_positions_and_landmarks(t) - - J_lifting = np.zeros((self.M, self.N)) - for i, (n, k) in enumerate(self.edges): - delta = landmarks[k] - positions[n] - - # grad w.r.t. position - # d/dp_n|| ak - p_n || = -2(ak - p_n) - J_lifting[i, n * self.d : (n + 1) * self.d] = -2 * delta - - if self.remove_gauge == "hard": - # grad w.r.t. landmark d/d_pn ||a_k - p_n || = 2(ak - pn) - self.fill_depending_on_k(J_lifting[i], k, 2 * delta) - else: - start = self.n_positions * self.d + k * self.d - J_lifting[i, start : start + self.d] = 2 * delta - return J_lifting - - def get_hess_lifting(self, t): - """return list of the hessians of the M lifting functions.""" - hessians = [] - for j, (n, k) in enumerate(self.edges): - hessian = np.zeros((self.N, self.N)) - i = n * self.d - - # diagonal for position - hessian[range(i, i + self.d), range(i, i + self.d)] = 2.0 - if self.remove_gauge == "hard": - # diagonal for landmark - self.fill_hessian_depending_on_k(hessian, k, val=2.0) # along i - # diagonal for position - landmark - self.fill_hessian_depending_on_k( - hessian, k, fix_i=range(i, i + self.d), val=-2.0 - ) - else: - j = (self.n_positions + k) * self.d - hessian[range(i, i + self.d), range(i, i + self.d)] = 2 - # diagonal for landmark - hessian[range(j, j + self.d), range(j, j + self.d)] = 2 - # off-diagonal position - landmark - hessian[range(i, i + self.d), range(j, j + self.d)] = -2 - hessian[range(j, j + self.d), range(i, i + self.d)] = -2 - hessians.append(hessian) - return hessians - - def __repr__(self): - return f"rangeonlyslam2-{self.d}d"
- - - -if __name__ == "__main__": - lifter = RangeOnlySLAM2Lifter(n_positions=3, n_landmarks=4, d=2) - lifter.run(n_dual=1) -
- -
-
-
- -
- -
-

© Copyright 2025, POPR Contributors.

-
- - Built with Sphinx using a - theme - provided by Read the Docs. - - -
-
-
-
-
- - - - \ No newline at end of file diff --git a/docs/build/_modules/popr/examples/rotation_lifter.html b/docs/build/_modules/popr/examples/rotation_lifter.html deleted file mode 100644 index 5b3d1c7..0000000 --- a/docs/build/_modules/popr/examples/rotation_lifter.html +++ /dev/null @@ -1,330 +0,0 @@ - - - - - - - - popr.examples.rotation_lifter — POPR 0.0.1 documentation - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
-
    -
  • - - -
  • -
  • -
-
-
-
-
- -

Source code for popr.examples.rotation_lifter

-import numpy as np
-from poly_matrix.poly_matrix import PolyMatrix
-from scipy.spatial.transform import Rotation as R
-
-from popr.base_lifters import StateLifter
-
-METHOD = "CG"
-SOLVER_KWARGS = dict(
-    min_gradient_norm=1e-7, max_iterations=10000, min_step_size=1e-8, verbosity=1
-)
-
-
-
-[docs] -class RotationLifter(StateLifter): - """Rotation averaging problem.""" - - LEVELS = ["no"] - HOM = "h" - VARIABLE_LIST = [["h", "c"]] - - # whether or not to include the determinant constraints in the known constraints. - ADD_DETERMINANT = False - - NOISE = 1e-3 - - # Add any parameters here that describe the problem (e.g. number of landmarks etc.) - def __init__(self, level="no", param_level="no", d=2, n_meas=2): - self.n_meas = n_meas - self.level = level - super().__init__( - level=level, - param_level=param_level, - d=d, - ) - - @property - def var_dict(self): - return {self.HOM: 1, "c": self.d**2} - - def sample_theta(self): - """Generate a random new feasible point.""" - - if self.d == 2: - angle = np.random.uniform(0, 2 * np.pi) - C = R.from_euler("z", angle).as_matrix()[:2, :2] - elif self.d == 3: - C = R.random().as_matrix() - return C - - def get_x(self, theta=None, parameters=None, var_subset=None) -> np.ndarray: - """Get the lifted vector x given theta and parameters.""" - if theta is None: - theta = self.theta - if parameters is None: - parameters = self.parameters - if var_subset is None: - var_subset = self.var_dict.keys() - - x_data = [] - for key in var_subset: - if key == self.HOM: - x_data.append(1.0) - elif key == "c": - x_data += list(theta.flatten("C")) - dim_x = self.get_dim_x(var_subset=var_subset) - assert len(x_data) == dim_x - return np.array(x_data) - - def get_theta(self, x: np.ndarray) -> np.ndarray: - assert np.ndim(x) == 1 - C_flat = x[1 : 1 + self.d**2] - return C_flat.reshape((self.d, self.d)) - - def get_Q(self, noise: float | None = None): - if noise is None: - noise = self.NOISE - if self.y_ is None: - self.y_ = [] - for i in range(self.n_meas): - # noise model: R_i = R.T @ Rnoise - if noise > 0: - # Generate a random small rotation as noise and apply it - noise_rotvec = np.random.normal(scale=noise, size=(self.d,)) - Rnoise = ( - R.from_rotvec(noise_rotvec).as_matrix() - if self.d == 3 - else R.from_euler("z", noise_rotvec[0]).as_matrix()[:2, :2] - ) - Ri = self.theta.T @ Rnoise - else: - Ri = self.theta.T - self.y_.append(Ri) - - return self.get_Q_from_y(self.y_) - - def get_Q_from_y(self, y, output_poly=False): - # f(R) = sum_i || R @ R_i - I ||_F^2 - # argmin f(R) = argmin sum_i || R_i.T @ R_i ||^2 - 2 tr(R.T @ R_i) + ||I||_F^2 - # = argmin sum_i -2 tr(R.T @ R_i) + sum_i d - # = argmin sum_i -2 vec(R).T @ vec(R_i.T) + N * d - # sanity check for zero noise: - # || R @ R.T - I ||_F^2 = 0 - """param y: list of noisy rotation matrices.""" - Q = PolyMatrix() - for Ri in y: - Q[self.HOM, "c"] -= Ri.T.flatten("C")[None, :] - Q[self.HOM, self.HOM] += len(y) * self.d - if output_poly: - return Q - else: - return Q.get_matrix(self.var_dict) - - def local_solver_old( - self, t0, y, verbose=False, method=METHOD, solver_kwargs=SOLVER_KWARGS - ): - import pymanopt - from pymanopt.manifolds import SpecialOrthogonalGroup - - if method == "CG": - from pymanopt.optimizers import ConjugateGradient as Optimizer # fastest - elif method == "SD": - from pymanopt.optimizers import SteepestDescent as Optimizer # slow - elif method == "TR": - from pymanopt.optimizers import TrustRegions as Optimizer # okay - else: - raise ValueError(method) - - if verbose: - solver_kwargs["verbosity"] = 2 - else: - solver_kwargs["verbosity"] = 0 - - manifold = SpecialOrthogonalGroup(self.d, k=1) - - @pymanopt.function.autograd(manifold) - def cost(R): - cost = 0 - for Ri in y: - cost += np.sum((R.T @ Ri - np.eye(self.d)) ** 2) - return cost - - euclidean_gradient = None - problem = pymanopt.Problem( - manifold, cost, euclidean_gradient=euclidean_gradient - ) - optimizer = Optimizer(**solver_kwargs) - - res = optimizer.run(problem, initial_point=t0) - theta_hat = res.point - - success = ("min step_size" in res.stopping_criterion) or ( - "min grad norm" in res.stopping_criterion - ) - info = { - "success": success, - "msg": res.stopping_criterion, - } - if success: - return theta_hat, info, cost - - def test_and_add(self, A_list, Ai, output_poly): - x = self.get_x() - Ai_sparse = Ai.get_matrix(self.var_dict) - err = x.T @ Ai_sparse @ x - assert abs(err) <= 1e-10, err - if output_poly: - A_list.append(Ai) - else: - A_list.append(Ai_sparse) - - def get_A_known(self, var_dict=None, output_poly=False, add_redundant=False): - A_list = [] - if var_dict is None: - var_dict = self.var_dict - - if "c" in var_dict: - # enforce diagonal == 1 - for i in range(self.d): - Ei = np.zeros((self.d, self.d)) - Ei[i, i] = 1.0 - constraint = np.kron(Ei, np.eye(self.d)) - Ai = PolyMatrix(symmetric=True) - Ai["c", "c"] = constraint - Ai[self.HOM, self.HOM] = -1 - self.test_and_add(A_list, Ai, output_poly=output_poly) - - # enforce off-diagonal == 0 - for i in range(self.d): - for j in range(i + 1, self.d): - Ei = np.zeros((self.d, self.d)) - Ei[i, j] = 1.0 - Ei[j, i] = 1.0 - constraint = np.kron(Ei, np.eye(self.d)) - Ai = PolyMatrix(symmetric=True) - Ai["c", "c"] = constraint - self.test_and_add(A_list, Ai, output_poly=output_poly) - - # enforce that determinant is one. - if self.d == 2 and self.ADD_DETERMINANT: - # C = [a b; c d]; ad - bc - 1 = 0 - # a b c d - # a 1 - # b -1 - # c -1 - # d 1 - Ai = PolyMatrix(symmetric=True) - constraint = np.zeros((self.d**2, self.d**2)) - constraint[0, 3] = constraint[3, 0] = 1.0 - constraint[1, 2] = constraint[2, 1] = -1.0 - Ai[self.HOM, self.HOM] = -2 - Ai["c", "c"] = constraint - self.test_and_add(A_list, Ai, output_poly=output_poly) - elif self.d == 3 and self.ADD_DETERMINANT: - # c11 c12 c13 c21 * c32 - c31 * c22 = c13 - # C = [c21, c22, c23]; c1 x c2 = c3: c31 * c12 - c11 * c12 = c23 - # c31 c32 c33 c11 * c22 - c21 * c12 = c33 - print( - "Warning: consider implementing the determinant constraint for RobustPoseLifter, d=3" - ) - return A_list
- -
- -
-
-
- -
- -
-

© Copyright 2025, POPR Contributors.

-
- - Built with Sphinx using a - theme - provided by Read the Docs. - - -
-
-
-
-
- - - - \ No newline at end of file diff --git a/docs/build/_modules/popr/examples/stereo1d_lifter.html b/docs/build/_modules/popr/examples/stereo1d_lifter.html deleted file mode 100644 index a3cdec0..0000000 --- a/docs/build/_modules/popr/examples/stereo1d_lifter.html +++ /dev/null @@ -1,317 +0,0 @@ - - - - - - - - popr.examples.stereo1d_lifter — POPR 0.0.1 documentation - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
-
    -
  • - - -
  • -
  • -
-
-
-
-
- -

Source code for popr.examples.stereo1d_lifter

-from typing import Optional
-
-import numpy as np
-from poly_matrix.least_squares_problem import LeastSquaresProblem
-from poly_matrix.poly_matrix import PolyMatrix
-
-from popr.base_lifters import StateLifter
-
-
-
-[docs] -class Stereo1DLifter(StateLifter): - """Toy example for stereo localization in 1D. We minimize the following cost function: - - .. math:: - f(\\theta) = \\sum_{j=0}^{N-1} (u_j - 1 / (\\theta - a_j))^2 - - where :math:`a_j` are the landmarks and :math:`u_j` are the measurements. - - This is the pedagogical running example of `this paper <https://arxiv.org/abs/2308.05783>`_. - and also used in the :ref:`Quick Start Guide`. - """ - - PARAM_LEVELS = ["no", "p", "ppT"] - VARIABLE_LIST = [["h", "x"], ["h", "x", "z_0"], ["h", "x", "z_0", "z_1"]] - - NOISE = 0.1 - - def __init__(self, n_landmarks, param_level="no"): - self.n_landmarks = n_landmarks - self.d = 1 - self.W = 1.0 - - # will be initialized later - self.landmarks_ = None - - super().__init__(param_level=param_level, d=self.d, n_parameters=n_landmarks) - - @property - def landmarks(self): - if self.landmarks_ is None: - self.landmarks_ = np.random.rand(self.n_landmarks, self.d) - return self.landmarks_ - - def sample_parameters(self, theta=None): - if self.parameters_ is None: - return self.sample_parameters_landmarks(self.landmarks) - landmarks = np.random.rand(self.n_landmarks, self.d) - return self.sample_parameters_landmarks(landmarks) - - def sample_theta(self): - x_try = np.random.rand(1) - counter = 0 - while np.min(np.abs(x_try - self.landmarks)) <= 1e-2: - x_try = np.random.rand(1) - counter += 1 - if counter >= 1000: - print("Warning: couldn't find valid setup") - return - return x_try - - def get_x(self, theta=None, parameters=None, var_subset=None): - """ - :param var_subset: list of variables to include in x vector. Set to None for all. - """ - if theta is None: - theta = self.theta - if parameters is None: - parameters = self.parameters - - if var_subset is None: - var_subset = self.var_dict.keys() - - if self.param_level == "no": - landmarks = { - f"p_{i}": self.landmarks[i] for i in range(self.landmarks.shape[0]) - } - else: - landmarks = { - f"p_{i}": parameters[f"p_{i}"][: self.d] - for i in range(self.landmarks.shape[0]) - } - - x_data = [] - for key in var_subset: - if key == self.HOM: - x_data.append(1.0) - elif key == "x": - x_data.append(theta[0]) - elif "z" in key: - idx = int(key.split("_")[-1]) - x_data.append(1 / (theta[0] - landmarks[f"p_{idx}"])) - else: - raise ValueError("unknown key in get_x", key) - return np.hstack(x_data) - - @property - def var_dict(self): - vars = [self.HOM, "x"] + [f"z_{j}" for j in range(self.n_landmarks)] - return {v: 1 for v in vars} - - @property - def param_dict(self): - return self.param_dict_landmarks - - def get_Q(self, noise: Optional[float] = None): - if self.landmarks is None: - raise ValueError("self.landmarks must be initialized before calling get_Q.") - if noise is None: - noise = self.NOISE - - y = 1 / (self.theta - self.landmarks.flatten()) + np.random.normal( - scale=noise, loc=0, size=self.n_landmarks - ) - if self.y_ is None: - self.y_ = y - - return self.get_Q_from_y(y) - - def get_Q_from_y(self, y): - ls_problem = LeastSquaresProblem() - for j in range(len(y)): - ls_problem.add_residual({self.HOM: -y[j], f"z_{j}": 1}) - return ls_problem.get_Q().get_matrix(self.var_dict) - - def get_A_known(self, var_dict=None, output_poly=False): - if var_dict is None: - var_dict = self.var_dict - - # if self.add_parameters: - # raise ValueError("can't extract known matrices yet when using parameters.") - - A_known = [] - - # enforce that z_j = 1/(x - a_j) <=> 1 - z_j*x + a_j*z_j = 0 - if not ("x" in var_dict and self.HOM in var_dict): - return [] - - landmark_indices = [ - int(key.split("_")[-1]) for key in var_dict if key.startswith("z_") - ] - for j in landmark_indices: - A = PolyMatrix() - A[self.HOM, f"z_{j}"] = 0.5 * self.landmarks[j] - A["x", f"z_{j}"] = -0.5 - A[self.HOM, self.HOM] = 1.0 - if output_poly: - A_known.append(A) - else: - A_known.append(A.get_matrix(variables=self.var_dict)) - return A_known - - def get_A_known_redundant(self, var_dict=None, output_poly=False): - import itertools - - if var_dict is None: - var_dict = self.var_dict - - assert self.HOM in var_dict, "homogenization variable must be in var_dict" - - landmark_indices = [ - int(key.split("_")[-1]) for key in var_dict if key.startswith("z_") - ] - # add known redundant constraints: - # enforce that z_j - z_i = (a_j - a_i) * z_j * z_i - A_known = [] - for i, j in itertools.combinations(landmark_indices, 2): - A = PolyMatrix() - A[self.HOM, f"z_{j}"] = 1 - A[self.HOM, f"z_{i}"] = -1 - A[f"z_{i}", f"z_{j}"] = self.landmarks[i] - self.landmarks[j] - if output_poly: - A_known.append(A) - else: - A_known.append(A.get_matrix(variables=self.var_dict)) - return A_known - - def get_cost(self, t, y): - return np.sum((y - (1 / (t - self.landmarks.flatten()))) ** 2) - - def local_solver( - self, t_init, y, num_iters=100, eps=1e-5, W=None, verbose=False, **kwargs - ): - info = {} - a = self.landmarks.flatten() - x_op = t_init - for i in range(num_iters): - u = y - (1 / (x_op - a)) - if verbose: - print(f"cost {i}", np.sum(u**2)) - du = 1 / ((x_op - a) ** 2) - if np.linalg.norm(du) > 1e-10: - dx = -np.sum(u * du) / np.sum(du * du) - x_op = x_op + dx - if np.abs(dx) < eps: - msg = f"converged in dx after {i} it" - cost = self.get_cost(x_op, y) - info = {"msg": msg, "cost": cost, "success": True} - return x_op, info, cost - else: - msg = f"converged in du after {i} it" - cost = self.get_cost(x_op, y) - info = {"msg": msg, "cost": self.get_cost(x_op, y), "success": True} - return x_op, info, cost - return None, {"msg": "didn't converge", "cost": None, "success": False}, None - - def __repr__(self): - return f"stereo1d_{self.param_level}"
- -
- -
-
-
- -
- -
-

© Copyright 2025, POPR Contributors.

-
- - Built with Sphinx using a - theme - provided by Read the Docs. - - -
-
-
-
-
- - - - \ No newline at end of file diff --git a/docs/build/_modules/popr/examples/stereo2d_lifter.html b/docs/build/_modules/popr/examples/stereo2d_lifter.html deleted file mode 100644 index 6f707eb..0000000 --- a/docs/build/_modules/popr/examples/stereo2d_lifter.html +++ /dev/null @@ -1,211 +0,0 @@ - - - - - - - - popr.examples.stereo2d_lifter — POPR 0.0.1 documentation - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
-
    -
  • - - -
  • -
  • -
-
-
-
-
- -

Source code for popr.examples.stereo2d_lifter

-# import autograd.numpy as np
-import numpy as np
-
-from popr.base_lifters import StereoLifter
-from popr.utils.geometry import convert_phi_to_theta, convert_theta_to_phi
-from popr.utils.stereo2d_problem import _cost, local_solver
-
-
-def change_dimensions(a, y, x):
-    p_w = np.concatenate([a, np.ones((a.shape[0], 1))], axis=1)
-    y_mat = np.c_[[*y]]  # N x 2
-    return p_w[:, :, None], y_mat[:, :, None], x[:, None]
-
-
-GTOL = 1e-6
-
-
-
-[docs] -class Stereo2DLifter(StereoLifter): - """Stereo-camera localization in 2D. - - We minimize the following cost function: - - .. math:: - f(\\theta) = \\sum_{j=0}^{n} (u_j - M q_j / q_j[1])^2 - - where - - - :math:`p_j` are known landmarks (in homogeneous coordinates), - - :math:`u_j` are pixel measurements (2 elements: one pixel in left "image" and one in right "image"), - - :math:`q_j = T(\\theta) p_j` are the (homogeneous) coordinates of landmark j in the (unknown) camera frame, parameterized by :math:`T(\\theta)`, and - - :math:`M` is the stereo camera calibration matrix. Here, it is given by - - .. math:: - - \\begin{bmatrix} - f_u & c_u & \\frac{b f_u}{2} \\\\ - f_v & c_v & -\\frac{b f_v}{2} \\\\ - \\end{bmatrix} - - where :math:`f_u, f_v` are horizontal and vertical focal lengths, :math:`c_u,c_v` are image center points in pixels and :math:`b` is the camera baseline. - - This example is treated in more details in `this paper <https://arxiv.org/abs/2308.05783>`_. - """ - - def __init__(self, n_landmarks, level="no", param_level="no", variable_list=None): - self.W = np.stack([np.eye(2)] * n_landmarks) - - super().__init__( - n_landmarks=n_landmarks, - level=level, - param_level=param_level, - d=2, - variable_list=variable_list, - ) - - @property - def M_matrix(self): - f_u = 484.5 - c_u = 322 - b = 0.24 - return np.array([[f_u, c_u, f_u * b / 2], [f_u, c_u, -f_u * b / 2]]) - - def get_cost(self, t, y, W=None): - - if W is None: - W = self.W - a = self.landmarks - - phi = convert_theta_to_phi(t) - p_w, y, phi = change_dimensions(a, y, phi) - cost = _cost(phi, p_w, y, W, self.M_matrix) - if StereoLifter.NORMALIZE: - return cost / (self.n_landmarks * self.d) - else: - return cost - - def local_solver(self, t_init, y, W=None, verbose=False, **kwargs): - - if W is None: - W = self.W - a = self.landmarks - - init_phi = convert_theta_to_phi(t_init) - p_w, y, __ = change_dimensions(a, y, init_phi) - success, phi_hat, cost = local_solver( - p_w=p_w, y=y, W=W, init_phi=init_phi, log=verbose, gtol=GTOL - ) - if StereoLifter.NORMALIZE: - cost /= self.n_landmarks * self.d - # cost /= self.n_landmarks * self.d - theta_hat = convert_phi_to_theta(phi_hat) - info = {"success": success, "msg": "converged"} - if success: - return theta_hat, info, cost - else: - return None, info, cost
- - - -if __name__ == "__main__": - lifter = Stereo2DLifter(n_landmarks=3) -
- -
-
-
- -
- -
-

© Copyright 2025, POPR Contributors.

-
- - Built with Sphinx using a - theme - provided by Read the Docs. - - -
-
-
-
-
- - - - \ No newline at end of file diff --git a/docs/build/_modules/popr/examples/stereo3d_lifter.html b/docs/build/_modules/popr/examples/stereo3d_lifter.html deleted file mode 100644 index cba5256..0000000 --- a/docs/build/_modules/popr/examples/stereo3d_lifter.html +++ /dev/null @@ -1,284 +0,0 @@ - - - - - - - - popr.examples.stereo3d_lifter — POPR 0.0.1 documentation - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
-
    -
  • - - -
  • -
  • -
-
-
-
-
- -

Source code for popr.examples.stereo3d_lifter

-import pickle
-
-import numpy as np
-
-from popr.base_lifters import StereoLifter
-from popr.utils.geometry import get_T, get_theta_from_T
-from popr.utils.stereo3d_problem import _cost, local_solver
-
-
-def change_dimensions(a, y):
-    p_w = np.concatenate([a, np.ones((a.shape[0], 1))], axis=1)
-    y_mat = np.c_[[*y]]  # N x 2
-    return p_w[:, :, None], y_mat[:, :, None]
-
-
-GTOL = 1e-6
-
-
-
-[docs] -class Stereo3DLifter(StereoLifter): - """Stereo-camera localization in 3D. - - Analogously to :class:`Stereo2DLifter`, we minimize the following cost function: - - .. math:: - f(\\theta) = \\sum_{j=0}^{n} (u_j - M q_j / q_j[2])^2 - - where - - - :math:`p_j` are known landmarks (in homogeneous coordinates), - - :math:`u_j` are pixel measurements (4 elements: two pixel coordinates in left image and two in right image), - - :math:`q_j = T(\\theta) p_j` are the (homogeneous) coordinates of landmark j in the (unknown) camera frame, parameterized by :math:`T(\\theta)`, and - - :math:`M` is the stereo camera calibration matrix. Here, it is given by - - .. math:: - - \\begin{bmatrix} - f_u & 0 & c_u & \\frac{b f_u}{2} \\\\ - 0 & f_v & c_v & 0 \\\\ - f_u & 0 & c_u & -\\frac{b f_u}{2} \\\\ - 0 & f_v & c_v & 0 \\\\ - \\end{bmatrix} - - where :math:`f_u, f_v` are horizontal and vertical focal lengths, :math:`c_u,c_v` are image center points in pixels and :math:`b` is the camera baseline. - - This example is treated in more details in `this paper <https://arxiv.org/abs/2308.05783>`_. - """ - - def __init__(self, n_landmarks, level="no", param_level="no", variable_list=None): - self.W = np.stack([np.eye(4)] * n_landmarks) - - super().__init__( - n_landmarks=n_landmarks, - level=level, - param_level=param_level, - d=3, - variable_list=variable_list, - ) - - @property - def M_matrix(self): - f_u = 484.5 - f_v = 484.5 - c_u = 322 - c_v = 247 - b = 0.24 - return np.array( - [ - [f_u, 0, c_u, f_u * b / 2], - [0, f_v, c_v, 0], - [f_u, 0, c_u, -f_u * b / 2], - [0, f_v, c_v, 0], - ] - ) - - @staticmethod - def from_file(fname): - with open(fname, "rb") as f: - y_ = pickle.load(f) - landmarks = pickle.load(f) - theta = pickle.load(f) - - level = pickle.load(f) - param_level = pickle.load(f) - variable_list = pickle.load(f) - lifter = Stereo3DLifter( - n_landmarks=landmarks.shape[0], - level=level, - param_level=param_level, - variable_list=variable_list, - ) - lifter.y_ = y_ - lifter.landmarks_ = landmarks - lifter.parameters = np.r_[1, landmarks.flatten()] - lifter.theta = theta - return lifter - - def to_file(self, fname): - with open(fname, "wb") as f: - pickle.dump(self.y_, f) - pickle.dump(self.landmarks, f) - - pickle.dump(self.theta, f) - pickle.dump(self.level, f) - pickle.dump(self.param_level, f) - pickle.dump(self.variable_list, f) - - def get_cost(self, t, y, W=None): - """ - :param t: can be either - - x, y, z, yaw, pitch roll: vector of unknowns, or - - [c1, c2, c3, x, y, z], the theta vector (flattened C and x, y, z) - """ - - if W is None: - W = self.W - a = self.landmarks - - p_w, y = change_dimensions(a, y) - - T = get_T(theta=t, d=3) - - cost = _cost(p_w=p_w, y=y, T=T, M=self.M_matrix, W=W) - if StereoLifter.NORMALIZE: - return cost / (self.n_landmarks * self.d) - else: - return cost - - def local_solver(self, t_init, y, W=None, verbose=False, **kwargs): - """ - :param t_init: same options asfor t in cost. - """ - - if W is None: - W = self.W - - a = self.landmarks - p_w, y = change_dimensions(a, y) - T_init = get_T(theta=t_init, d=3) - - info, T_hat, cost = local_solver( - T_init=T_init, - y=y, - p_w=p_w, - W=W, - M=self.M_matrix, - log=False, - gtol=GTOL, - min_update_norm=-1, # makes this inactive - ) - - if verbose: - print("Stereo3D local solver:", info["msg"]) - - if StereoLifter.NORMALIZE: - - cost /= self.n_landmarks * self.d - - x_hat = get_theta_from_T(T_hat) - x = self.get_x(theta=x_hat) - Q = self.get_Q_from_y(y[:, :, 0]) - cost_Q = x.T @ Q @ x - if abs(cost) > 1e-10: - if not (abs(cost_Q - cost) / cost < 1e-8): - print(f"Warning, cost not equal {cost_Q:.2e} {cost:.2e}") - - if info["success"]: - return x_hat, info, cost - else: - return None, info, cost
- - - -if __name__ == "__main__": - lifter = Stereo3DLifter(n_landmarks=4) -
- -
-
-
- -
- -
-

© Copyright 2025, POPR Contributors.

-
- - Built with Sphinx using a - theme - provided by Read the Docs. - - -
-
-
-
-
- - - - \ No newline at end of file diff --git a/docs/build/_modules/popr/examples/wahba_lifter.html b/docs/build/_modules/popr/examples/wahba_lifter.html deleted file mode 100644 index e4fb820..0000000 --- a/docs/build/_modules/popr/examples/wahba_lifter.html +++ /dev/null @@ -1,342 +0,0 @@ - - - - - - - - popr.examples.wahba_lifter — POPR 0.0.1 documentation - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -

Source code for popr.examples.wahba_lifter

-# import autograd.numpy as np
-import numpy as np
-
-from popr.base_lifters import RobustPoseLifter
-from popr.utils.geometry import get_C_r_from_theta
-from popr.utils.plotting_tools import plot_frame
-
-N_TRYS = 10
-
-# TODO(FD) for some reason this is not required as opposed to what is stated in Heng's paper
-# and it currently breaks tightness (might be a bug in my implementation though)
-USE_INEQ = False
-
-NORMALIZE = False
-
-
-
-[docs] -class WahbaLifter(RobustPoseLifter): - """This example is treated in more details in `this paper <https://arxiv.org/abs/2308.05783>`_, - under the name "PPR" (point-to-point registration). - """ - - NOISE = 1e-2 # inlier noise - NOISE_OUT = 1.0 # outlier noise - - def h_list(self, t): - """ - We want to inforce that - - norm(t) <= 10 (default) - as constraints h_j(t)<=0 - """ - default = super().h_list(t) - return default - - def get_random_position(self): - return np.random.uniform( - -0.5 * self.MAX_DIST ** (1 / self.d), - 0.5 * self.MAX_DIST ** (1 / self.d), - size=self.d, - ) - - def get_B_known(self): - """Get inequality constraints of the form x.T @ B @ x <= 0""" - if not USE_INEQ: - return [] - - default = super().get_B_known() - return default - - def term_in_norm(self, R, t, pi, ui): - return R @ pi + t - ui - - def residual_sq(self, R, t, pi, ui): - # TODO: can easily extend below to matrix-weighted - W = np.eye(self.d) - res_sq = (R @ pi + t - ui).T @ W @ (R @ pi + t - ui) - if NORMALIZE: - return res_sq / (self.n_landmarks * self.d) ** 2 - return res_sq - - def plot_setup(self): - if self.d != 2: - print("Plotting currently only supported for d=2") - return - import matplotlib.pylab as plt - - fig, ax = plt.subplots() - - # R, t = get_C_r_from_theta(self.theta, self.d) - # ax.scatter(*t, color="k", label="pose") - - ax.axis("equal") - t_wc_w, C_cw = plot_frame(ax, self.theta, label="pose", color="gray", d=2) - - if self.y_ is not None: - for i in range(self.y_.shape[0]): - ax.scatter(*self.landmarks[i], color=f"C{i}", label="landmarks") - - # this vector is in camera coordinates - t_cpi_c = self.y_[i] - # t_cpi_w: vector from camera to pi in world coordinates - - ax.plot( - [t_wc_w[0], self.landmarks[i][0]], - [t_wc_w[1], self.landmarks[i][1]], - color=f"C{i}", - ls=":", - ) - if C_cw is not None: - t_cpi_w = C_cw.T @ t_cpi_c - ax.plot( - [t_wc_w[0], t_wc_w[0] + t_cpi_w[0]], - [t_wc_w[1], t_wc_w[1] + t_cpi_w[1]], - color=f"r" if i < self.n_outliers else "g", - ) - - def get_Q( - self, - noise: float | None = None, - output_poly: bool = False, - use_cliques: list = [], - ): - if noise is None: - noise = self.NOISE - - if self.y_ is None: - theta = self.theta[: self.d + self.d**2] - outlier_index = self.get_outlier_index() - - self.y_ = np.empty((self.n_landmarks, self.d)) - R, t = get_C_r_from_theta(theta, self.d) - for i in range(self.n_landmarks): - valid_measurement = False - for _ in range(N_TRYS): - outlier = i in outlier_index - y_i = R @ self.landmarks[i] + t - if outlier: - y_i += np.random.normal( - scale=self.NOISE_OUT, loc=0, size=self.d - ) - else: - y_i += np.random.normal(scale=noise, loc=0, size=self.d) - - residual = self.residual_sq(R, t, self.landmarks[i], y_i) - if not self.robust: - valid_measurement = True - else: - if outlier: - valid_measurement = residual > self.beta - else: - valid_measurement = residual < self.beta - if valid_measurement: - break - if not valid_measurement and self.robust: - self.plot_setup() - raise ValueError("did not find a valid measurement.") - self.y_[i] = y_i - Q = self.get_Q_from_y(self.y_, output_poly=output_poly, use_cliques=use_cliques) - return Q - - def get_Q_from_y(self, y, output_poly: bool = False, use_cliques: list = []): - """ - every cost term can be written as - (1 + wi)/b^2 r^2(x, zi) + (1 - wi) - - residual term: - (Rpi + t - ui).T Wi (Rpi + t - ui) = - [t', vec(R)'] @ [I (pi x I)]' @ Wi @ [I (pi x I)] @ [t ; vec(R)] - ------x'----- -----Pi'----- - - 2 [t', vec(R)'] @ [I (pi x I)]' Wi @ ui - -----x'------ ---------Pi_xl-------- - + ui.T @ Wi @ ui - -----Pi_ll------ - """ - - if len(use_cliques): - js = use_cliques - else: - js = list(range(self.n_landmarks)) - - from poly_matrix import PolyMatrix - - Q = PolyMatrix(symmetric=True) - if NORMALIZE: - norm = (self.n_landmarks * self.d) ** 2 - - Wi = np.eye(self.d) - for i in js: - pi = self.landmarks[i] - ui = y[i] - Pi = np.c_[np.eye(self.d), np.kron(pi, np.eye(self.d))] - - Pi_ll = ui.T @ Wi @ ui - Pi_xl = -(Pi.T @ Wi @ ui)[:, None] - Qi = Pi.T @ Wi @ Pi - if NORMALIZE: - Pi_ll /= norm - Pi_xl /= norm - Qi /= norm - - if self.robust: - Qi /= self.beta**2 - Pi_ll /= self.beta**2 - Pi_xl /= self.beta**2 - # Q["x", "x"] += Qi - Q["t", "t"] += Qi[: self.d, : self.d] - Q["t", "c"] += Qi[: self.d, self.d :] - Q["c", "c"] += Qi[self.d :, self.d :] - - # Q["x", self.HOM] += Pi_xl - Q["t", self.HOM] += Pi_xl[: self.d, :] - Q["c", self.HOM] += Pi_xl[self.d :, :] - Q[self.HOM, self.HOM] += ( - 1 + Pi_ll - ) # 1 from (1 - wi), Pi_ll from first term. - Q[ - self.HOM, f"w_{i}" - ] += -0.5 # from (1 - wi), 0.5 cause on off-diagonal - if self.level == "xwT": - # Q[f"z_{i}", "x"] += 0.5 * Qi - Q[f"z_{i}", "t"] += 0.5 * Qi[:, : self.d] - Q[f"z_{i}", "c"] += 0.5 * Qi[:, self.d :] - - Q[self.HOM, f"w_{i}"] += 0.5 * Pi_ll # from first term - - Q[f"z_{i}", self.HOM] += Pi_xl - elif self.level == "xxT": - Q["z_0", f"w_{i}"] += 0.5 * Qi.flatten()[:, None] - - # Q["x", f"w_{i}"] += Pi_xl - Q["t", f"w_{i}"] += Pi_xl[: self.d, :] - Q["c", f"w_{i}"] += Pi_xl[self.d :, :] - - Q[self.HOM, f"w_{i}"] += 0.5 * Pi_ll - else: - # Q["x", "x"] += Qi - Q["t", "t"] += Qi[: self.d, : self.d] - Q["t", "c"] += Qi[: self.d, self.d :] - Q["c", "c"] += Qi[self.d :, self.d :] - - # Q["x", self.HOM] += Pi_xl - Q["t", self.HOM] += Pi_xl[: self.d, :] - Q["c", self.HOM] += Pi_xl[self.d :, :] - Q[self.HOM, self.HOM] += Pi_ll # on diagonal - if output_poly: - return 0.5 * Q - Q_sparse = 0.5 * Q.get_matrix(variables=self.var_dict) - return Q_sparse - - def __repr__(self): - appendix = "_robust" if self.robust else "" - return f"wahba_{self.d}d_{self.level}_{self.param_level}{appendix}"
- -
- -
-
-
- -
- -
-

© Copyright 2025, POPR Contributors.

-
- - Built with Sphinx using a - theme - provided by Read the Docs. - - -
-
-
-
-
- - - - \ No newline at end of file diff --git a/docs/build/_modules/popr/lifters/range_only_lifters.html b/docs/build/_modules/popr/lifters/range_only_lifters.html deleted file mode 100644 index f7a6783..0000000 --- a/docs/build/_modules/popr/lifters/range_only_lifters.html +++ /dev/null @@ -1,463 +0,0 @@ - - - - - - - - popr.lifters.range_only_lifters — POPR 0.0.1 documentation - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
-
    -
  • - - -
  • -
  • -
-
-
-
-
- -

Source code for popr.lifters.range_only_lifters

-import itertools
-from abc import abstractmethod
-
-import numpy as np
-
-from .state_lifter import StateLifter
-
-# How to deal with Gauge freedom.
-# - None: do not remove it
-# - "hard": remove variables alltogether
-# - "cost": add cost on a0 (attempting to make it 0)
-# recommended is "hard"
-# REMOVE_GAUGE = None
-REMOVE_GAUGE = "hard"
-# REMOVE_GAUGE = "cost"
-
-SOLVER_KWARGS = dict(
-    # method="Nelder-Mead",
-    # method="BFGS"  # the only one that almost always converges
-    method="Powell"
-)
-
-
-
-[docs] -class RangeOnlyLifter(StateLifter): - """Lifters for range-only localization and SLAM problems. - - Some clarifications on names: - - generate_random_landmarks: always fix - - first one at 0, (a0 = [a0_x, a0_y, a0_z] = [0, 0, 0]) - - second one along x, (a1_y = 0, a1_z = 0) - - third along positive y (a2_z = 0, a2_y > 0) } fix the "flip" in 2d, rotation in 3d - - fourth with positive z axis (a3_z > 0) } fix rotation in 3d - --> in 2d, will optimize for landmarks_theta = [a1_x, a2_x, a2_y, ...] - --> in 3d, will optimize for landmarks_theta = [a1_x, a2_x, a2_y, a3_x, a3_y, a3_z, ...] - saved in self.landmarks - - generate_random_positions: - return randomly generated positions (motion model to be implemented) - - - sample_theta: - - for localization problem, this can regenerate both landmarks and positions - - for SLAM problem, regenerate only positions (to be tested) - - theta: vector of unknowns [positions, (landmarks_theta for SLAM, see above)] - x: [1, theta, lifting_functions] - where lifting_functions contains: - - ||t_n||^2 for RangeOnlyLoc - - ||t_n||^2, ||a_k||^2, t_n.T@a_k for RangeOnlySLAM1 - - ||a_k - t_n||^2 for RangeOnlySLAM2 - """ - - def __init__( - self, - n_positions, - n_landmarks, - d, - edges=None, - remove_gauge=REMOVE_GAUGE, - param_level="no", - ): - self.remove_gauge = remove_gauge - self.n_positions = n_positions - self.n_landmarks = n_landmarks - self.landmarks = None - self.d = d - - # TODO(FD) replace edges with W - if edges is None: - self.edges = list( - itertools.product(range(n_positions), range(n_landmarks), repeat=1) - ) - else: - # TODO(FD) add tests - self.edges = edges - super().__init__(param_level=param_level) - - @property - def var_dict(self): - level_dim = self.get_level_dims()[self.level] - if self.var_dict_ is None: - self.var_dict_ = {self.HOM: 1} - self.var_dict.update({"x": self.d**2 + self.d}) - self.var_dict.update( - {f"z_{k}": self.d + level_dim for k in range(self.n_parameters)} - ) - return self.var_dict_ - - @property - def param_dict(self): - return self.param_dict_landmarks - - def sample_parameters(self): - landmarks = np.random.normal(loc=0, scale=1, size=(self.n_landmarks, self.d)) - return self.sample_parameters_landmarks(landmarks) - - def sample_theta(self): - self.positions = np.random.rand(self.n_positions, self.d) - return self.positions - - def get_theta(self, landmarks=None, positions=None): - if landmarks is None: - landmarks = self.sample_random_landmarks() - if positions is None: - positions = self.sample_random_positions() - theta = list(positions.flatten("C")) - if self.remove_gauge == "hard": - theta.append(landmarks[1, 0]) - if self.d == 2: - theta += list(landmarks[2:, :].flatten("C")) - elif self.d == 3: - theta.append(landmarks[2, 0]) - theta.append(landmarks[2, 1]) - theta += list(landmarks[3:, :].flatten("C")) - else: - theta += list(landmarks.flatten("C")) - return np.array(theta) - - def sample_random_landmarks(self): - landmarks = np.random.rand(self.n_landmarks, self.d) - if self.remove_gauge is not None: - landmarks[0, :] = 0.0 - landmarks[1, 1] = 0 # set a1_y = 0 - if self.d == 3: - landmarks[1, 2] = 0 # set a1_z = 0 - landmarks[2, 2] = 0 # set a2_z = 0 - - # TODO(FD) figure out if below is necessary (it shouldn't hurt anyways) - # make sure to also fix the flip - if self.d == 2: - # make sure a2_y > 0. - if landmarks[2, 1] < 0: # - landmarks[:, 1] = -landmarks[:, 1] - elif self.d == 3: - # landmarks 0, 1, 2 now live in the x-y plane. - if landmarks[3, 2] < 0: - landmarks[:, 2] = -landmarks[:, 2] - return landmarks - -
-[docs] - def get_positions_and_landmarks(self, theta): - """ - --> in 2d, will optimize for landmarks_theta = [a1_x, a2_x, a2_y, ...] - --> in 3d, will optimize for landmarks_theta = [a1_x, a2_x, a2_y, a3_x, a3_y, a3_z, ...] - """ - N = self.n_positions * self.d - positions = theta[:N].reshape((-1, self.d)) - - if len(theta) > N: - if self.remove_gauge == "hard": - # range-only SLAM - - # TODO(FD): figure out if it's easier to set to zero or to the actual landmarks. - landmarks = np.zeros((self.n_landmarks, self.d)) - # landmarks = deepcopy(self.landmarks) - - # landmarks[0, :] = 0.0 # self.landmarks[0, :] - landmarks[1, 0] = theta[N] - # landmarks[1, 1] = 0.0 # self.landmarks[1, 1] - if self.d == 2: - landmarks[2:, :] = theta[N + 1 :].reshape( - (self.n_landmarks - 2, self.d) - ) - elif self.d == 3: - # landmarks[1, 2] = 0.0 #self.landmarks[1, 2] - landmarks[2, 0] = theta[N + 1] - landmarks[2, 1] = theta[N + 2] - landmarks[3:, :] = theta[N + 3 :].reshape( - (self.n_landmarks - 3, self.d) - ) - else: - landmarks = theta[N:].reshape((-1, self.d)) - return positions, landmarks - else: - # range-only localization - return positions, self.landmarks
- - -
-[docs] - def get_Q(self, noise: float = 1e-3) -> tuple: - # N x K matrix - y_gt = ( - np.linalg.norm( - self.landmarks[None, :, :] - self.positions[:, None, :], axis=2 - ) - ** 2 - ) - y = y_gt + np.random.normal(loc=0, scale=noise, size=y_gt.shape) - Q = self.get_Q_from_y(y) - - # DEBUGGING - x = self.get_x() - cost1 = x.T @ Q @ x - cost2 = np.sum((y - y_gt) ** 2) - cost3 = self.get_cost(self.theta, y) - assert abs(cost1 - cost2) < 1e-10 - assert abs(cost1 - cost3) < 1e-10 - return Q
- - - def get_J(self, t, y): - import scipy.sparse as sp - - N = self.n_positions * self.n_landmarks - - J = sp.csr_array( - (np.ones(self.N), (range(1, self.N + 1), range(self.N))), - shape=(self.dim_x, self.N), - ) - J[self.N + 1 :, :] = self.get_J_lifting(t) - return J - -
-[docs] - def get_hess(self, t, y): - """get Hessian""" - x = self.get_x(t) - Q = self.get_Q_from_y(y) - J = self.get_J(t, y) - hess = 2 * J.T @ Q @ J - - hessians = self.get_hess_lifting(t) - B = self.ls_problem.get_B_matrix(self.var_dict) - residuals = B @ x - for m, h in enumerate(hessians): - bm_tilde = B[:, -self.M + m] - factor = float(bm_tilde.T @ residuals) - hess += 2 * factor * h - return hess
- - -
-[docs] - def get_grad(self, t, y): - """get gradient""" - J = self.get_J(t, y) - x = self.get_x(t) - Q = self.get_Q_from_y(y) - return 2 * J.T @ Q @ x
- - -
-[docs] - def get_cost(self, t, y): - """ - get cost for given positions, landmarks and noise. - - :param t: (positions, landmarks) tuple - """ - positions, landmarks = self.get_positions_and_landmarks(t) - - y_current = ( - np.linalg.norm(landmarks[None, :, :] - positions[:, None, :], axis=2) ** 2 - ) - cost = 0 - for n, k in self.edges: - cost += (y[n, k] - y_current[n, k]) ** 2 - return cost
- - -
-[docs] - def local_solver( - self, t_init, y, tol=1e-8, verbose=False, solver_kwargs=SOLVER_KWARGS - ): - """ - :param t_init: (positions, landmarks) tuple - """ - from scipy.optimize import minimize - - sol = minimize( - self.get_cost, - x0=t_init, - args=y, - jac=self.get_grad, - # hess=self.get_hess, not used by any solvers. - **solver_kwargs, - tol=tol, - options={"disp": verbose}, # j, "maxfun": 100}, - ) - if sol.success: - that = sol.x - rel_error = self.get_cost(that, y) - self.get_cost(sol.x, y) - assert abs(rel_error) < 1e-10, rel_error - cost = sol.fun - else: - that = cost = None - msg = sol.message + f"(# iterations: {sol.nit})" - return that, msg, cost
- - - @abstractmethod - def sample_theta(self): - pass - - @abstractmethod - def get_Q_from_y(self, y): - pass - - @abstractmethod - def get_J_lifting(self, t): - pass - - @abstractmethod - def get_x(self, theta=None): - return - - def plot_setup(self, title="setup"): - import matplotlib.pylab as plt - - if self.d == 3: - fig = plt.figure() - ax = fig.add_subplot(111, projection="3d") - else: - fig, ax = plt.subplots() - ax.scatter(*self.landmarks.T, label="landmarks", marker="x") - ax.scatter(*self.positions.T, label="positions", marker="x") - ax.legend() - ax.axis("equal") - ax.grid() - ax.set_title(title) - plt.show() - return fig, ax - - def plot_nullvector(self, vec, ax, **kwargs): - j = 0 - for n in range(self.n_positions): - pos = self.positions[n] - line = np.c_[pos, pos + vec[j : j + self.d]] # 2 x self.d - ax.plot(*line, **kwargs) - j += self.d - for n in range(self.n_landmarks): - if n == 1: - pos = self.landmarks[n] - e = np.zeros(self.d) - e[0] = vec[j] - line = np.c_[pos, pos + e] # 2 x self.d - ax.plot(*line, **kwargs) - j += 1 - elif n == 2: - pos = self.landmarks[n] - e = np.zeros(self.d) - e[:2] = vec[j : j + 2] - line = np.c_[pos, pos + e] # 2 x self.d - ax.plot(*line, **kwargs) - j += 2 - elif n > 2: - pos = self.landmarks[n] - e = vec[j : j + self.d] - line = np.c_[pos, pos + e] # 2 x self.d - ax.plot(*line, **kwargs) - j += self.d
- -
- -
-
-
- -
- -
-

© Copyright 2025, POPR Contributors.

-
- - Built with Sphinx using a - theme - provided by Read the Docs. - - -
-
-
-
-
- - - - \ No newline at end of file diff --git a/docs/build/_modules/popr/lifters/robust_pose_lifter.html b/docs/build/_modules/popr/lifters/robust_pose_lifter.html deleted file mode 100644 index e517f5d..0000000 --- a/docs/build/_modules/popr/lifters/robust_pose_lifter.html +++ /dev/null @@ -1,633 +0,0 @@ - - - - - - - - popr.lifters.robust_pose_lifter — POPR 0.0.1 documentation - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
-
    -
  • - - -
  • -
  • -
-
-
-
-
- -

Source code for popr.lifters.robust_pose_lifter

-from abc import ABC, abstractmethod
-from copy import deepcopy
-
-import numpy as np
-from poly_matrix.poly_matrix import PolyMatrix
-from scipy.spatial.transform import Rotation as R
-
-from popr.utils.geometry import (
-    get_C_r_from_theta,
-    get_noisy_pose,
-    get_pose_errors_from_theta,
-    get_theta_from_C_r,
-)
-
-from .state_lifter import StateLifter
-
-# import autograd.numpy as np
-
-
-N_TRYS = 10
-
-METHOD = "CG"
-SOLVER_KWARGS = dict(
-    min_gradient_norm=1e-7, max_iterations=10000, min_step_size=1e-8, verbosity=1
-)
-
-# TODO(FD) we need to add a penalty here, otherwise the local solution is not good.
-# However, the penalty results in inequality constraints etc. and that's not easy to deal with.
-PENALTY_RHO = 10
-PENALTY_U = 1e-3
-
-# the cutoff parameter of least squares. If residuals are >= BETA, they are considered outliers.
-BETA = 0.1
-
-
-
-[docs] -class RobustPoseLifter(StateLifter, ABC): - LEVELS = ["no", "xwT", "xxT"] - PARAM_LEVELS = ["no", "p", "ppT"] - LEVEL_NAMES = {"no": "no", "xwT": "x kron w", "xxT": "x kron x"} - MAX_DIST = 10.0 # maximum of norm of t. - - @property - def VARIABLE_LIST(self): - if not self.robust: - return [[self.HOM, "t", "c"]] - else: - base = [self.HOM, "t", "c"] - return [ - base, - base + ["w_0"], - base + ["z_0"], - base + ["w_0", "w_1"], - base + ["w_0", "z_0"], - base + ["z_0", "z_1"], - # base + ["w_0", "w_1", "z_0"], - # base + ["w_0", "w_1", "z_0", "z_1"], - ] - - # Add any parameters here that describe the problem (e.g. number of landmarks etc.) - def __init__( - self, - n_outliers=0, - level="no", - param_level="no", - d=2, - n_landmarks=3, - variable_list=None, - robust=False, - beta=BETA, - ): - """ - :param level: - - xwT: x kron w - - xxT: x kron x - """ - self.beta = beta - self.n_landmarks = n_landmarks - self.landmarks = None - - self.robust = robust - self.level = level - if variable_list == "all": - variable_list = self.get_all_variables() - # elif variable_list is None: - # self.variable_list = self.VARIABLE_LIST - - if not robust: - assert level == "no" - super().__init__( - level=level, - param_level=param_level, - d=d, - variable_list=variable_list, - n_outliers=n_outliers, - robust=robust, - ) - - def penalty(self, t, rho=PENALTY_RHO, u=PENALTY_U): - import autograd.numpy as anp - - try: - return anp.sum( - [rho * u * anp.log10(1 + anp.exp(hi / u)) for hi in self.h_list(t)] - ) - except RuntimeWarning: - PENALTY_U *= 0.1 - u = PENALTY_U - return anp.sum( - [rho * u * anp.log10(1 + anp.exp(hi / u)) for hi in self.h_list(t)] - ) - - @property - def var_dict(self): - """Return key,size pairs of all variables.""" - var_dict = {self.HOM: 1, "t": self.d, "c": self.d**2} - if not self.robust: - return var_dict - - n = self.d**2 + self.d - if self.level == "xwT": - for i in range(self.n_landmarks): - var_dict.update({f"w_{i}": 1, f"z_{i}": n}) - elif self.level == "xxT": - var_dict.update({f"w_{i}": 1 for i in range(self.n_landmarks)}) - var_dict.update({"z_0": n**2}) - return var_dict - - @property - def param_dict(self): - return self.param_dict_landmarks - - def get_all_variables(self): - all_variables = [self.HOM, "t", "c"] - if self.robust: - if self.level == "xxT": - all_variables += [f"w_{i}" for i in range(self.n_landmarks)] - all_variables += ["z_0"] - elif self.level == "xwT": - for i in range(self.n_landmarks): - all_variables += [f"w_{i}", f"z_{i}"] - variable_list = [all_variables] - return variable_list - -
-[docs] - def sample_theta(self): - """Generate a random new feasible point.""" - - # make sure random pose is looking at world centre (where landmarks are) - success = False - i = 0 - while not success: - pc_cw = self.get_random_position() - success = np.all(np.array(self.h_list(pc_cw)) <= 0) - if success: - break - i += 1 - if i >= N_TRYS: - raise ValueError("didn't find valid initialization") - - if self.d == 2: - angle = np.random.uniform(0, 2 * np.pi) - C = R.from_euler("z", angle).as_matrix()[:2, :2] - else: - C = R.random().as_matrix() - theta_x = get_theta_from_C_r(C, pc_cw) - - if self.robust: - outlier_index = np.random.choice( - self.n_landmarks, replace=False, size=self.n_outliers - ) - w = np.ones(self.n_landmarks) - w[outlier_index] = -1 - return np.hstack([theta_x, w]) - else: - return theta_x
- - -
-[docs] - def sample_parameters(self, theta=None): - landmarks = np.random.normal(loc=0, scale=1.0, size=(self.n_landmarks, self.d)) - return self.sample_parameters_landmarks(landmarks)
- - -
-[docs] - def get_x(self, theta=None, parameters=None, var_subset=None) -> np.ndarray: - """Get the lifted vector x given theta and parameters.""" - if theta is None: - theta = self.theta - if parameters is None: - parameters = self.parameters - if var_subset is None: - var_subset = self.var_dict.keys() - - if self.robust: - theta_here = theta[: -self.n_landmarks] - else: - theta_here = theta - - # RT below is R_cw. (c=camera, w=world) - RT, t = get_C_r_from_theta(theta_here, self.d) - R = RT.T - - x_data = [] - for key in var_subset: - if key == self.HOM: - x_data.append(1.0) - elif key == "t": - x_data += list(t) - elif key == "c": - x_data += list(R.flatten("C")) - elif "w" in key: - j = int(key.split("_")[-1]) - w_j = theta[-self.n_landmarks + j] - x_data.append(w_j) - elif (self.level == "xxT") and (key == "z_0"): - x_vec = list(get_theta_from_C_r(R, t)) - x_data += list(np.kron(x_vec, x_vec).flatten()) - elif (self.level == "xwT") and ("z" in key): - j = int(key.split("_")[-1]) - w_j = theta[-self.n_landmarks + j] - x_vec = get_theta_from_C_r(R, t) - x_data += list(x_vec * w_j) - dim_x = self.get_dim_x(var_subset=var_subset) - assert len(x_data) == dim_x - return np.array(x_data)
- - - def get_outlier_index(self): - if self.robust: - return np.where(self.theta[-self.n_landmarks :] == -1)[0] - else: - return [] - - def get_error(self, theta_hat): - - theta_hat_pose = theta_hat[: self.d + self.d**2] - theta_gt_pose = self.theta[: self.d + self.d**2] - return get_pose_errors_from_theta(theta_hat_pose, theta_gt_pose, self.d) - -
-[docs] - def get_vec_around_gt(self, delta: float = 0): - """Sample around ground truth. - :param delta: sample from gt + std(delta) (set to 0 to start from gt.) - """ - if self.robust: - theta = deepcopy(self.theta[: self.d + self.d**2]) - C, r = get_C_r_from_theta(theta, self.d) - theta_noisy = get_noisy_pose(C, r, delta=delta) - theta_w = self.theta[self.d + self.d**2 :] - return np.r_[theta_noisy, theta_w] - else: - C, r = get_C_r_from_theta(self.theta, self.d) - theta_noisy = get_noisy_pose(C, r, delta=delta) - return theta_noisy
- - - def get_cost(self, theta, y): - import autograd.numpy as anp - - if self.robust: - x = theta[: -self.n_landmarks] - w = theta[-self.n_landmarks :] - assert np.all(w**2 == 1.0) - else: - x = theta - - R, t = get_C_r_from_theta(x, self.d) - - cost = 0 - for i in range(self.n_landmarks): - res = self.residual_sq(R, t, self.landmarks[i], y[i]) - if self.robust: - cost += (1 + w[i]) / self.beta**2 * res + 1 - w[i] - else: - cost += res - return 0.5 * cost - - def local_solver( - self, t0, y, verbose=False, method=METHOD, solver_kwargs=SOLVER_KWARGS - ): - import pymanopt - from pymanopt.manifolds import Euclidean, Product, SpecialOrthogonalGroup - - if method == "CG": - from pymanopt.optimizers import ConjugateGradient as Optimizer # fastest - elif method == "SD": - from pymanopt.optimizers import SteepestDescent as Optimizer # slow - elif method == "TR": - from pymanopt.optimizers import TrustRegions as Optimizer # okay - else: - raise ValueError(method) - - if verbose: - solver_kwargs["verbosity"] = 2 - else: - solver_kwargs["verbosity"] = 0 - - # We assume that we know w! If we wanted to solve for w too we would need - # IRLS or similar. Since we just care about getting the global solution - # with a local sovler that's not necessary. - if self.robust: - w = self.theta[-self.n_landmarks :] - - manifold = Product((SpecialOrthogonalGroup(self.d, k=1), Euclidean(self.d))) - - @pymanopt.function.autograd(manifold) - def cost(R, t): - cost = 0 - for i in range(self.n_landmarks): - residual = self.residual_sq(R, t, self.landmarks[i], y[i]) - if self.robust: - cost += (1 + w[i]) / self.beta**2 * residual + 1 - w[i] - else: - cost += residual - return 0.5 * cost + self.penalty(t) - - @pymanopt.function.autograd(manifold) - def euclidean_gradient_unused(R, t): - grad_R = np.zeros(R.shape) - grad_t = np.zeros(t.shape) - for i in range(self.n_landmarks): - Wi = np.eye(self.d) - np.outer(y[i], y[i]) - # residual = (R @ pi + t).T @ Wi @ (R @ pi + t) - term = self.term_in_norm(R, t, self.landmarks[i], y[i]) - if self.robust: - grad_R += ( - 2 - * w[i] - / self.beta**2 - * np.outer(Wi.T @ term, self.landmarks[i]) - ) - grad_t += 2 * w[i] / self.beta**2 * Wi.T @ term - else: - grad_R += np.outer(Wi.T @ term, self.landmarks[i]) - grad_t += Wi.T @ term - return grad_R, grad_t - - euclidean_gradient = None - problem = pymanopt.Problem( - manifold, cost, euclidean_gradient=euclidean_gradient - ) - optimizer = Optimizer(**solver_kwargs) - - R_0, t_0 = get_C_r_from_theta(t0[: self.d + self.d**2], self.d) - res = optimizer.run(problem, initial_point=(R_0, t_0)) - R, t = res.point - - if verbose: - print("local solver sanity check:") - print("final penalty:", self.penalty(t)) - w = self.theta[-self.n_landmarks :] - for i in range(self.n_landmarks): - residual = self.residual_sq(R, t, self.landmarks[i], y[i]) - if w[i] == -1: - if verbose: - print(f"outlier residual: {residual:.4e}") - assert ( - residual > self.beta - ), f"outlier residual too small: {residual} <= {self.beta}" - else: - if verbose: - print(f"inlier residual: {residual:.4e}") - assert ( - residual < self.beta - ), f"inlier residual too large: {residual} > {self.beta}" - if verbose: - print("qcqp cost:", res.cost) - - if self.robust: - theta_hat = np.r_[get_theta_from_C_r(R, t), w] - else: - theta_hat = get_theta_from_C_r(R, t) - - cost_penalized = res.cost - if self.robust: - pen = self.penalty(t) - if abs(res.cost) > 1e-10: - assert abs(pen) / res.cost <= 1e-1, (pen, res.cost) - cost_penalized -= pen - - success = ("min step_size" in res.stopping_criterion) or ( - "min grad norm" in res.stopping_criterion - ) - info = { - "success": success, - "msg": res.stopping_criterion, - } - if success: - return theta_hat, info, cost_penalized - else: - return None, info, cost_penalized - - def test_and_add(self, A_list, Ai, output_poly): - x = self.get_x() - Ai_sparse = Ai.get_matrix(self.var_dict) - err = x.T @ Ai_sparse @ x - assert abs(err) <= 1e-10, err - if output_poly: - A_list.append(Ai) - else: - A_list.append(Ai_sparse) - -
-[docs] - def get_A_known(self, var_dict=None, output_poly=False): - A_list = [] - if var_dict is None: - var_dict = self.var_dict - - if "c" in var_dict: - # enforce diagonal == 1 - for i in range(self.d): - Ei = np.zeros((self.d, self.d)) - Ei[i, i] = 1.0 - constraint = np.kron(Ei, np.eye(self.d)) - Ai = PolyMatrix(symmetric=True) - Ai["c", "c"] = constraint - Ai[self.HOM, self.HOM] = -1 - self.test_and_add(A_list, Ai, output_poly=output_poly) - - # enforce off-diagonal == 0 - for i in range(self.d): - for j in range(i + 1, self.d): - Ei = np.zeros((self.d, self.d)) - Ei[i, j] = 1.0 - Ei[j, i] = 1.0 - constraint = np.kron(Ei, np.eye(self.d)) - Ai = PolyMatrix(symmetric=True) - Ai["c", "c"] = constraint - self.test_and_add(A_list, Ai, output_poly=output_poly) - if self.robust: - for key in var_dict: - if "w" in key: - i = key.split("_")[-1] - Ai = PolyMatrix(symmetric=True) - Ai[self.HOM, self.HOM] = -1.0 - Ai[f"w_{i}", f"w_{i}"] = 1.0 - self.test_and_add(A_list, Ai, output_poly=output_poly) - - # below doesn't hold: w_i*w_j = += 1 - # for key_other in [k for k in var_dict if (k.startswith("w") and (k!= key))]: - # Ai = PolyMatrix(symmetric=True) - # Ai[self.HOM, self.HOM] = -1.0 - # Ai[key, key_other] = 0.5 - # self.test_and_add(A_list, Ai, output_poly=output_poly) - - if "z" in key: - if self.level == "xwT": - i = key.split("_")[-1] - """ each z_i equals x * w_i""" - - for j in range(self.d): - Ai = PolyMatrix(symmetric=True) - constraint = np.zeros((self.d + self.d**2)) - constraint[j] = 1.0 - Ai[self.HOM, f"z_{i}"] = constraint[None, :] - constraint = np.zeros((self.d)) - constraint[j] = -1.0 - Ai[f"t", f"w_{i}"] = constraint[:, None] - self.test_and_add(A_list, Ai, output_poly=output_poly) - - for j in range(self.d**2): - Ai = PolyMatrix(symmetric=True) - constraint = np.zeros((self.d + self.d**2)) - constraint[self.d + j] = 1.0 - Ai[self.HOM, f"z_{i}"] = constraint[None, :] - constraint = np.zeros((self.d**2)) - constraint[j] = -1.0 - Ai[f"c", f"w_{i}"] = constraint[:, None] - self.test_and_add(A_list, Ai, output_poly=output_poly) - return A_list
- - -
-[docs] - def get_B_known(self): - """Get inequality constraints of the form x.T @ B @ x <= 0. - By default, we always add ||t|| <= MAX_DIST - """ - B1 = PolyMatrix(symmetric=True) - B1[self.HOM, self.HOM] = -self.MAX_DIST - B1["t", "t"] = np.eye(self.d) - return [B1.get_matrix(self.var_dict)]
- - -
-[docs] - @abstractmethod - def h_list(self, t): - """ - Any inequality constraints to enforce, returned as a list [h_1(t), h_2(t), ...] - We use the convention h_i(t) <= 0. - - By default, we always add |t| <= MAX_DIST - """ - try: - import autograd.numpy as anp - - return [anp.sqrt(anp.sum(t[: self.d] ** 2)) - self.MAX_DIST] - except ModuleNotFoundError: - return [np.sqrt(np.sum(t[: self.d] ** 2)) - self.MAX_DIST]
- - -
-[docs] - @abstractmethod - def get_random_position(self): - """Generate a new random position. Orientation angles will be drawn uniformly from [0, pi].""" - return None
- - - @abstractmethod - def term_in_norm(self, R, t, pi, ui): - return - - @abstractmethod - def residual_sq(self, R, t, pi, ui): - return
- -
- -
-
-
- -
- -
-

© Copyright 2025, POPR Contributors.

-
- - Built with Sphinx using a - theme - provided by Read the Docs. - - -
-
-
-
-
- - - - \ No newline at end of file diff --git a/docs/build/_modules/popr/lifters/state_lifter.html b/docs/build/_modules/popr/lifters/state_lifter.html deleted file mode 100644 index d368ed4..0000000 --- a/docs/build/_modules/popr/lifters/state_lifter.html +++ /dev/null @@ -1,318 +0,0 @@ - - - - - - - - popr.lifters.state_lifter — POPR 0.0.1 documentation - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -

Source code for popr.lifters.state_lifter

-from abc import abstractmethod
-
-import numpy as np
-
-from ._base_class import BaseClass
-
-
-
-[docs] -class StateLifter(BaseClass): - # sparse hierarchy: define the levels that are implemented - LEVELS = ["no"] - - # used for AutoTemplate - VARIABLE_LIST = ["h"] - TIGHTNESS = "cost" - - # to be overwritten by inheriting class - NOISE = 1e-2 - - def __init__( - self, - level="no", - param_level="no", - d=2, - variable_list=None, - robust=False, - n_outliers=0, - n_parameters=1, - ): - - # variables that get overwritten upon initialization - self.parameters_ = None - self.theta_ = None - self.var_dict_ = None - self.y_ = None - - self.robust = robust - self.n_outliers = n_outliers - - assert level in self.LEVELS - self.level = level - - if variable_list is not None: - self.variable_list = variable_list - else: - self.variable_list = self.VARIABLE_LIST - - if (param_level != "no") and (n_parameters == 1): - print("Warning: make sure to give the correct n_parameters for the level.") - - super().__init__(d, param_level, n_parameters) - - ###### MUST OVERWRITE THESE - - @property - def var_dict(self): - raise ValueError("Inheriting class must implement this!") - -
-[docs] - @abstractmethod - def sample_theta(self) -> np.ndarray: - """Randomly sample a feasible state theta. This function must - implemented by the inheriting class.""" - raise NotImplementedError("need to implement sample_theta")
- - - ###### MUST OVERWRITE THESE FOR TIGHTNESS CHECKS - -
-[docs] - def get_Q(self, output_poly=False, noise=None): - """Construct the cost matrix Q. - - :param noise: set the noise level, if appropriate. - :param output_poly: if True, return the matrix in PolyMatrix format. - - :returns: the cost matrix as a sparse matrix or PolyMatrix. - """ - raise NotImplementedError( - "Need to impelement get_Q in inheriting class if you want to use it." - )
- - - def get_Q_from_y(self, y): - raise NotImplementedError( - "Need to impelement get_Q_from_y in inheriting class if you want to use it." - ) - -
-[docs] - def get_A_known( - self, - add_redundant: bool = False, - var_dict: dict | None = None, - output_poly: bool = False, - ) -> list: - """Construct the matrices defining the known equality constraints.""" - return []
- - -
-[docs] - def get_B_known(self) -> list: - """Construct the matrices defining the known inequality constraints.""" - return []
- - - ###### MUST OVERWRITE THESE FOR ADDING PARAMETERS - -
-[docs] - def sample_parameters(self, theta=None) -> dict: - """Create random set of parameters. By default, there are no parameters - so this function just returns {`self.HOM`: 1.0}.""" - assert ( - self.param_level == "no" - ), "Need to overwrite sample_parameters to use level different than 'no'" - return {self.HOM: 1.0}
- - - @property - def param_dict(self): - assert ( - self.param_level == "no" - ), "Need to overwrite param_dict to use level different than 'no'" - return {self.HOM: 1} - - def get_involved_param_dict(self, var_subset): - keys = [self.HOM] - for v in var_subset: - index = v.split("_") - if len(index) > 1: - index = int(index[-1]) - key = f"p_{index}" - if key not in keys: - keys.append(key) - return {k: self.param_dict[k] for k in keys if k in self.param_dict} - - ###### CAN OPTINALLY OVERWRITE THESE FOR BETTER PERFORMANCE - - def get_grad(self, theta, y=None) -> float: - raise NotImplementedError("must define get_grad if you want to use it.") - - def get_hess(self, theta, y=None) -> float: - raise NotImplementedError("must define get_hess if you want to use it.") - - def get_cost(self, theta, y=None) -> float: - print( - "Warning: using default get_cost, which may be less efficient than a custom one." - ) - x = self.get_x(theta=theta).flatten("C") - if y is not None: - Q = self.get_Q_from_y(y) - else: - Q = self.get_Q() - return float(x.T @ Q @ x) - - def local_solver(self, t0, y=None, *args, **kwargs): - print( - "Warning: using default local_solver, which may be less efficient than a custom one." - ) - print("Ignoring args and kwargs:", args, kwargs) - from cert_tools.sdp_solvers import solve_low_rank_sdp - - if y is not None: - Q = self.get_Q_from_y(y) - else: - Q = self.get_Q() - - Constraints = self.get_A_b_list(A_list=self.get_A_known()) - x0 = self.get_x(theta=t0) - X, info = solve_low_rank_sdp( - Q, Constraints=Constraints, rank=1, verbose=True, x_cand=x0 - ) - # TODO(FD) identify when the solve is not successful. - info["success"] = True - try: - theta = self.get_theta(X[:, 0]) - except: - theta = X[1 : 1 + self.d, 0] - return theta, info, info["cost"] - - @property - def param_dict_landmarks(self): - assert self.n_parameters is not None - - param_dict = {self.HOM: 1} - if self.param_level == "no": - return param_dict - if self.param_level == "p": - param_dict.update({f"p_{i}": self.d for i in range(self.n_parameters)}) - if self.param_level == "ppT": - # Note that ppT is actually - # [p; vech(ppT)] (linear and quadratic terms) - # TODO(FD): rename ppT to quadratic - param_dict.update( - { - f"p_{i}": self.d + int(self.d * (self.d + 1) / 2) - for i in range(self.n_parameters) - } - ) - return param_dict - - def get_theta(self, x): - """Inverse of get_x: given lifted vector x, extract elements corresponding to theta.""" - assert np.ndim(x) == 1 or x.shape[1] == 1 - return x.flatten()[1 : 1 + self.d]
- -
- -
-
-
- -
- -
-

© Copyright 2025, POPR Contributors.

-
- - Built with Sphinx using a - theme - provided by Read the Docs. - - -
-
-
-
-
- - - - \ No newline at end of file diff --git a/docs/build/_modules/popr/lifters/stereo_lifter.html b/docs/build/_modules/popr/lifters/stereo_lifter.html deleted file mode 100644 index 8f57041..0000000 --- a/docs/build/_modules/popr/lifters/stereo_lifter.html +++ /dev/null @@ -1,613 +0,0 @@ - - - - - - - - popr.lifters.stereo_lifter — POPR 0.0.1 documentation - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -

Source code for popr.lifters.stereo_lifter

-from abc import ABC, abstractmethod
-
-# import autograd.numpy as np
-import numpy as np
-import scipy.sparse as sp
-from poly_matrix.poly_matrix import PolyMatrix
-
-from popr.utils.geometry import (
-    generate_random_pose,
-    get_C_r_from_theta,
-    get_noisy_pose,
-    get_pose_errors_from_theta,
-    get_T,
-    get_theta_from_C_r,
-)
-
-from .state_lifter import StateLifter
-
-NOISE = 1.0  #
-
-
-SOLVER_KWARGS = dict(
-    min_gradient_norm=1e-6, max_iterations=10000, min_step_size=1e-10, verbosity=1
-)
-
-
-
-[docs] -class StereoLifter(StateLifter, ABC): - """General lifter for stereo localization problem.""" - - NORMALIZE = True - - LEVELS = [ - "no", - "u@u", # ... - "u2", - "u@r", - "uuT", - "urT", - "uxT", - ] - PARAM_LEVELS = ["no", "p", "ppT"] - LEVEL_NAMES = { - "no": "$\\boldsymbol{u}_n$", - "urT": "$\\boldsymbol{u}\\boldsymbol{t}^\\top_n$", - "uxT": "$\\boldsymbol{u}\\boldsymbol{x}^\\top_n$", - } - - def __init__( - self, n_landmarks, d, level="no", param_level="no", variable_list=None - ): - self.y_ = None - self.n_landmarks = n_landmarks - self.landmarks = None - - super().__init__( - d=d, - level=level, - param_level=param_level, - variable_list=variable_list, - n_parameters=n_landmarks, - ) - - @property - @abstractmethod - def M_matrix(self): - raise NotImplementedError("Inheriting class must initialize M_matrix.") - - def get_all_variables(self): - return [[self.HOM, "x"] + [f"z_{i}" for i in range(self.n_landmarks)]] - -
-[docs] - def get_level_dims(self, n=1): - """ - :param n: number of landmarks to consider - """ - return { - "no": 0, - "u@u": n, # ... - "u2": n * self.d, - "u@r": n, - "uuT": n * self.d**2, - "urT": n * self.d**2, - "uxT": n * (self.d * (self.d + self.d**2)), - }
- - - def generate_random_landmarks(self, theta=None): - if theta is not None: - C, r = get_C_r_from_theta(theta, self.d) - if self.d == 3: - # sample left u, v coordinates in left image, and compute landmark coordinates from that. - fu, cu, b = self.M_matrix[0, [0, 2, 3]] - fv, cv = self.M_matrix[1, [1, 2]] - u = np.random.uniform(0, cu * 2, self.n_landmarks) - v = np.random.uniform(0, cv * 2, self.n_landmarks) - z = np.random.uniform(0, 5, self.n_landmarks) - x = 1 / fu * (z * (u - cu) - b) - y = 1 / fv * z * (v - cv) - points_cam = np.c_[x, y, z] # N x 3 - else: - # sample left u in left image, and compute landmark coordinates from that. - fu, cu, b = self.M_matrix[0, :] - u = np.random.uniform(0, cu * 2, self.n_landmarks) - y = np.random.uniform(1, 5, self.n_landmarks) - x = 1 / fu * (y * (u - cu) - b) - points_cam = np.c_[x, y] - # transform points from camera to world - return (C.T @ (points_cam.T - r[:, None])).T - else: - return np.random.rand(self.n_landmarks, self.d) - -
-[docs] - def sample_parameters(self, theta=None): - landmarks = self.generate_random_landmarks(theta=self.theta) - return self.sample_parameters_landmarks(landmarks)
- - - def get_parameters(self, var_subset=None): - return self.get_p(param_subset=var_subset) - - @property - def VARIABLE_LIST(self): - return [ - [self.HOM, "x"], - [self.HOM, "z_0"], - [self.HOM, "x", "z_0"], - [self.HOM, "z_0", "z_1"], # should achieve tightness here - ] - - @property - def param_dict(self): - return self.param_dict_landmarks - - @property - def var_dict(self): - level_dim = self.get_level_dims()[self.level] - if self.var_dict_ is None: - self.var_dict_ = {self.HOM: 1} - self.var_dict.update({"x": self.d**2 + self.d}) - self.var_dict.update( - {f"z_{k}": self.d + level_dim for k in range(self.n_landmarks)} - ) - return self.var_dict_ - -
-[docs] - def get_x(self, theta=None, parameters=None, var_subset=None): - """ - :param var_subset: list of variables to include in x vector. Set to None for all. - """ - if theta is None: - theta = self.theta - if parameters is None: - parameters = self.parameters - if var_subset is None: - var_subset = self.var_dict.keys() - - assert self.landmarks is not None - - # TODO(FD) below is a bit hacky, these two variables should not both be called theta. - # theta is either (x, y, alpha) or (x, y, z, a1, a2, a3) - C, r = get_C_r_from_theta(theta, self.d) - if (self.param_level != "no") and (len(parameters) > 1): - landmarks = parameters - else: - landmarks = { - f"p_{i}": self.landmarks[i, :] for i in range(self.landmarks.shape[0]) - } - - x_data = [] - for key in var_subset: - if key == self.HOM: - x_data.append(1.0) - elif key == "x": - x_data += list(r) + list(C.flatten("C")) # row-wise flatten - elif "z" in key: - j = int(key.split("_")[-1]) - - pj = landmarks[f"p_{j}"][: self.d] # - - zj = C[self.d - 1, :] @ pj + r[self.d - 1] - u = 1 / zj * np.r_[C[: self.d - 1, :] @ pj + r[: self.d - 1], 1] - x_data += list(u) - - if self.level == "no": - continue - elif self.level == "u2": - x_data += list(u**2) - elif self.level == "u@u": - x_data += [u @ u] - elif self.level == "u@r": - x_data += [u @ r] - elif self.level == "uuT": - x_data += list(np.outer(u, u).flatten()) - elif self.level == "urT": - # this works - x_data += list(np.outer(u, r).flatten()) - elif self.level == "uxT": - x = np.r_[r, C.flatten("C")] - x_data += list(np.outer(u, x).flatten()) - dim_x = self.get_dim_x(var_subset=var_subset) - assert len(x_data) == dim_x - return np.array(x_data)
- - -
-[docs] - def get_A_known(self, var_dict=None, output_poly=False): - """ - T = | cx' tx | - | cy' ty | - | cz' tz | - | 0 0 0 1 | - Let pj be the j-th landmark coordinate. - [xj] [cx @ pj + tx] - [yj] = [cy @ pj + ty] - [zj] [cz @ pj + tz] - - Let u be the substitution variable, which has d-1 elements. - Then we want to enforce that: - u_xj = 1/zj * xj -> u_xj * zj = xj -> (cz @ pj + tz) * u_xj - (cx @ pj + tx) = 0 - u_yj = 1/zj * yj -> u_yj * zj = yj -> same as above - u_zj = 1/zj -> u_zj * zj = 1 -> u_zj * (cz @ pj + tz) -1 = 0 - Writing things as homogeneous constraints: - a1) cz @ pj * u_xj + tz*u_xj - cx @ pj - h * tx = 0 - a2) -----1x------- --2x--- -- 3 -- --4--- - a3) cz @ pj * u_zj + tz*u_zj - h*h = 0 - ------1z------- --2z--- - """ - print("not using known stereo templates because they depend on the landmarks.") - return [] - - # x contains: [c1, c2, c3, t] - # z contains: [u_xj, u_yj, u_zj, H.O.T.] - if self.d == 2: - x = self.get_x() - _, tx, tz, cx1, cx2, cz1, cz2, u_xj, u_zj, *_ = x - cz = np.array([cz1, cz2]) - cx = np.array([cx1, cx2]) - pj = self.landmarks[0] - assert abs(cz @ pj * u_xj + tz * u_xj - cx @ pj - tx) < 1e-10 - assert abs(u_zj * cz @ pj + u_zj * tz - 1) < 1e-10 - elif self.d == 3: - x = self.get_x() - # fmt: off - (_, tx, ty, tz, cx1, cx2, cx3, cy1, cy2, cy3, cz1, cz2, cz3, u_x1, u_y1, u_z1, *_) = x - # fmt: on - p1 = self.landmarks[0] - assert ( - abs(u_z1 * (cx1 * p1[0] + cx2 * p1[1] + cx3 * p1[2]) + u_z1 * tx - u_x1) - < 1e-10 - ) - assert ( - abs(u_z1 * (cy1 * p1[0] + cy2 * p1[1] + cy3 * p1[2]) + u_z1 * ty - u_y1) - < 1e-10 - ) - assert ( - abs(u_z1 * (cz1 * p1[0] + cz2 * p1[1] + cz3 * p1[2]) + u_z1 * tz - 1) - < 1e-10 - ) - - if var_dict is None: - var_dict = self.var_dict - - A_known = [] - z_dim = self.get_level_dims()[self.level] - - if "x" not in var_dict or self.HOM not in var_dict: - return A_known - landmarks = [j for j in range(self.n_landmarks) if f"z_{j}" in var_dict] - for j in landmarks: - # one complete constraint has x, z_j and h. - pj = self.landmarks[j] - for i in range(self.d): - A = PolyMatrix() - # -----1i------- --2i--- -- 3 -- --4--- - # a1) cz @ pj * u_xj + tz*u_xj - cx @ pj - h * tx = 0 - # a2) cz @ pj * u_yj + tz*u_yj - cy @ pj - h * ty = 0 - # a3) cz @ pj * u_zj + tz*u_zj - h*h = 0 - # ------1i------- --2i--- - # --- 1i --- - fill_mat = np.zeros((self.d + self.d**2, self.d + z_dim)) - # chooses cz of x, and u_xj, u_yj or u_zj of z - fill_mat[-self.d :, i] = pj - - # --- 2 --- u_zj * tx - # chooses tz of x, and u_ij of z - fill_mat[self.d - 1, i] = 1.0 - A[f"x", f"z_{j}"] = fill_mat - - if i < self.d - 1: # u, (v) - fill_mat = np.zeros((self.d + self.d**2, 1)) - # chooses ci of x - fill_mat[(i + 1) * self.d : (i + 2) * self.d, 0] = -pj - - # chooses ti of x - fill_mat[i, 0] = -1 - A["x", self.HOM] = fill_mat - elif i == self.d - 1: # z - A[self.HOM, self.HOM] = -0 # 2.0 - if output_poly: - A_known.append(A) - else: - A_known.append(A.get_matrix(var_dict)) - self.test_constraints(A_known) - return A_known
- - -
-[docs] - def sample_theta(self): - return generate_random_pose(d=self.d).flatten()
- - - def simulate_y(self, noise: float | None = None): - if noise is None: - noise = NOISE - - assert self.landmarks is not None, "Landmarks must be set before simulating y." - - T = get_T(theta=self.theta, d=self.d) - - y_sim = np.zeros((self.n_landmarks, self.M_matrix.shape[0])) - for j in range(self.n_landmarks): - y_gt = T @ np.r_[self.landmarks[j], 1.0] - - # in 2d: y_gt[1] - # in 3d: y_gt[2] - y_gt /= y_gt[self.d - 1] - y_gt = self.M_matrix @ y_gt - y_sim[j, :] = y_gt + np.random.normal(loc=0, scale=noise, size=len(y_gt)) - return y_sim - -
-[docs] - def get_Q( - self, - noise: float | None = None, - output_poly: bool = False, - use_cliques: list = [], - ) -> PolyMatrix | sp.csr_matrix | sp.csc_matrix: - if self.y_ is None: - if noise is None: - noise = NOISE - self.y_ = self.simulate_y(noise=noise) - - Q = self.get_Q_from_y(self.y_, output_poly=output_poly, use_cliques=use_cliques) - return Q
- - -
-[docs] - def get_Q_from_y( - self, y, output_poly=False, use_cliques=[] - ) -> PolyMatrix | sp.csr_matrix | sp.csc_matrix: - """ - The least squares problem reads - min_T sum_{n=0}^{N-1} || y - Mtilde@z || - where the first d elements of z correspond to u, and Mtilde contains the first d-1 and last element of M - Mtilde is thus of shape d*2 by dim_z, where dim_z=d+dL (the additional Lasserre variables) - y is of length d*2, corresponding to the measured pixel values in left and right image. - """ - from poly_matrix.least_squares_problem import LeastSquaresProblem - - if len(use_cliques): - js = use_cliques - else: - js = range(y.shape[0]) - - # when using lifting (level=urT), then we have - # in 2d: M_tilde is 2 by 6, with first 2 columns: M[:, [0, 2]] - # in 3d: M_tilde is 4 by 12, with first 3 columns: M[:, [0, 1, 3]] - M_tilde = np.zeros((len(y[0]), self.var_dict["z_0"])) - M_tilde[:, : self.d] = self.M_matrix[:, list(range(self.d - 1)) + [self.d]] - - # in 2d: M[:, 1] - # in 3d: M[:, 2] - m = self.M_matrix[:, self.d - 1] - - ls_problem = LeastSquaresProblem() - for j in js: - ls_problem.add_residual({self.HOM: (y[j] - m), f"z_{j}": -M_tilde}) - - if output_poly: - Q = ls_problem.get_Q() - else: - Q = ls_problem.get_Q().get_matrix(self.var_dict) - if self.NORMALIZE: - Q /= self.n_landmarks * self.d - - # sanity check - x = self.get_x() - - # sanity checks. Below is the best conditioned because we don't have to compute B.T @ B, which - # can contain very large values. - B = ls_problem.get_B_matrix(self.var_dict) - errors = B @ x - cost_test = errors.T @ errors - if self.NORMALIZE: - cost_test /= self.n_landmarks * self.d - - if output_poly: - assert isinstance(Q, PolyMatrix) - cost_Q = x.T @ Q.get_matrix(self.var_dict, output_type="csr") @ x - else: - cost_Q = x.T @ Q @ x - assert abs(cost_test - cost_Q) < 1e-6, (cost_test, cost_Q) - if not len(use_cliques): - cost_raw = self.get_cost(self.theta, y) - assert abs(cost_test - cost_raw) < 1e-6, (cost_test, cost_raw) - assert isinstance(Q, (PolyMatrix, sp.csr_matrix, sp.csc_matrix)), type(Q) - return Q
- - -
-[docs] - def get_theta(self, x): - return x[1 : 1 + self.d + self.d**2]
- - -
-[docs] - def get_vec_around_gt(self, delta: float = 0): - if delta == 0: - return self.theta - - C, r = get_C_r_from_theta(self.theta, self.d) - if self.d == 2: - return super().get_vec_around_gt(delta=delta) - else: - return get_noisy_pose(C, r, delta)
- - - def get_C_cw(self, theta=None): - C_cw, __ = get_C_r_from_theta(theta, self.d) - return C_cw - - def get_position(self, theta=None): - C_cw, r_wc_c = get_C_r_from_theta(theta, self.d) - return (-C_cw.T @ r_wc_c)[None, :] - - def get_error(self, theta_hat): - return get_pose_errors_from_theta(theta_hat, self.theta, self.d) - - def local_solver_manopt(self, t0, y, W=None, verbose=False, method="CG", **kwargs): - import pymanopt - from pymanopt.manifolds import Euclidean, Product, SpecialOrthogonalGroup - - assert self.landmarks is not None, "Landmarks must be set before local solver." - - if method == "CG": - from pymanopt.optimizers import ConjugateGradient as Optimizer # fastest - elif method == "SD": - from pymanopt.optimizers import SteepestDescent as Optimizer # slow - elif method == "TR": - from pymanopt.optimizers import TrustRegions as Optimizer # okay - else: - raise ValueError(method) - - solver_kwargs = SOLVER_KWARGS - solver_kwargs.update(kwargs) - - if verbose: - solver_kwargs["verbosity"] = 2 - else: - solver_kwargs["verbosity"] = 1 - - manifold = Product((SpecialOrthogonalGroup(self.d, k=1), Euclidean(self.d))) - - if W is None: - W = np.eye(4) if self.d == 3 else np.eye(2) - - @pymanopt.function.autograd(manifold) - def cost(R, t): - cost = 0 - for i in range(self.n_landmarks): - pi_cam = np.concatenate([R @ self.landmarks[i] + t, [1]], axis=0) # type: ignore - y_gt = self.M_matrix @ (pi_cam / pi_cam[self.d - 1]) - residual = y[i] - y_gt - cost += residual.T @ W @ residual - if self.NORMALIZE: - return cost / (self.n_landmarks * self.d) - return cost - - euclidean_gradient = None # set to None - problem = pymanopt.Problem( - manifold, cost, euclidean_gradient=euclidean_gradient # - ) - optimizer = Optimizer(**solver_kwargs) # type: ignore - - R_0, t_0 = get_C_r_from_theta(t0[: self.d + self.d**2], self.d) - res = optimizer.run(problem, initial_point=(R_0, t_0)) - R, t = res.point - - theta_hat = get_theta_from_C_r(R, t) - return theta_hat, res.stopping_criterion, res.cost - - def __repr__(self): - level_str = str(self.level).replace(".", "-") - return f"stereo{self.d}d_{level_str}_{self.param_level}"
- -
- -
-
-
- -
- -
-

© Copyright 2025, POPR Contributors.

-
- - Built with Sphinx using a - theme - provided by Read the Docs. - - -
-
-
-
-
- - - - \ No newline at end of file diff --git a/docs/build/_modules/popr/utils/common.html b/docs/build/_modules/popr/utils/common.html deleted file mode 100644 index 15e6d5d..0000000 --- a/docs/build/_modules/popr/utils/common.html +++ /dev/null @@ -1,302 +0,0 @@ - - - - - - - - popr.utils.common — POPR 0.0.1 documentation - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -

Source code for popr.utils.common

-import itertools
-
-import numpy as np
-import scipy.sparse as sp
-
-
-
-[docs] -def upper_triangular(p): - """Given vector, get the half kronecker product.""" - return np.outer(p, p)[np.triu_indices(len(p))]
- - - -
-[docs] -def diag_indices(n): - """Given the half kronecker product, return diagonal elements""" - z = np.empty((n, n)) - z[np.triu_indices(n)] = range(int(n * (n + 1) / 2)) - return np.diag(z).astype(int)
- - - -def get_aggregate_sparsity(matrix_list_sparse): - agg_ii = [] - agg_jj = [] - for i, A_sparse in enumerate(matrix_list_sparse): - assert isinstance(A_sparse, sp.spmatrix) - ii, jj = A_sparse.nonzero() # type: ignore - agg_ii += list(ii) - agg_jj += list(jj) - return sp.csr_matrix(([1.0] * len(agg_ii), (agg_ii, agg_jj)), A_sparse.shape) - - -
-[docs] -def unravel_multi_index_triu(flat_indices, shape): - """Equivalent of np.multi_index_triu, but using only the upper-triangular part of matrix.""" - i_upper = [] - j_upper = [] - - # for 4 x 4, this would give [4, 7, 9, 11] - cutoffs = np.cumsum(list(range(1, shape[0] + 1))[::-1]) - for idx in flat_indices: - i = np.where(idx < cutoffs)[0][0] - if i == 0: - j = idx - else: - j = idx - cutoffs[i - 1] + i - i_upper.append(i) - j_upper.append(j) - return np.array(i_upper), np.array(j_upper)
- - - -
-[docs] -def ravel_multi_index_triu(index_tuple, shape): - """Equivalent of np.multi_index_triu, but using only the upper-triangular part of matrix.""" - ii, jj = index_tuple - - triu_mask = jj >= ii - i_upper = ii[triu_mask] - j_upper = jj[triu_mask] - flat_indices = [] - for i, j in zip(i_upper, j_upper): - # for i == 0: idx = j - # for i == 1: idx = shape[0] + j - # for i == 2: idx = shape[0] + shape[0]-1 + j - idx = np.sum(range(shape[0] - i, shape[0])) + j - flat_indices.append(idx) - return flat_indices
- - - -
-[docs] -def create_symmetric(vec, eps_sparse, correct=False, sparse=False): - """Create a symmetric matrix from the vectorized elements of the upper half""" - - def get_dim_x(len_vec): - return int(0.5 * (-1 + np.sqrt(1 + 8 * len_vec))) - - try: - # vec is dense - len_vec = len(vec) - dim_x = get_dim_x(len_vec) - triu = np.triu_indices(n=dim_x) - mask = np.abs(vec) > eps_sparse - triu_i_nnz = triu[0][mask] - triu_j_nnz = triu[1][mask] - vec_nnz = vec[mask] - except Exception: - # vec is sparse - len_vec = vec.shape[1] - dim_x = get_dim_x(len_vec) - vec.data[np.abs(vec.data) < eps_sparse] = 0 - vec.eliminate_zeros() - ii, jj = vec.nonzero() # vec is 1 x jj - triu_i_nnz, triu_j_nnz = unravel_multi_index_triu(jj, (dim_x, dim_x)) - vec_nnz = np.array(vec[ii, jj]).flatten() - # assert dim_x == self.get_dim_x(var_dict) - - if sparse: - offdiag = triu_i_nnz != triu_j_nnz - diag = triu_i_nnz == triu_j_nnz - triu_i = triu_i_nnz[offdiag] - triu_j = triu_j_nnz[offdiag] - diag_i = triu_i_nnz[diag] - if correct: - # divide off-diagonal elements by sqrt(2) - vec_nnz_off = vec_nnz[offdiag] / np.sqrt(2) - else: - vec_nnz_off = vec_nnz[offdiag] - vec_nnz_diag = vec_nnz[diag] - Ai = sp.csr_array( - ( - np.r_[vec_nnz_diag, vec_nnz_off, vec_nnz_off], - (np.r_[diag_i, triu_i, triu_j], np.r_[diag_i, triu_j, triu_i]), - ), - (dim_x, dim_x), - dtype=float, - ) - else: - Ai = np.zeros((dim_x, dim_x)) - - if correct: - # divide all elements by sqrt(2) - Ai[triu_i_nnz, triu_j_nnz] = vec_nnz / np.sqrt(2) - Ai[triu_j_nnz, triu_i_nnz] = vec_nnz / np.sqrt(2) - # undo operation for diagonal - Ai[range(dim_x), range(dim_x)] *= np.sqrt(2) - else: - Ai[triu_i_nnz, triu_j_nnz] = vec_nnz - Ai[triu_j_nnz, triu_i_nnz] = vec_nnz - return Ai
- - - -
-[docs] -def get_vec(mat, correct=True, sparse=False) -> np.ndarray | sp.csr_matrix | None: - """Convert NxN Symmetric matrix to (N+1)N/2 vectorized version that preserves inner product. - - :param mat: (spmatrix or ndarray) symmetric matrix - :return: ndarray - """ - from copy import deepcopy - - mat = deepcopy(mat) - if correct: - if isinstance(mat, sp.csc_matrix): - ii, jj = mat.nonzero() - mat[ii, jj] *= np.sqrt(2.0) - diag = ii == jj - mat[ii[diag], jj[diag]] /= np.sqrt(2) # type: ignore - else: - mat *= np.sqrt(2.0) - mat[range(mat.shape[0]), range(mat.shape[0])] /= np.sqrt(2) - if sparse: - assert isinstance(mat, sp.csc_matrix) - ii, jj = mat.nonzero() - if len(ii) == 0: - # got an empty matrix -- this can happen depending on the parameter values. - return None - triu_mask = jj >= ii - - flat_indices = ravel_multi_index_triu([ii[triu_mask], jj[triu_mask]], mat.shape) # type: ignore - data = np.array(mat[ii[triu_mask], jj[triu_mask]]).flatten() # type: ignore - vec_size = int(mat.shape[0] * (mat.shape[0] + 1) / 2) # type: ignore - return sp.csr_matrix( - (data, ([0] * len(flat_indices), flat_indices)), (1, vec_size) - ) - else: - return np.array(mat[np.triu_indices(n=mat.shape[0])]).flatten() # type: ignore
- - - -def get_labels(p, zi, zj, var_dict): - labels = [] - size_i = var_dict[zi] - size_j = var_dict[zj] - if zi == zj: - # only upper diagonal for i == j - key_pairs = itertools.combinations_with_replacement(range(size_i), 2) - else: - key_pairs = itertools.product(range(size_i), range(size_j)) - for i, j in key_pairs: - label = f"{p}-" - label += f"{zi}:{i}." if size_i > 1 else f"{zi}." - label += f"{zj}:{j}" if size_j > 1 else f"{zj}" - labels.append(label) - return labels -
- -
-
-
- -
- -
-

© Copyright 2025, POPR Contributors.

-
- - Built with Sphinx using a - theme - provided by Read the Docs. - - -
-
-
-
-
- - - - \ No newline at end of file diff --git a/docs/build/_modules/popr/utils/constraint.html b/docs/build/_modules/popr/utils/constraint.html deleted file mode 100644 index 413e242..0000000 --- a/docs/build/_modules/popr/utils/constraint.html +++ /dev/null @@ -1,414 +0,0 @@ - - - - - - - - popr.utils.constraint — POPR 0.0.1 documentation - - - - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -

Source code for popr.utils.constraint

-import numpy as np
-import scipy.sparse as sp
-from poly_matrix.poly_matrix import PolyMatrix
-
-from popr.utils.common import get_vec
-from popr.utils.plotting_tools import plot_basis
-
-
-def remove_dependent_constraints(constraints, verbose=False):
-    from cert_tools.linalg_tools import find_dependent_columns
-
-    # find which constraints are lin. dep.
-    A_vec = sp.vstack(
-        [constraint.a_full_ for constraint in constraints], format="coo"
-    ).T
-
-    bad_idx = find_dependent_columns(A_vec, verbose=verbose)
-    if len(bad_idx):
-        np.testing.assert_allclose(bad_idx, sorted(bad_idx))
-        # important: by changing the order we
-        for idx in sorted(bad_idx)[::-1]:
-            del constraints[idx]
-
-
-def generate_poly_matrix(constraints, factor_out_parameters=False, lifter=None):
-    plot_rows = []
-    plot_row_labels = []
-    j = -1
-    old_mat_vars = ""
-    for constraint in constraints:
-        mat_vars = constraint.mat_var_dict
-        i = constraint.index
-        if factor_out_parameters:  # use a and not b.
-            if constraint.polyrow_a_ is not None:
-                plot_rows.append(constraint.polyrow_a_)
-            else:
-                if constraint.a_ is not None:
-                    assert (
-                        lifter is not None
-                    ), "Need to provide lifter because a_ is not defined"
-                    polyrow_a = lifter.convert_a_to_polyrow(
-                        constraint.a_, constraint.mat_var_dict
-                    )
-                elif constraint.a_full_ is not None:
-                    assert (
-                        lifter is not None
-                    ), "Need to provide lifter because a_full_ is not defined"
-                    polyrow_a = lifter.convert_a_to_polyrow(
-                        constraint.a_full_, constraint.mat_var_dict
-                    )
-                plot_rows.append(polyrow_a)
-        else:
-            if constraint.polyrow_b_ is not None:
-                plot_rows.append(constraint.polyrow_b_)
-            else:
-                assert (
-                    lifter is not None
-                ), "Need to provide lifter because polyrow_b_ is not defined."
-                plot_rows.append(
-                    lifter.convert_b_to_polyrow(
-                        constraint.b_, mat_vars, constraint.mat_param_dict
-                    )
-                )
-
-        if mat_vars != old_mat_vars:
-            j += 1
-            plot_row_labels.append(f"{j}:b{i}")
-            # plot_row_labels.append(f"{j}{mat_vars}:b{i}")
-            old_mat_vars = mat_vars
-        else:
-            plot_row_labels.append(f"{j}:b{i}")
-
-    templates_poly = PolyMatrix.init_from_row_list(
-        plot_rows, row_labels=plot_row_labels
-    )
-    return templates_poly
-
-
-def plot_poly_matrix(
-    poly_matrix, variables_j=None, variables_i=None, simplify=True, hom="h"
-):
-    if variables_i is None:
-        variables_i = poly_matrix.variable_dict_i
-    if variables_j is None:
-        variables_j = poly_matrix.variable_dict_j
-
-    # plot the templates stored in poly_matrix.
-    fig, ax = plot_basis(
-        poly_matrix,
-        variables_j=variables_j,
-        variables_i=variables_i,
-        discrete=True,
-    )
-    ax.set_yticklabels([])
-    ax.set_yticks([])
-    if simplify:
-        ax.set_xticks([])
-        ax.set_xticklabels([])
-    else:
-        new_xticks = []
-        for lbl in ax.get_xticklabels():
-            lbl = lbl.get_text()
-            if "_" in lbl:  # avoid double subscript
-                new_lbl = f"${lbl.replace(f'{hom}.', '').replace(':', '^')}$"
-            else:
-                new_lbl = f"${lbl.replace(f'{hom}.', '').replace(':', '_')}$"
-            new_xticks.append(new_lbl)
-        ax.set_xticklabels(new_xticks, fontsize=7)
-
-    # plot a red vertical line at each new block of parameters.
-    params = [v.split("-")[0] for v in variables_j]
-    old_param = params[0]
-    for i, p in enumerate(params):
-        if p != old_param:
-            ax.axvline(i - 0.5, color="red", linewidth=1.0)
-            ax.annotate(
-                text=f"${p.replace(':0', '^x').replace(':1', '^y').replace('l.','').replace('.','')}$",
-                xy=(float(i - 0.4), 0.0),
-                fontsize=8,
-                color="red",
-            )
-            old_param = p
-    return fig, ax
-
-
-
-[docs] -class Constraint(object): - """ - This class serves the main purpose of not recomputing representations of constraints more than once. - """ - - def __init__( - self, - index=0, - polyrow_a=None, - polyrow_b=None, - A_poly=None, - A_sparse=None, - b=None, - a=None, - a_full=None, - b_full=None, - mat_var_dict=None, - mat_param_dict=None, - known=False, - template_idx=0, - ): - self.index = index - self.mat_var_dict = mat_var_dict - self.mat_param_dict = mat_param_dict - - self.b_ = b - self.polyrow_b_ = polyrow_b - self.polyrow_a_ = polyrow_a - self.A_poly_ = A_poly - self.A_sparse_ = A_sparse - self.a_ = a - self.b_full_ = b_full - self.a_full_ = a_full - - self.known = known - self.template_idx = template_idx - - # list of applied constraints derived from this constraint. - self.applied_list = [] - - @staticmethod - # @profile - def init_from_b( - index: int, - b: np.ndarray, - mat_var_dict: dict, - lifter=None, - mat_param_dict: dict | None = None, - convert_to_polyrow: bool = True, - known: bool = True, - template_idx: int = 0, - ): - a = None - A_sparse = None - a_full = None - if lifter is not None: - a = lifter.get_reduced_a( - b, var_subset=mat_var_dict, param_subset=mat_param_dict, sparse=True - ) - A_sparse = lifter.get_mat(a, var_dict=mat_var_dict, sparse=True) - a_full = get_vec(A_sparse, sparse=True) - if a_full is None: - return None - if convert_to_polyrow: - assert lifter is not None - A_poly, __ = PolyMatrix.init_from_sparse( - A_sparse, var_dict=lifter.var_dict, unfold=True - ) - polyrow_b = lifter.convert_b_to_polyrow( - b, mat_var_dict, param_subset=mat_param_dict - ) - else: - A_poly = None - polyrow_b = None - return Constraint( - index=index, - a=a, - b=b, - A_sparse=A_sparse, - A_poly=A_poly, - polyrow_b=polyrow_b, - a_full=a_full, - mat_var_dict=mat_var_dict, - mat_param_dict=mat_param_dict, - known=known, - template_idx=template_idx, - ) - - @staticmethod - def init_from_A_poly( - lifter, - A_poly: PolyMatrix, - mat_var_dict: dict, - known: bool = False, - index: int = 0, - template_idx: int = 0, - compute_polyrow_b=False, - ): - Ai_sparse_small = A_poly.get_matrix(variables=mat_var_dict) - ai = get_vec(Ai_sparse_small, correct=True) - bi = lifter.augment_using_zero_padding(ai) - if compute_polyrow_b: - polyrow_b = lifter.convert_b_to_polyrow(bi, mat_var_dict) - else: - polyrow_b = None - polyrow_a = lifter.convert_a_to_polyrow(ai, mat_var_dict) - Ai_sparse = A_poly.get_matrix(variables=lifter.var_dict) - return Constraint( - a=ai, - polyrow_a=polyrow_a, - b=bi, - polyrow_b=polyrow_b, - A_poly=A_poly, - A_sparse=Ai_sparse, - known=known, - index=index, - mat_var_dict=mat_var_dict, - template_idx=template_idx, - ) - - @staticmethod - def init_from_polyrow_b( - polyrow_b: PolyMatrix, - lifter, - index: int = 0, - known: bool = False, - template_idx: int = 0, - mat_var_dict: dict | None = None, - ): - if mat_var_dict is None: - mat_var_dict = lifter.var_dict - A_poly = lifter.convert_polyrow_to_Apoly(polyrow_b) - dict_unroll = lifter.get_var_dict(mat_var_dict, unroll_keys=True) - A_sparse = A_poly.get_matrix(dict_unroll) - a_full = get_vec(A_sparse, sparse=True) - return Constraint( - index=index, - A_poly=A_poly, - polyrow_b=polyrow_b, - A_sparse=A_sparse, - a_full=a_full, - known=known, - template_idx=template_idx, - mat_var_dict=mat_var_dict, - ) - - def scale_to_new_lifter(self, lifter): - if self.known: - assert self.A_poly_ is not None - # known matrices are stored in origin variables, not unrolled form - self.A_sparse_ = self.A_poly_.get_matrix(lifter.var_dict) - self.a_full_ = get_vec(self.A_sparse_, sparse=True) - - else: - assert self.A_poly_ is not None - # known matrices are stored in origin variables, not unrolled form - target_dict_unroll = lifter.get_var_dict(unroll_keys=True) - self.A_sparse_ = self.A_poly_.get_matrix(target_dict_unroll) - self.a_full_ = get_vec(self.A_sparse_, sparse=True) - return self
- -
- -
-
-
- -
- -
-

© Copyright 2025, POPR Contributors.

-
- - Built with Sphinx using a - theme - provided by Read the Docs. - - -
-
-
-
-
- - - - GitHub logo - - - - - \ No newline at end of file diff --git a/docs/build/_sources/api.rst.txt b/docs/build/_sources/api.rst.txt deleted file mode 100644 index 0274180..0000000 --- a/docs/build/_sources/api.rst.txt +++ /dev/null @@ -1,10 +0,0 @@ -API and modules -=============== - -.. toctree:: - :maxdepth: 2 - :caption: Contents: - - api/algorithms - api/lifters - api/utils diff --git a/docs/build/_sources/api/algorithms.rst.txt b/docs/build/_sources/api/algorithms.rst.txt deleted file mode 100644 index 9bb246e..0000000 --- a/docs/build/_sources/api/algorithms.rst.txt +++ /dev/null @@ -1,19 +0,0 @@ -Core Algorithms -=============== - -.. contents:: - :depth: 1 - :local: - - -AutoTight ---------- -.. autoclass:: popcor.AutoTight - :undoc-members: - :members: get_A_learned, get_duality_gap - -AutoTemplate ------------- -.. autoclass:: popcor.AutoTemplate - :undoc-members: - :members: run, apply diff --git a/docs/build/_sources/api/auto_tight.rst.txt b/docs/build/_sources/api/auto_tight.rst.txt deleted file mode 100644 index 13ec899..0000000 --- a/docs/build/_sources/api/auto_tight.rst.txt +++ /dev/null @@ -1,20 +0,0 @@ -Core Algorithms -=============== - -.. contents:: - :depth: 1 - :local: - - -AutoTight ---------- -.. autoclass:: popr.AutoTight - :members: - :show-inheritance: - -AutoTemplate ------------- -.. autoclass:: popr.AutoTemplate - :members: - :show-inheritance: - diff --git a/docs/build/_sources/api/lifters.rst.txt b/docs/build/_sources/api/lifters.rst.txt deleted file mode 100644 index ea0a7d9..0000000 --- a/docs/build/_sources/api/lifters.rst.txt +++ /dev/null @@ -1,59 +0,0 @@ -Base Lifters -============ - -.. contents:: - :depth: 1 - :local: - -Overview --------- - -There are a couple of lifters that serve as a basis for new lifters. -The most basic one is :ref:`StateLifter`, which is generally the best starting point. - -For specific problems, there are a couple of abstract classes that were developed to ease -the development. In particular, we have: - -- :ref:`RobustPoseLifter` -- :ref:`StereoLifter` -- :ref:`PolyLifter` - -Basics ------- - -Below are some general notes about terminology that may be useful in understanding the code and building your own lifters. - -- *theta* is the original (low-dimensional) state variable. -- *x* is the lifted (higher-dimensional) state variable. -- *A* are equality constraints -- *B* are inequality constraints -- *var_dict* refers to the dictionary of variable name - variable size pairs. -- *param_dict* is used to factor out parameters when creating templates. It also comes in name - variable size pairs. - -StateLifter ------------ - -.. autoclass:: popcor.base_lifters.StateLifter - :members: get_x, get_theta, sample_theta, sample_parameters, get_Q, get_A_known, get_B_known, local_solver, get_cost, get_error - :show-inheritance: - -StereoLifter ------------- - -.. autoclass:: popcor.base_lifters.StereoLifter - :show-inheritance: - :undoc-members: - -RobustPoseLifter ------------------- - -.. autoclass:: popcor.base_lifters.RobustPoseLifter - :show-inheritance: - :undoc-members: - -PolyLifter ----------- - -.. autoclass:: popcor.base_lifters.PolyLifter - :show-inheritance: - :undoc-members: \ No newline at end of file diff --git a/docs/build/_sources/api/utils.rst.txt b/docs/build/_sources/api/utils.rst.txt deleted file mode 100644 index 09ef6df..0000000 --- a/docs/build/_sources/api/utils.rst.txt +++ /dev/null @@ -1,29 +0,0 @@ -Utils -===== - - -.. warning:: - This page of the documentation is unfinished, and may significantly change in future versions. - - -Constraints and templates -------------------------- - -.. autoclass:: popcor.utils.constraint.Constraint - :members: - - -Helpers for matrix and vector operations ----------------------------------------- - -.. automodule:: popcor.utils.common - :members: - - -.. :: - - Geometry: lie algebra etc. - -------------------------- - - .. automodule:: popcor.utils.geometry - :members: diff --git a/docs/build/_sources/contributing.rst.txt b/docs/build/_sources/contributing.rst.txt deleted file mode 100644 index 7451363..0000000 --- a/docs/build/_sources/contributing.rst.txt +++ /dev/null @@ -1,7 +0,0 @@ -Contributing -============ - -Below is a rendering of the CONTRIBUTING.md file. - -.. include:: ../../CONTRIBUTING.md - :parser: myst_parser.sphinx_ \ No newline at end of file diff --git a/docs/build/_sources/examples.rst.txt b/docs/build/_sources/examples.rst.txt deleted file mode 100644 index ac5ea96..0000000 --- a/docs/build/_sources/examples.rst.txt +++ /dev/null @@ -1,12 +0,0 @@ -Examples -======== - -.. toctree:: - :numbered: - :maxdepth: 2 - :caption: Contents: - - examples/templates - examples/toy - examples/standard - examples/robust diff --git a/docs/build/_sources/examples/a.rst.txt b/docs/build/_sources/examples/a.rst.txt deleted file mode 100644 index 20902f7..0000000 --- a/docs/build/_sources/examples/a.rst.txt +++ /dev/null @@ -1,48 +0,0 @@ -Toy Examples -============ - -Univariate Polynomials ----------------------- - -.. autoclass:: popr.examples.Poly4Lifter - :undoc-members: - :show-inheritance: - -.. figure:: /figures/poly4_lifter_A.png - :alt: Poly4Lifter Type A - :align: center - :figclass: align-center - - Poly4Lifter Type A - -.. figure:: /figures/poly4_lifter_B.png - :alt: Poly4Lifter Type B - :align: center - :figclass: align-center - - Poly4Lifter Type B - -.. autoclass:: popr.examples.Poly6Lifter - :undoc-members: - :show-inheritance: - -.. figure:: /figures/poly6_lifter_A.png - :alt: Poly6Lifter Type A - :align: center - :figclass: align-center - - Poly6Lifter Type A - -.. figure:: /figures/poly6_lifter_B.png - :alt: Poly6Lifter Type B - :align: center - :figclass: align-center - - Poly6Lifter Type B - -Other Toy Examples ------------------- - -.. autoclass:: popr.examples.Stereo1DLifter - :undoc-members: - :show-inheritance: \ No newline at end of file diff --git a/docs/build/_sources/examples/b.rst.txt b/docs/build/_sources/examples/b.rst.txt deleted file mode 100644 index 383559e..0000000 --- a/docs/build/_sources/examples/b.rst.txt +++ /dev/null @@ -1,26 +0,0 @@ -Standard Estimation Problems -============================ - -Range-Only Localization ------------------------ - -.. autoclass:: popr.examples.RangeOnlyLocLifter - - -Stereo-Camera Localization --------------------------- - -.. autoclass:: popr.examples.Stereo2DLifter - :undoc-members: - :show-inheritance: - -.. autoclass:: popr.examples.Stereo3DLifter - :undoc-members: - :show-inheritance: - -Rotation Averaging ------------------- - -.. autoclass:: popr.examples.RotationLifter - :undoc-members: - :show-inheritance: \ No newline at end of file diff --git a/docs/build/_sources/examples/c.rst.txt b/docs/build/_sources/examples/c.rst.txt deleted file mode 100644 index 16d052d..0000000 --- a/docs/build/_sources/examples/c.rst.txt +++ /dev/null @@ -1,13 +0,0 @@ -Robust Estimation Problems -========================== - -Robust Registration Problems ----------------------------- - -.. autoclass:: popr.examples.MonoLifter - :undoc-members: - :show-inheritance: - -.. autoclass:: popr.examples.WahbaLifter - :undoc-members: - :show-inheritance: diff --git a/docs/build/_sources/examples/d.rst.txt b/docs/build/_sources/examples/d.rst.txt deleted file mode 100644 index 607382c..0000000 --- a/docs/build/_sources/examples/d.rst.txt +++ /dev/null @@ -1,16 +0,0 @@ -Templates -========= - -Example for AutoTight ------------------------------- - -.. autoclass:: popr.examples.ExampleLifter - :undoc-members: - :show-inheritance: - - -Example for AutoTemplate ---------------------------------- - -.. note:: - Coming soon: barebone template for AutoTemplate \ No newline at end of file diff --git a/docs/build/_sources/examples/robust.rst.txt b/docs/build/_sources/examples/robust.rst.txt deleted file mode 100644 index b275afa..0000000 --- a/docs/build/_sources/examples/robust.rst.txt +++ /dev/null @@ -1,13 +0,0 @@ -Robust Estimation Problems -========================== - -Robust Registration Problems ----------------------------- - -.. autoclass:: popcor.examples.MonoLifter - :undoc-members: - :show-inheritance: - -.. autoclass:: popcor.examples.WahbaLifter - :undoc-members: - :show-inheritance: diff --git a/docs/build/_sources/examples/standard.rst.txt b/docs/build/_sources/examples/standard.rst.txt deleted file mode 100644 index 3936ee7..0000000 --- a/docs/build/_sources/examples/standard.rst.txt +++ /dev/null @@ -1,26 +0,0 @@ -Standard Estimation Problems -============================ - -Range-Only Localization ------------------------ - -.. autoclass:: popcor.examples.RangeOnlyLocLifter - - -Stereo-Camera Localization --------------------------- - -.. autoclass:: popcor.examples.Stereo2DLifter - :undoc-members: - :show-inheritance: - -.. autoclass:: popcor.examples.Stereo3DLifter - :undoc-members: - :show-inheritance: - -Rotation Averaging ------------------- - -.. autoclass:: popcor.examples.RotationLifter - :undoc-members: - :show-inheritance: \ No newline at end of file diff --git a/docs/build/_sources/examples/templates.rst.txt b/docs/build/_sources/examples/templates.rst.txt deleted file mode 100644 index edd6404..0000000 --- a/docs/build/_sources/examples/templates.rst.txt +++ /dev/null @@ -1,16 +0,0 @@ -Templates -========= - -Example for AutoTight ------------------------------- - -.. autoclass:: popcor.examples.ExampleLifter - :undoc-members: - :show-inheritance: - - -Example for AutoTemplate ---------------------------------- - -.. note:: - Coming soon: barebone template for AutoTemplate diff --git a/docs/build/_sources/examples/toy.rst.txt b/docs/build/_sources/examples/toy.rst.txt deleted file mode 100644 index 69666d1..0000000 --- a/docs/build/_sources/examples/toy.rst.txt +++ /dev/null @@ -1,48 +0,0 @@ -Toy Examples -============ - -Univariate Polynomials ----------------------- - -.. autoclass:: popcor.examples.Poly4Lifter - :undoc-members: - :show-inheritance: - -.. figure:: /_static/poly4_lifter_A.png - :alt: Poly4Lifter Type A - :align: center - :figclass: align-center - - Poly4Lifter Type A - -.. figure:: /_static/poly4_lifter_B.png - :alt: Poly4Lifter Type B - :align: center - :figclass: align-center - - Poly4Lifter Type B - -.. autoclass:: popcor.examples.Poly6Lifter - :undoc-members: - :show-inheritance: - -.. figure:: /_static/poly6_lifter_A.png - :alt: Poly6Lifter Type A - :align: center - :figclass: align-center - - Poly6Lifter Type A - -.. figure:: /_static/poly6_lifter_B.png - :alt: Poly6Lifter Type B - :align: center - :figclass: align-center - - Poly6Lifter Type B - -Other Toy Examples ------------------- - -.. autoclass:: popcor.examples.Stereo1DLifter - :undoc-members: - :show-inheritance: diff --git a/docs/build/_sources/index.rst.txt b/docs/build/_sources/index.rst.txt deleted file mode 100644 index 90d9a91..0000000 --- a/docs/build/_sources/index.rst.txt +++ /dev/null @@ -1,38 +0,0 @@ - -.. warning:: - - This package is currently in pre-release state. You are welcome to try it out, - and please get in touch via github or e-mail if you have any questions, suggestions or issues. - -Welcome to POPCOR! -================== - -.. figure:: _static/overview.png - :align: center - :width: 500px - - -.. include:: ../../README.md - :start-after: .. start-doc - :end-before: .. end-doc - :parser: myst_parser.sphinx_ - - -.. toctree:: - :maxdepth: 2 - :hidden: - - self - quickstart - api - examples - whatsnew - contributing - - - -.. - currently commented out cause it does not seem useful: - Indices - ------- - * :ref:`genindex` diff --git a/docs/build/_sources/quickstart.rst.txt b/docs/build/_sources/quickstart.rst.txt deleted file mode 100644 index e78a249..0000000 --- a/docs/build/_sources/quickstart.rst.txt +++ /dev/null @@ -1,148 +0,0 @@ -Quick Start Guide -================= - -Installation ------------- - -POPR can be installed by running from a terminal: - -.. code-block:: bash - - git clone --recurse-submodules git@github.com:duembgen/popcor - cd popcor - conda env create -f environment.yml - - - -Problem Formulation -------------------- - -We start with polynomial optimization problems (POPs) of the form: - -.. math:: - - \begin{align} q^\star =&\min_{\theta} f(\theta) \\ - \text{s.t. } &g(\theta) = 0 \\ - &h(\theta) \geq 0 - \end{align} - -where :math:`f,g,\text{ and } h` are polynomial functions, and both :math:`g` and :math:`h` can be vector-valued. Many maximum-a-posteriori or maximum-likelihood estimation problems can be formulated as such, for example `range-only localization `_ and `range-aided SLAM `_, (`matrix-weighted `_) `SLAM `_, and `outlier-robust estimation `_. The same is true for many control and planning problems, for example the `inverted pendulum `_ and other classical dynamical systems, and even contact-rich problems such as `slider-pusher planning problems `_. - -Any POP can be equivalently written in the following QCQP form: - -.. math:: - - \begin{align} q^\star =&\min_{x} x^\top Q x \\ - \text{s.t. } &(\forall i): x^\top A_i x = b_i \\ - &(\forall j): x^\top B_j x \geq 0 - \end{align} - -with cost matrix :math:`Q`, known constraint matrices :math:`A_i,B_j`. -Note that - -- We always include the so-called homogenization variable, which enables to write linear and constant terms as quadratics. By convention, we set the first element of :math:`x` to one, and we use :math:`b_0=1, A_0` to encorce this constraint. -- All inequality and some equality constraints correspond to the constraints from the original POP. -- Some additional equality constraints correspond to new substitution variables that need to be added to formulate the problem as a quadratic. - -.. warning:: - Note that while inequality constraints can be added to the problem formulation, there is no implementation yet to add find and add redundant inequality constraints to the relaxation. - -For the standard usage, the user first needs to define a custom **Lifter** class which essentially contains all elements related to the QCQP problem formulation. -This class should inherit from :ref:`StateLifter`. A basic skeleton of such a -Lifter class is provided in :ref:`Example for AutoTight`. The main purpose of this class is -that it provides all basic operations related to the problem formulation, such as: - -- to sample feasible states (:meth:`popcor.base_lifters.StateLifter.sample_theta`), -- to get the lifted vector (:meth:`popcor.base_lifters.StateLifter.get_x`), - -For a bit more advanced functionality (for example for the :ref:`SDP Relaxation` in the next section), you also need to define functions such as - -- get the cost matrix (:py:meth:`popcor.base_lifters.StateLifter.get_Q`), -- get known constraint matrices (:meth:`popcor.base_lifters.StateLifter.get_A_known`, :meth:`popcor.base_lifters.StateLifter.get_B_known`). - -Many example lifters are provided, you can find them under :ref:`Examples`. - -**Example: instantiating and using lifter** -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The following code snippet shows some basic operations (and useful sanity checks) for the example -lifter class :class:`popcor.examples.Poly4Lifter`. Note that this and all following examples can be found -in the file :file:`../../tests/test_quickstart.py`. - -.. literalinclude:: ../../tests/test_quickstart.py - :language: python - :lines: 9-23 - :dedent: 4 - - -SDP Relaxation --------------- - -It is straightforward to derive a convex relaxation of the original QCQP, using the reformulation :math:`x^\top Qx=\langle x, Qx\rangle = \langle Q, xx^\top \rangle`, where :math:`\langle \cdot, \cdot \rangle` denotes the trace inner product. Then introducing :math:`X:=xx^\top` and relaxing its rank, we obtain the following convex relaxation, in the form of an SDP: - -.. math:: - \begin{align} p^\star = &\min_{X \succeq 0} \langle Q, X \rangle \\ - \text{s.t. } &(\forall i): \langle A_i, X \rangle = b_i \\ - &(\forall j): \langle B_j, X \rangle \geq 0 - \end{align} - - -**Example: solving the QCQP using rank relaxation** -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The following code snippet shows how you can use the simple lifter from earlier to find the global -optimum of the nonconvex polynomial problem, by solving an SDP. - -.. literalinclude:: ../../tests/test_quickstart.py - :language: python - :lines: 28-55 - :dedent: 4 - - - -AutoTight Method ----------------- - -**AutoTight** is used to find all possible constraints matrices :math:`A_r`, which are also automatically satisfied by solutions of the QCQP. They are also called **redundant constraints** because they do not change the feasible set of the original problem, but when adding those constraints to the SDP (rank-)relaxation, they often improve tightness. Denoting by :math:`A_r` the redundant constraints, we can solve the following SDP: - -.. math:: - \begin{align} p_r^\star = &\min_{X \succeq 0} \langle Q, X \rangle \\ - \text{s.t. } &(\forall i): \langle A_i, X \rangle = b_i \\ - &(\forall r): \langle A_r, X \rangle = 0 \\ - &(\forall j): \langle B_j, X \rangle \geq 0 - \end{align} - -We use the term **cost-tight** to say that strong duality holds (:math:`p_r^\star = q^\star`) while by rank-tight we denote the fact that the SDP solver returns a rank-one solution. -If successful, the output is a set of constraints that leads to a tight SDP relaxation of the original problem, which can be used to solve the problem to global optimality (if we have rank tightness) or certify given solutions (if we have cost tightness). - -More information on how to use AutoTight can be found :ref:`here ` and a simple example is given next. - -**Example: tightening the SDP relaxation using AutoTight** -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -.. literalinclude:: ../../tests/test_quickstart.py - :language: python - :lines: 60-101 - :dedent: 4 - - -AutoTemplate Method -------------------- - -*AutoTemplate* follows the same principle as *AutoTight*, but its output are templates rather than constraint matrices. These templates can be seen as "parametrized" versions of the constraint matrices, and can be applied to new problem instances of any size without having to learn the constraints again from scratch. - -More information on how to use AutoTemplate can be found :ref:`here ` and a simple example is given next. - -**Example: tightening a different problem using AutoTemplate** -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -.. literalinclude:: ../../tests/test_quickstart.py - :language: python - :lines: 106-135 - :dedent: 4 - - -References ----------- - -`[1] F. Dümbgen, C. Holmes, B. Agro and T. Barfoot, "Toward Globally Optimal State Estimation Using Automatically Tightened Semidefinite Relaxations," in IEEE Transactions on Robotics, vol. 40, pp. 4338-4358, 2024, doi: 10.1109/TRO.2024.3454570. `_ diff --git a/docs/build/_sources/whatsnew.rst.txt b/docs/build/_sources/whatsnew.rst.txt deleted file mode 100644 index 89a6f49..0000000 --- a/docs/build/_sources/whatsnew.rst.txt +++ /dev/null @@ -1,7 +0,0 @@ -What's new -========== - -Below is a rendering of the CHANGELOG.md file. - -.. include:: ../../CHANGELOG.md - :parser: myst_parser.sphinx_ diff --git a/docs/build/_sources/whatsnew/0.0.1.rst.txt b/docs/build/_sources/whatsnew/0.0.1.rst.txt deleted file mode 100644 index e69de29..0000000 diff --git a/docs/build/_sources/whatsnew/CHANGELOG.md.txt b/docs/build/_sources/whatsnew/CHANGELOG.md.txt deleted file mode 100644 index 0a61887..0000000 --- a/docs/build/_sources/whatsnew/CHANGELOG.md.txt +++ /dev/null @@ -1,4 +0,0 @@ - -- This is the initial release of the toolbox. It is based on and now included there as a submodule. It is based on the publication [1]. - -`[1] F. Dümbgen, C. Holmes, B. Agro and T. Barfoot, "Toward Globally Optimal State Estimation Using Automatically Tightened Semidefinite Relaxations," in IEEE Transactions on Robotics, vol. 40, pp. 4338-4358, 2024, doi: 10.1109/TRO.2024.3454570. `_ \ No newline at end of file diff --git a/docs/build/_static/_sphinx_javascript_frameworks_compat.js b/docs/build/_static/_sphinx_javascript_frameworks_compat.js deleted file mode 100644 index 8141580..0000000 --- a/docs/build/_static/_sphinx_javascript_frameworks_compat.js +++ /dev/null @@ -1,123 +0,0 @@ -/* Compatability shim for jQuery and underscores.js. - * - * Copyright Sphinx contributors - * Released under the two clause BSD licence - */ - -/** - * small helper function to urldecode strings - * - * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent#Decoding_query_parameters_from_a_URL - */ -jQuery.urldecode = function(x) { - if (!x) { - return x - } - return decodeURIComponent(x.replace(/\+/g, ' ')); -}; - -/** - * small helper function to urlencode strings - */ -jQuery.urlencode = encodeURIComponent; - -/** - * This function returns the parsed url parameters of the - * current request. Multiple values per key are supported, - * it will always return arrays of strings for the value parts. - */ -jQuery.getQueryParameters = function(s) { - if (typeof s === 'undefined') - s = document.location.search; - var parts = s.substr(s.indexOf('?') + 1).split('&'); - var result = {}; - for (var i = 0; i < parts.length; i++) { - var tmp = parts[i].split('=', 2); - var key = jQuery.urldecode(tmp[0]); - var value = jQuery.urldecode(tmp[1]); - if (key in result) - result[key].push(value); - else - result[key] = [value]; - } - return result; -}; - -/** - * highlight a given string on a jquery object by wrapping it in - * span elements with the given class name. - */ -jQuery.fn.highlightText = function(text, className) { - function highlight(node, addItems) { - if (node.nodeType === 3) { - var val = node.nodeValue; - var pos = val.toLowerCase().indexOf(text); - if (pos >= 0 && - !jQuery(node.parentNode).hasClass(className) && - !jQuery(node.parentNode).hasClass("nohighlight")) { - var span; - var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg"); - if (isInSVG) { - span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); - } else { - span = document.createElement("span"); - span.className = className; - } - span.appendChild(document.createTextNode(val.substr(pos, text.length))); - node.parentNode.insertBefore(span, node.parentNode.insertBefore( - document.createTextNode(val.substr(pos + text.length)), - node.nextSibling)); - node.nodeValue = val.substr(0, pos); - if (isInSVG) { - var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect"); - var bbox = node.parentElement.getBBox(); - rect.x.baseVal.value = bbox.x; - rect.y.baseVal.value = bbox.y; - rect.width.baseVal.value = bbox.width; - rect.height.baseVal.value = bbox.height; - rect.setAttribute('class', className); - addItems.push({ - "parent": node.parentNode, - "target": rect}); - } - } - } - else if (!jQuery(node).is("button, select, textarea")) { - jQuery.each(node.childNodes, function() { - highlight(this, addItems); - }); - } - } - var addItems = []; - var result = this.each(function() { - highlight(this, addItems); - }); - for (var i = 0; i < addItems.length; ++i) { - jQuery(addItems[i].parent).before(addItems[i].target); - } - return result; -}; - -/* - * backward compatibility for jQuery.browser - * This will be supported until firefox bug is fixed. - */ -if (!jQuery.browser) { - jQuery.uaMatch = function(ua) { - ua = ua.toLowerCase(); - - var match = /(chrome)[ \/]([\w.]+)/.exec(ua) || - /(webkit)[ \/]([\w.]+)/.exec(ua) || - /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) || - /(msie) ([\w.]+)/.exec(ua) || - ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) || - []; - - return { - browser: match[ 1 ] || "", - version: match[ 2 ] || "0" - }; - }; - jQuery.browser = {}; - jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true; -} diff --git a/docs/build/_static/api.rst b/docs/build/_static/api.rst deleted file mode 100644 index 0274180..0000000 --- a/docs/build/_static/api.rst +++ /dev/null @@ -1,10 +0,0 @@ -API and modules -=============== - -.. toctree:: - :maxdepth: 2 - :caption: Contents: - - api/algorithms - api/lifters - api/utils diff --git a/docs/build/_static/api/algorithms.rst b/docs/build/_static/api/algorithms.rst deleted file mode 100644 index 13ec899..0000000 --- a/docs/build/_static/api/algorithms.rst +++ /dev/null @@ -1,20 +0,0 @@ -Core Algorithms -=============== - -.. contents:: - :depth: 1 - :local: - - -AutoTight ---------- -.. autoclass:: popr.AutoTight - :members: - :show-inheritance: - -AutoTemplate ------------- -.. autoclass:: popr.AutoTemplate - :members: - :show-inheritance: - diff --git a/docs/build/_static/api/lifters.rst b/docs/build/_static/api/lifters.rst deleted file mode 100644 index 677454e..0000000 --- a/docs/build/_static/api/lifters.rst +++ /dev/null @@ -1,59 +0,0 @@ -Base Lifters -============ - -.. contents:: - :depth: 1 - :local: - -Overview --------- - -There are a couple of lifters that serve as a basis for new lifters. -The most basic one is :ref:`StateLifter`, which is generally the best starting point. - -For specific problems, there are a couple of abstract classes that were developed to ease -the development. In particular, we have: - -- :ref:`RobustPoseLifter` for point-to-point registration (Wahba) (:ref:`WahbaLifter`) and point-to-line registration (:ref:`MonoLifter`), which both try to regress an unknown pose. Robust cost functions are supported. -- :ref:`StereoLifter` for stereo localization in 2D (:ref:`Stereo2DLifter`) and 3D (:ref:`Stereo3DLifter`). -- :ref:`PolyLifter` for univariate polynomials of any order. - -Basics ------- - -Below are some general notes about terminology that may be useful in understanding the code and building your own lifters. - -- *theta* is the original (low-dimensional) state variable. -- *x* is the lifted (higher-dimensional) state variable. -- *A* are equality constraints -- *B* are inequality constraints -- *var_dict* refers to the dictionary of variable name - variable size pairs. -- *param_dict* is used to factor out parameters when creating templates. It also comes in name - variable size pairs. - -StateLifter ------------ - -.. autoclass:: popr.base_lifters.StateLifter - :members: get_x, get_theta, sample_theta, sample_parameters, get_Q, get_A_known, get_B_known, local_solver, get_cost, get_error - :show-inheritance: - -StereoLifter ------------- - -.. autoclass:: popr.base_lifters.StereoLifter - :member: LEVELS - :show-inheritance: - -RobustPoseLifter ------------------- - -.. autoclass:: popr.base_lifters.RobustPoseLifter - :members: local_solver_manopt - :show-inheritance: - -PolyLifter ----------- - -.. autoclass:: popr.base_lifters.PolyLifter - :members: - :show-inheritance: diff --git a/docs/build/_static/api/utils.rst b/docs/build/_static/api/utils.rst deleted file mode 100644 index 86b050e..0000000 --- a/docs/build/_static/api/utils.rst +++ /dev/null @@ -1,30 +0,0 @@ -Utils -===== - -.. contents:: - :depth: 2 - :local: - - -Constraints and Templates -------------------------- - -.. autoclass:: popr.utils.constraint.Constraint - :members: - :show-inheritance: - - -Matrix and vector operations ----------------------------- - -.. automodule:: popr.utils.common - :members: - - -Geometry: lie algebra etc. --------------------------- - -.. automodule:: popr.utils.geometry - :members: - - diff --git a/docs/build/_static/basic.css b/docs/build/_static/basic.css deleted file mode 100644 index 7ebbd6d..0000000 --- a/docs/build/_static/basic.css +++ /dev/null @@ -1,914 +0,0 @@ -/* - * Sphinx stylesheet -- basic theme. - */ - -/* -- main layout ----------------------------------------------------------- */ - -div.clearer { - clear: both; -} - -div.section::after { - display: block; - content: ''; - clear: left; -} - -/* -- relbar ---------------------------------------------------------------- */ - -div.related { - width: 100%; - font-size: 90%; -} - -div.related h3 { - display: none; -} - -div.related ul { - margin: 0; - padding: 0 0 0 10px; - list-style: none; -} - -div.related li { - display: inline; -} - -div.related li.right { - float: right; - margin-right: 5px; -} - -/* -- sidebar --------------------------------------------------------------- */ - -div.sphinxsidebarwrapper { - padding: 10px 5px 0 10px; -} - -div.sphinxsidebar { - float: left; - width: 230px; - margin-left: -100%; - font-size: 90%; - word-wrap: break-word; - overflow-wrap : break-word; -} - -div.sphinxsidebar ul { - list-style: none; -} - -div.sphinxsidebar ul ul, -div.sphinxsidebar ul.want-points { - margin-left: 20px; - list-style: square; -} - -div.sphinxsidebar ul ul { - margin-top: 0; - margin-bottom: 0; -} - -div.sphinxsidebar form { - margin-top: 10px; -} - -div.sphinxsidebar input { - border: 1px solid #98dbcc; - font-family: sans-serif; - font-size: 1em; -} - -div.sphinxsidebar #searchbox form.search { - overflow: hidden; -} - -div.sphinxsidebar #searchbox input[type="text"] { - float: left; - width: 80%; - padding: 0.25em; - box-sizing: border-box; -} - -div.sphinxsidebar #searchbox input[type="submit"] { - float: left; - width: 20%; - border-left: none; - padding: 0.25em; - box-sizing: border-box; -} - - -img { - border: 0; - max-width: 100%; -} - -/* -- search page ----------------------------------------------------------- */ - -ul.search { - margin-top: 10px; -} - -ul.search li { - padding: 5px 0; -} - -ul.search li a { - font-weight: bold; -} - -ul.search li p.context { - color: #888; - margin: 2px 0 0 30px; - text-align: left; -} - -ul.keywordmatches li.goodmatch a { - font-weight: bold; -} - -/* -- index page ------------------------------------------------------------ */ - -table.contentstable { - width: 90%; - margin-left: auto; - margin-right: auto; -} - -table.contentstable p.biglink { - line-height: 150%; -} - -a.biglink { - font-size: 1.3em; -} - -span.linkdescr { - font-style: italic; - padding-top: 5px; - font-size: 90%; -} - -/* -- general index --------------------------------------------------------- */ - -table.indextable { - width: 100%; -} - -table.indextable td { - text-align: left; - vertical-align: top; -} - -table.indextable ul { - margin-top: 0; - margin-bottom: 0; - list-style-type: none; -} - -table.indextable > tbody > tr > td > ul { - padding-left: 0em; -} - -table.indextable tr.pcap { - height: 10px; -} - -table.indextable tr.cap { - margin-top: 10px; - background-color: #f2f2f2; -} - -img.toggler { - margin-right: 3px; - margin-top: 3px; - cursor: pointer; -} - -div.modindex-jumpbox { - border-top: 1px solid #ddd; - border-bottom: 1px solid #ddd; - margin: 1em 0 1em 0; - padding: 0.4em; -} - -div.genindex-jumpbox { - border-top: 1px solid #ddd; - border-bottom: 1px solid #ddd; - margin: 1em 0 1em 0; - padding: 0.4em; -} - -/* -- domain module index --------------------------------------------------- */ - -table.modindextable td { - padding: 2px; - border-collapse: collapse; -} - -/* -- general body styles --------------------------------------------------- */ - -div.body { - min-width: 360px; - max-width: 800px; -} - -div.body p, div.body dd, div.body li, div.body blockquote { - -moz-hyphens: auto; - -ms-hyphens: auto; - -webkit-hyphens: auto; - hyphens: auto; -} - -a.headerlink { - visibility: hidden; -} - -a:visited { - color: #551A8B; -} - -h1:hover > a.headerlink, -h2:hover > a.headerlink, -h3:hover > a.headerlink, -h4:hover > a.headerlink, -h5:hover > a.headerlink, -h6:hover > a.headerlink, -dt:hover > a.headerlink, -caption:hover > a.headerlink, -p.caption:hover > a.headerlink, -div.code-block-caption:hover > a.headerlink { - visibility: visible; -} - -div.body p.caption { - text-align: inherit; -} - -div.body td { - text-align: left; -} - -.first { - margin-top: 0 !important; -} - -p.rubric { - margin-top: 30px; - font-weight: bold; -} - -img.align-left, figure.align-left, .figure.align-left, object.align-left { - clear: left; - float: left; - margin-right: 1em; -} - -img.align-right, figure.align-right, .figure.align-right, object.align-right { - clear: right; - float: right; - margin-left: 1em; -} - -img.align-center, figure.align-center, .figure.align-center, object.align-center { - display: block; - margin-left: auto; - margin-right: auto; -} - -img.align-default, figure.align-default, .figure.align-default { - display: block; - margin-left: auto; - margin-right: auto; -} - -.align-left { - text-align: left; -} - -.align-center { - text-align: center; -} - -.align-default { - text-align: center; -} - -.align-right { - text-align: right; -} - -/* -- sidebars -------------------------------------------------------------- */ - -div.sidebar, -aside.sidebar { - margin: 0 0 0.5em 1em; - border: 1px solid #ddb; - padding: 7px; - background-color: #ffe; - width: 40%; - float: right; - clear: right; - overflow-x: auto; -} - -p.sidebar-title { - font-weight: bold; -} - -nav.contents, -aside.topic, -div.admonition, div.topic, blockquote { - clear: left; -} - -/* -- topics ---------------------------------------------------------------- */ - -nav.contents, -aside.topic, -div.topic { - border: 1px solid #ccc; - padding: 7px; - margin: 10px 0 10px 0; -} - -p.topic-title { - font-size: 1.1em; - font-weight: bold; - margin-top: 10px; -} - -/* -- admonitions ----------------------------------------------------------- */ - -div.admonition { - margin-top: 10px; - margin-bottom: 10px; - padding: 7px; -} - -div.admonition dt { - font-weight: bold; -} - -p.admonition-title { - margin: 0px 10px 5px 0px; - font-weight: bold; -} - -div.body p.centered { - text-align: center; - margin-top: 25px; -} - -/* -- content of sidebars/topics/admonitions -------------------------------- */ - -div.sidebar > :last-child, -aside.sidebar > :last-child, -nav.contents > :last-child, -aside.topic > :last-child, -div.topic > :last-child, -div.admonition > :last-child { - margin-bottom: 0; -} - -div.sidebar::after, -aside.sidebar::after, -nav.contents::after, -aside.topic::after, -div.topic::after, -div.admonition::after, -blockquote::after { - display: block; - content: ''; - clear: both; -} - -/* -- tables ---------------------------------------------------------------- */ - -table.docutils { - margin-top: 10px; - margin-bottom: 10px; - border: 0; - border-collapse: collapse; -} - -table.align-center { - margin-left: auto; - margin-right: auto; -} - -table.align-default { - margin-left: auto; - margin-right: auto; -} - -table caption span.caption-number { - font-style: italic; -} - -table caption span.caption-text { -} - -table.docutils td, table.docutils th { - padding: 1px 8px 1px 5px; - border-top: 0; - border-left: 0; - border-right: 0; - border-bottom: 1px solid #aaa; -} - -th { - text-align: left; - padding-right: 5px; -} - -table.citation { - border-left: solid 1px gray; - margin-left: 1px; -} - -table.citation td { - border-bottom: none; -} - -th > :first-child, -td > :first-child { - margin-top: 0px; -} - -th > :last-child, -td > :last-child { - margin-bottom: 0px; -} - -/* -- figures --------------------------------------------------------------- */ - -div.figure, figure { - margin: 0.5em; - padding: 0.5em; -} - -div.figure p.caption, figcaption { - padding: 0.3em; -} - -div.figure p.caption span.caption-number, -figcaption span.caption-number { - font-style: italic; -} - -div.figure p.caption span.caption-text, -figcaption span.caption-text { -} - -/* -- field list styles ----------------------------------------------------- */ - -table.field-list td, table.field-list th { - border: 0 !important; -} - -.field-list ul { - margin: 0; - padding-left: 1em; -} - -.field-list p { - margin: 0; -} - -.field-name { - -moz-hyphens: manual; - -ms-hyphens: manual; - -webkit-hyphens: manual; - hyphens: manual; -} - -/* -- hlist styles ---------------------------------------------------------- */ - -table.hlist { - margin: 1em 0; -} - -table.hlist td { - vertical-align: top; -} - -/* -- object description styles --------------------------------------------- */ - -.sig { - font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; -} - -.sig-name, code.descname { - background-color: transparent; - font-weight: bold; -} - -.sig-name { - font-size: 1.1em; -} - -code.descname { - font-size: 1.2em; -} - -.sig-prename, code.descclassname { - background-color: transparent; -} - -.optional { - font-size: 1.3em; -} - -.sig-paren { - font-size: larger; -} - -.sig-param.n { - font-style: italic; -} - -/* C++ specific styling */ - -.sig-inline.c-texpr, -.sig-inline.cpp-texpr { - font-family: unset; -} - -.sig.c .k, .sig.c .kt, -.sig.cpp .k, .sig.cpp .kt { - color: #0033B3; -} - -.sig.c .m, -.sig.cpp .m { - color: #1750EB; -} - -.sig.c .s, .sig.c .sc, -.sig.cpp .s, .sig.cpp .sc { - color: #067D17; -} - - -/* -- other body styles ----------------------------------------------------- */ - -ol.arabic { - list-style: decimal; -} - -ol.loweralpha { - list-style: lower-alpha; -} - -ol.upperalpha { - list-style: upper-alpha; -} - -ol.lowerroman { - list-style: lower-roman; -} - -ol.upperroman { - list-style: upper-roman; -} - -:not(li) > ol > li:first-child > :first-child, -:not(li) > ul > li:first-child > :first-child { - margin-top: 0px; -} - -:not(li) > ol > li:last-child > :last-child, -:not(li) > ul > li:last-child > :last-child { - margin-bottom: 0px; -} - -ol.simple ol p, -ol.simple ul p, -ul.simple ol p, -ul.simple ul p { - margin-top: 0; -} - -ol.simple > li:not(:first-child) > p, -ul.simple > li:not(:first-child) > p { - margin-top: 0; -} - -ol.simple p, -ul.simple p { - margin-bottom: 0; -} - -aside.footnote > span, -div.citation > span { - float: left; -} -aside.footnote > span:last-of-type, -div.citation > span:last-of-type { - padding-right: 0.5em; -} -aside.footnote > p { - margin-left: 2em; -} -div.citation > p { - margin-left: 4em; -} -aside.footnote > p:last-of-type, -div.citation > p:last-of-type { - margin-bottom: 0em; -} -aside.footnote > p:last-of-type:after, -div.citation > p:last-of-type:after { - content: ""; - clear: both; -} - -dl.field-list { - display: grid; - grid-template-columns: fit-content(30%) auto; -} - -dl.field-list > dt { - font-weight: bold; - word-break: break-word; - padding-left: 0.5em; - padding-right: 5px; -} - -dl.field-list > dd { - padding-left: 0.5em; - margin-top: 0em; - margin-left: 0em; - margin-bottom: 0em; -} - -dl { - margin-bottom: 15px; -} - -dd > :first-child { - margin-top: 0px; -} - -dd ul, dd table { - margin-bottom: 10px; -} - -dd { - margin-top: 3px; - margin-bottom: 10px; - margin-left: 30px; -} - -.sig dd { - margin-top: 0px; - margin-bottom: 0px; -} - -.sig dl { - margin-top: 0px; - margin-bottom: 0px; -} - -dl > dd:last-child, -dl > dd:last-child > :last-child { - margin-bottom: 0; -} - -dt:target, span.highlighted { - background-color: #fbe54e; -} - -rect.highlighted { - fill: #fbe54e; -} - -dl.glossary dt { - font-weight: bold; - font-size: 1.1em; -} - -.versionmodified { - font-style: italic; -} - -.system-message { - background-color: #fda; - padding: 5px; - border: 3px solid red; -} - -.footnote:target { - background-color: #ffa; -} - -.line-block { - display: block; - margin-top: 1em; - margin-bottom: 1em; -} - -.line-block .line-block { - margin-top: 0; - margin-bottom: 0; - margin-left: 1.5em; -} - -.guilabel, .menuselection { - font-family: sans-serif; -} - -.accelerator { - text-decoration: underline; -} - -.classifier { - font-style: oblique; -} - -.classifier:before { - font-style: normal; - margin: 0 0.5em; - content: ":"; - display: inline-block; -} - -abbr, acronym { - border-bottom: dotted 1px; - cursor: help; -} - -.translated { - background-color: rgba(207, 255, 207, 0.2) -} - -.untranslated { - background-color: rgba(255, 207, 207, 0.2) -} - -/* -- code displays --------------------------------------------------------- */ - -pre { - overflow: auto; - overflow-y: hidden; /* fixes display issues on Chrome browsers */ -} - -pre, div[class*="highlight-"] { - clear: both; -} - -span.pre { - -moz-hyphens: none; - -ms-hyphens: none; - -webkit-hyphens: none; - hyphens: none; - white-space: nowrap; -} - -div[class*="highlight-"] { - margin: 1em 0; -} - -td.linenos pre { - border: 0; - background-color: transparent; - color: #aaa; -} - -table.highlighttable { - display: block; -} - -table.highlighttable tbody { - display: block; -} - -table.highlighttable tr { - display: flex; -} - -table.highlighttable td { - margin: 0; - padding: 0; -} - -table.highlighttable td.linenos { - padding-right: 0.5em; -} - -table.highlighttable td.code { - flex: 1; - overflow: hidden; -} - -.highlight .hll { - display: block; -} - -div.highlight pre, -table.highlighttable pre { - margin: 0; -} - -div.code-block-caption + div { - margin-top: 0; -} - -div.code-block-caption { - margin-top: 1em; - padding: 2px 5px; - font-size: small; -} - -div.code-block-caption code { - background-color: transparent; -} - -table.highlighttable td.linenos, -span.linenos, -div.highlight span.gp { /* gp: Generic.Prompt */ - user-select: none; - -webkit-user-select: text; /* Safari fallback only */ - -webkit-user-select: none; /* Chrome/Safari */ - -moz-user-select: none; /* Firefox */ - -ms-user-select: none; /* IE10+ */ -} - -div.code-block-caption span.caption-number { - padding: 0.1em 0.3em; - font-style: italic; -} - -div.code-block-caption span.caption-text { -} - -div.literal-block-wrapper { - margin: 1em 0; -} - -code.xref, a code { - background-color: transparent; - font-weight: bold; -} - -h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { - background-color: transparent; -} - -.viewcode-link { - float: right; -} - -.viewcode-back { - float: right; - font-family: sans-serif; -} - -div.viewcode-block:target { - margin: -1px -10px; - padding: 0 10px; -} - -/* -- math display ---------------------------------------------------------- */ - -img.math { - vertical-align: middle; -} - -div.body div.math p { - text-align: center; -} - -span.eqno { - float: right; -} - -span.eqno a.headerlink { - position: absolute; - z-index: 1; -} - -div.math:hover a.headerlink { - visibility: visible; -} - -/* -- printout stylesheet --------------------------------------------------- */ - -@media print { - div.document, - div.documentwrapper, - div.bodywrapper { - margin: 0 !important; - width: 100%; - } - - div.sphinxsidebar, - div.related, - div.footer, - #top-link { - display: none; - } -} \ No newline at end of file diff --git a/docs/build/_static/check-solid.svg b/docs/build/_static/check-solid.svg deleted file mode 100644 index 92fad4b..0000000 --- a/docs/build/_static/check-solid.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/docs/build/_static/clipboard.min.js b/docs/build/_static/clipboard.min.js deleted file mode 100644 index 54b3c46..0000000 --- a/docs/build/_static/clipboard.min.js +++ /dev/null @@ -1,7 +0,0 @@ -/*! - * clipboard.js v2.0.8 - * https://clipboardjs.com/ - * - * Licensed MIT © Zeno Rocha - */ -!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ClipboardJS=e():t.ClipboardJS=e()}(this,function(){return n={686:function(t,e,n){"use strict";n.d(e,{default:function(){return o}});var e=n(279),i=n.n(e),e=n(370),u=n.n(e),e=n(817),c=n.n(e);function a(t){try{return document.execCommand(t)}catch(t){return}}var f=function(t){t=c()(t);return a("cut"),t};var l=function(t){var e,n,o,r=1 - - - - diff --git a/docs/build/_static/copybutton.css b/docs/build/_static/copybutton.css deleted file mode 100644 index f1916ec..0000000 --- a/docs/build/_static/copybutton.css +++ /dev/null @@ -1,94 +0,0 @@ -/* Copy buttons */ -button.copybtn { - position: absolute; - display: flex; - top: .3em; - right: .3em; - width: 1.7em; - height: 1.7em; - opacity: 0; - transition: opacity 0.3s, border .3s, background-color .3s; - user-select: none; - padding: 0; - border: none; - outline: none; - border-radius: 0.4em; - /* The colors that GitHub uses */ - border: #1b1f2426 1px solid; - background-color: #f6f8fa; - color: #57606a; -} - -button.copybtn.success { - border-color: #22863a; - color: #22863a; -} - -button.copybtn svg { - stroke: currentColor; - width: 1.5em; - height: 1.5em; - padding: 0.1em; -} - -div.highlight { - position: relative; -} - -/* Show the copybutton */ -.highlight:hover button.copybtn, button.copybtn.success { - opacity: 1; -} - -.highlight button.copybtn:hover { - background-color: rgb(235, 235, 235); -} - -.highlight button.copybtn:active { - background-color: rgb(187, 187, 187); -} - -/** - * A minimal CSS-only tooltip copied from: - * https://codepen.io/mildrenben/pen/rVBrpK - * - * To use, write HTML like the following: - * - *

Short

- */ - .o-tooltip--left { - position: relative; - } - - .o-tooltip--left:after { - opacity: 0; - visibility: hidden; - position: absolute; - content: attr(data-tooltip); - padding: .2em; - font-size: .8em; - left: -.2em; - background: grey; - color: white; - white-space: nowrap; - z-index: 2; - border-radius: 2px; - transform: translateX(-102%) translateY(0); - transition: opacity 0.2s cubic-bezier(0.64, 0.09, 0.08, 1), transform 0.2s cubic-bezier(0.64, 0.09, 0.08, 1); -} - -.o-tooltip--left:hover:after { - display: block; - opacity: 1; - visibility: visible; - transform: translateX(-100%) translateY(0); - transition: opacity 0.2s cubic-bezier(0.64, 0.09, 0.08, 1), transform 0.2s cubic-bezier(0.64, 0.09, 0.08, 1); - transition-delay: .5s; -} - -/* By default the copy button shouldn't show up when printing a page */ -@media print { - button.copybtn { - display: none; - } -} diff --git a/docs/build/_static/copybutton.js b/docs/build/_static/copybutton.js deleted file mode 100644 index 2ea7ff3..0000000 --- a/docs/build/_static/copybutton.js +++ /dev/null @@ -1,248 +0,0 @@ -// Localization support -const messages = { - 'en': { - 'copy': 'Copy', - 'copy_to_clipboard': 'Copy to clipboard', - 'copy_success': 'Copied!', - 'copy_failure': 'Failed to copy', - }, - 'es' : { - 'copy': 'Copiar', - 'copy_to_clipboard': 'Copiar al portapapeles', - 'copy_success': '¡Copiado!', - 'copy_failure': 'Error al copiar', - }, - 'de' : { - 'copy': 'Kopieren', - 'copy_to_clipboard': 'In die Zwischenablage kopieren', - 'copy_success': 'Kopiert!', - 'copy_failure': 'Fehler beim Kopieren', - }, - 'fr' : { - 'copy': 'Copier', - 'copy_to_clipboard': 'Copier dans le presse-papier', - 'copy_success': 'Copié !', - 'copy_failure': 'Échec de la copie', - }, - 'ru': { - 'copy': 'Скопировать', - 'copy_to_clipboard': 'Скопировать в буфер', - 'copy_success': 'Скопировано!', - 'copy_failure': 'Не удалось скопировать', - }, - 'zh-CN': { - 'copy': '复制', - 'copy_to_clipboard': '复制到剪贴板', - 'copy_success': '复制成功!', - 'copy_failure': '复制失败', - }, - 'it' : { - 'copy': 'Copiare', - 'copy_to_clipboard': 'Copiato negli appunti', - 'copy_success': 'Copiato!', - 'copy_failure': 'Errore durante la copia', - } -} - -let locale = 'en' -if( document.documentElement.lang !== undefined - && messages[document.documentElement.lang] !== undefined ) { - locale = document.documentElement.lang -} - -let doc_url_root = DOCUMENTATION_OPTIONS.URL_ROOT; -if (doc_url_root == '#') { - doc_url_root = ''; -} - -/** - * SVG files for our copy buttons - */ -let iconCheck = ` - ${messages[locale]['copy_success']} - - -` - -// If the user specified their own SVG use that, otherwise use the default -let iconCopy = ``; -if (!iconCopy) { - iconCopy = ` - ${messages[locale]['copy_to_clipboard']} - - - -` -} - -/** - * Set up copy/paste for code blocks - */ - -const runWhenDOMLoaded = cb => { - if (document.readyState != 'loading') { - cb() - } else if (document.addEventListener) { - document.addEventListener('DOMContentLoaded', cb) - } else { - document.attachEvent('onreadystatechange', function() { - if (document.readyState == 'complete') cb() - }) - } -} - -const codeCellId = index => `codecell${index}` - -// Clears selected text since ClipboardJS will select the text when copying -const clearSelection = () => { - if (window.getSelection) { - window.getSelection().removeAllRanges() - } else if (document.selection) { - document.selection.empty() - } -} - -// Changes tooltip text for a moment, then changes it back -// We want the timeout of our `success` class to be a bit shorter than the -// tooltip and icon change, so that we can hide the icon before changing back. -var timeoutIcon = 2000; -var timeoutSuccessClass = 1500; - -const temporarilyChangeTooltip = (el, oldText, newText) => { - el.setAttribute('data-tooltip', newText) - el.classList.add('success') - // Remove success a little bit sooner than we change the tooltip - // So that we can use CSS to hide the copybutton first - setTimeout(() => el.classList.remove('success'), timeoutSuccessClass) - setTimeout(() => el.setAttribute('data-tooltip', oldText), timeoutIcon) -} - -// Changes the copy button icon for two seconds, then changes it back -const temporarilyChangeIcon = (el) => { - el.innerHTML = iconCheck; - setTimeout(() => {el.innerHTML = iconCopy}, timeoutIcon) -} - -const addCopyButtonToCodeCells = () => { - // If ClipboardJS hasn't loaded, wait a bit and try again. This - // happens because we load ClipboardJS asynchronously. - if (window.ClipboardJS === undefined) { - setTimeout(addCopyButtonToCodeCells, 250) - return - } - - // Add copybuttons to all of our code cells - const COPYBUTTON_SELECTOR = 'div.highlight pre'; - const codeCells = document.querySelectorAll(COPYBUTTON_SELECTOR) - codeCells.forEach((codeCell, index) => { - const id = codeCellId(index) - codeCell.setAttribute('id', id) - - const clipboardButton = id => - `` - codeCell.insertAdjacentHTML('afterend', clipboardButton(id)) - }) - -function escapeRegExp(string) { - return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string -} - -/** - * Removes excluded text from a Node. - * - * @param {Node} target Node to filter. - * @param {string} exclude CSS selector of nodes to exclude. - * @returns {DOMString} Text from `target` with text removed. - */ -function filterText(target, exclude) { - const clone = target.cloneNode(true); // clone as to not modify the live DOM - if (exclude) { - // remove excluded nodes - clone.querySelectorAll(exclude).forEach(node => node.remove()); - } - return clone.innerText; -} - -// Callback when a copy button is clicked. Will be passed the node that was clicked -// should then grab the text and replace pieces of text that shouldn't be used in output -function formatCopyText(textContent, copybuttonPromptText, isRegexp = false, onlyCopyPromptLines = true, removePrompts = true, copyEmptyLines = true, lineContinuationChar = "", hereDocDelim = "") { - var regexp; - var match; - - // Do we check for line continuation characters and "HERE-documents"? - var useLineCont = !!lineContinuationChar - var useHereDoc = !!hereDocDelim - - // create regexp to capture prompt and remaining line - if (isRegexp) { - regexp = new RegExp('^(' + copybuttonPromptText + ')(.*)') - } else { - regexp = new RegExp('^(' + escapeRegExp(copybuttonPromptText) + ')(.*)') - } - - const outputLines = []; - var promptFound = false; - var gotLineCont = false; - var gotHereDoc = false; - const lineGotPrompt = []; - for (const line of textContent.split('\n')) { - match = line.match(regexp) - if (match || gotLineCont || gotHereDoc) { - promptFound = regexp.test(line) - lineGotPrompt.push(promptFound) - if (removePrompts && promptFound) { - outputLines.push(match[2]) - } else { - outputLines.push(line) - } - gotLineCont = line.endsWith(lineContinuationChar) & useLineCont - if (line.includes(hereDocDelim) & useHereDoc) - gotHereDoc = !gotHereDoc - } else if (!onlyCopyPromptLines) { - outputLines.push(line) - } else if (copyEmptyLines && line.trim() === '') { - outputLines.push(line) - } - } - - // If no lines with the prompt were found then just use original lines - if (lineGotPrompt.some(v => v === true)) { - textContent = outputLines.join('\n'); - } - - // Remove a trailing newline to avoid auto-running when pasting - if (textContent.endsWith("\n")) { - textContent = textContent.slice(0, -1) - } - return textContent -} - - -var copyTargetText = (trigger) => { - var target = document.querySelector(trigger.attributes['data-clipboard-target'].value); - - // get filtered text - let exclude = '.linenos'; - - let text = filterText(target, exclude); - return formatCopyText(text, '', false, true, true, true, '', '') -} - - // Initialize with a callback so we can modify the text before copy - const clipboard = new ClipboardJS('.copybtn', {text: copyTargetText}) - - // Update UI with error/success messages - clipboard.on('success', event => { - clearSelection() - temporarilyChangeTooltip(event.trigger, messages[locale]['copy'], messages[locale]['copy_success']) - temporarilyChangeIcon(event.trigger) - }) - - clipboard.on('error', event => { - temporarilyChangeTooltip(event.trigger, messages[locale]['copy'], messages[locale]['copy_failure']) - }) -} - -runWhenDOMLoaded(addCopyButtonToCodeCells) \ No newline at end of file diff --git a/docs/build/_static/copybutton_funcs.js b/docs/build/_static/copybutton_funcs.js deleted file mode 100644 index dbe1aaa..0000000 --- a/docs/build/_static/copybutton_funcs.js +++ /dev/null @@ -1,73 +0,0 @@ -function escapeRegExp(string) { - return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string -} - -/** - * Removes excluded text from a Node. - * - * @param {Node} target Node to filter. - * @param {string} exclude CSS selector of nodes to exclude. - * @returns {DOMString} Text from `target` with text removed. - */ -export function filterText(target, exclude) { - const clone = target.cloneNode(true); // clone as to not modify the live DOM - if (exclude) { - // remove excluded nodes - clone.querySelectorAll(exclude).forEach(node => node.remove()); - } - return clone.innerText; -} - -// Callback when a copy button is clicked. Will be passed the node that was clicked -// should then grab the text and replace pieces of text that shouldn't be used in output -export function formatCopyText(textContent, copybuttonPromptText, isRegexp = false, onlyCopyPromptLines = true, removePrompts = true, copyEmptyLines = true, lineContinuationChar = "", hereDocDelim = "") { - var regexp; - var match; - - // Do we check for line continuation characters and "HERE-documents"? - var useLineCont = !!lineContinuationChar - var useHereDoc = !!hereDocDelim - - // create regexp to capture prompt and remaining line - if (isRegexp) { - regexp = new RegExp('^(' + copybuttonPromptText + ')(.*)') - } else { - regexp = new RegExp('^(' + escapeRegExp(copybuttonPromptText) + ')(.*)') - } - - const outputLines = []; - var promptFound = false; - var gotLineCont = false; - var gotHereDoc = false; - const lineGotPrompt = []; - for (const line of textContent.split('\n')) { - match = line.match(regexp) - if (match || gotLineCont || gotHereDoc) { - promptFound = regexp.test(line) - lineGotPrompt.push(promptFound) - if (removePrompts && promptFound) { - outputLines.push(match[2]) - } else { - outputLines.push(line) - } - gotLineCont = line.endsWith(lineContinuationChar) & useLineCont - if (line.includes(hereDocDelim) & useHereDoc) - gotHereDoc = !gotHereDoc - } else if (!onlyCopyPromptLines) { - outputLines.push(line) - } else if (copyEmptyLines && line.trim() === '') { - outputLines.push(line) - } - } - - // If no lines with the prompt were found then just use original lines - if (lineGotPrompt.some(v => v === true)) { - textContent = outputLines.join('\n'); - } - - // Remove a trailing newline to avoid auto-running when pasting - if (textContent.endsWith("\n")) { - textContent = textContent.slice(0, -1) - } - return textContent -} diff --git a/docs/build/_static/css/badge_only.css b/docs/build/_static/css/badge_only.css deleted file mode 100644 index 88ba55b..0000000 --- a/docs/build/_static/css/badge_only.css +++ /dev/null @@ -1 +0,0 @@ -.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}@font-face{font-family:FontAwesome;font-style:normal;font-weight:400;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#FontAwesome) format("svg")}.fa:before{font-family:FontAwesome;font-style:normal;font-weight:400;line-height:1}.fa:before,a .fa{text-decoration:inherit}.fa:before,a .fa,li .fa{display:inline-block}li .fa-large:before{width:1.875em}ul.fas{list-style-type:none;margin-left:2em;text-indent:-.8em}ul.fas li .fa{width:.8em}ul.fas li .fa-large:before{vertical-align:baseline}.fa-book:before,.icon-book:before{content:"\f02d"}.fa-caret-down:before,.icon-caret-down:before{content:"\f0d7"}.fa-caret-up:before,.icon-caret-up:before{content:"\f0d8"}.fa-caret-left:before,.icon-caret-left:before{content:"\f0d9"}.fa-caret-right:before,.icon-caret-right:before{content:"\f0da"}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60}.rst-versions .rst-current-version:after{clear:both;content:"";display:block}.rst-versions .rst-current-version .fa{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions .rst-other-versions .rtd-current-item{font-weight:700}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}}#flyout-search-form{padding:6px} \ No newline at end of file diff --git a/docs/build/_static/css/fonts/Roboto-Slab-Bold.woff b/docs/build/_static/css/fonts/Roboto-Slab-Bold.woff deleted file mode 100644 index 6cb60000181dbd348963953ac8ac54afb46c63d5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 87624 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

!pma|lSQ?8FBe{DRl|@FzhU7Cb>&@ataZS{g zrCQo@Lushkm71KyL3$%QD?KeSADp!x{f z=8g-xggQyFIyp&U(+DO4!2ygCg$vPu1pqEc^*Qa)IPstXB!i@fDLx<-```)5UsmT$Yl%a2onC zAFmUqUVZ7M=U;sB~=#ZhJ zS2lbGii8+5IZ#kxQUi*iaRi9X

#R4x5a04mzf2YJ>#U<-Nc81}`=EFMdUjIP>d| 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

b(7>T&1{%W+D%3_gwxcBR7_myM-&X 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 DnuPx& diff --git a/docs/build/_static/css/fonts/Roboto-Slab-Regular.woff b/docs/build/_static/css/fonts/Roboto-Slab-Regular.woff deleted file mode 100644 index f815f63f99da80ad2be69e4021023ec2981eaea0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 86288 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 z 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

msZ%O|+*Z+LS;;x4v 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%0AU9xwl*jMUcB+ zt@vIc<(}v5kuSe6$bvY`~h`D0iy3JA6JcMdg%p z7ZV?fwcIXkzQGvQfljSBy_~edTDG4|t~?+?P=QU>nCTXlJUQN%QP zY_Q6febHS88{5dJH8vMy;cSk2^Irtx?WL{3VXK{4Htlz6-g7_{V61RmcnSS7x4{n@# z56xxVYj;->6hTYrd+%O;i@{3f5F{a1Wo;1W=%WTRQHHO1~Dn z46~nN+F+BY=i~|-aRX}m;5(EZzhg*$%hewRLNENt(WjG3Aq+(CQ`5oo^jUttAN#ej z!mJfM5iFo-Z$O&c8Zj|+u(myy-cXe5i!8R44$2R=MbR?Vzy1E>*%|?w-AfZ3U@!%$4}9AtfyB5J^dwdhLk>t@sm6bCgOhD$sHk| zgkyU#nh$9h;XpxRBGhwK*cC0wFyLntAUPxYhLH!Fi)OAi18*XZ1sKpV;@YXD*&3^g zXaLJ*L`T%2@nz-MHx`WBxu9l1gFYGi0&FZEQ}0`|sJo31S|K%-&e%3FTJO#ltHhf& zqA9|djv>{T9$2*M^txWL9OKizgCY<91$BUMigmiaeG5q z2}39y1uiC=b~sHMf_@Wt>qZp}7}5}d6<-CME-|C#*MY%Ss)M)%){RVb`IAh<)QSfM7{)&E`c!C{{*KYZvXTqMhu#qMw z{opCWVD|VKI-7CjnZyL!7;_caB^2YW9bduF3N<5kx&csGecDKaDX+>?Ftox6Anh&G zNMalPvdEmI&7_ldgB^t4?Deq{sVig@L(7i33T+aK_STKBpw=PEE;oq@*PB9+@UU{{ ze^O=~XXzB%1qTW_R1I$1HWQbFyC6OSwt0(C+!tyfkAo=s>^?=U7ClCPA!1-Ik>fTW z0p6Ro2ur8^;@<4s=ujzc024`_GpN(KjS`a7Is7`k$0+5pNSzCVQj*j={aT&ZB&Ak^ z#UU^E{uYDZu2R|k24m2nRy%^mUcb@&UQAsrng!bgs2dWm)A3fqYo`(|-<@<9I@Qd2 zql#ooJC-&z&1-csq|I;*O&UTpqx9C~hs=?YpNH;U zIfV{HS52}d9ZMUV<_&PMq}6y0LmBdz<#KmbIL{nuFR@rk+9T$?aFtt*=+5JQ0S#J$ z<^^PgbRRtQ$peh!yW5a$cE7>h7M~LTEk65`JTJ}N=gpB!Ut_i_p02Q%zgFVY(V+W! zn099T8I+d4RR9^ot=w5nj(NjgRnS|>oz*J7G9#1W=EwIEQmPWC#WPZrgI`#hJ+p~N z%~iqKWT=R0^cP|o26A2T6Y)c+PhqqdNb(EN9B+NpwSv~^YQ72&*(=wKo z(Tiy*u4mnTZdZI?{0JJakizITaoL3?GPz4`l(bV~ijmN>E%w{KeVyBtEuT$GSyoEV zHUfT~qI(W^OMG|y7#^SUXQq1=W4USVGh#~i4vN(flY0pi_WI)s7dUnr3Kup)TH?5aE!zx z>oWK1l#Nc6{6=aLn3d<@KE-9hT@TZZ7t)cwXeH2aZ?-ZP=f*6U&fv*ImkOXVi&J;O z`nZ>`H<@%j!|b82WBnBa1H7u;^hP#NIWUkDE%4JrGw7P&s;QBp8CajL{##al2cK(9 zQ7ns_!9uH`Sa8OvQeL-qaz6?NOJHul08{apg9|~Pc|XF_>&BYkiux~10<3Lip_cmL zsRSxd9_H5w`JuSOW)#b`zdZI)CK~Xa&z8U`-l(IzQDaR9bE09t+M2`kBNMR=7lEUv z2wb_mPO7L5(G+Zd&VDUWD2Hz=hG#HDvx)$Ar&_sj?Uc+032KnVfmu91ALQpx@atz3 zKnrE?O~Ufa5JP8TFrX$t-r5#i0vQ3qu1C=PK^ zX5EwBcT&?t590cF!Ts*t7i~la4>sVPKXb??r||I~bDmw+eVViciY%sFI|R{IttHPP zr>23as1EGU6cjAwcLsSR0JjO}ljkfhhAa^H3F5%o!R`5RaiBb3QP+r2JZy`oK-Ab@ z+e4m5yl77s01HfG#_dwYpg>M6>_34bf0)yy1B)rVUzwN4hb3f}Gq<{OdzT=$^vC4~ z+!1bR{MYfv(S1WS+Nu&_s{3Nx%l9i8lix&YF1wU`{aNlc?kOuz)=e<=All(|kHiU%{v2 zw{QF)2E0fW56c4vtxL{ztpk2Qp*N|E_sZ2$38>n@aUYe661-CL=HdxNu#D$~*N6TY z^L>zi^=(j{@}A`XwRi5(Q5AU}@4C-UI^F5pk95+VekJL=g`|@v1cD@i5X}ZK0cK5* zM@9_d%7SP1=(w{k@)$v81Yy@120?UrijYNM;$x1Aqq}-Mq9{9ia8Qpj_*{h{&WH}V zm959UeQ)3HbcZ>|-GBUpLwCA=zpDGIy7l?~s_Ry%bp&`$51Ywd>%c917I&OP@(E`C z2KXwHPLF^QQ?gwaGE_tI1l)%#9hS#QC|5J{Kn*gry5SjSyD8Z=rnlV-40{;4n-{h{_0s^QKEbe zoZ~MGdD&wv@-*gfrzyQ3Kq~!sPHjN-;~yfS`V~Cm2~alRL^;BTI z>Se+^>I$A z^&pt*!lnziad#5imV}tc)R^x$v4;*UA4cUDm~|%gyJ`CMqx{6ONP_^kp8#eWaptG; z$>Q;qA?}mt@M3mLcRC+5+_>2kAMVTKQiou-zl^$wG8@7A%sz0FDL%?RB0d)279&2c zdnn|DwOMU`(-_`!u$rHgmW?;xZQ{ z_HVHa;Boo4>%a^;x*psBf-(9%{ry*rZa;i-9S-ul@aQ_Q)E0IrBl1Ofb^~a#;P#jSwNIM`LX+CUv7U@u=c%aGwlZcqhL$5Q3GwTM$nCb@5 zL`|PUBuZjGDAmaZTQ;_$ssT~R;>2bTK8z@2oJj1^lz3j>F@xUuZ{w}Oy7)@dQ#7&SK!eBa4Q-`R4&Pb zz08kYUXY?smnCxPGx%TBRKwCq`4X`vSW2?b0*Ndbh8L*=9g|*#Vd6o7Qj!nACi?gc zQWqMNnD<~SaiQg79R?;De7rYAeZ-l>Lio4Dg)TQs)&P=D1F#dZ22l08%0O#;ycLNO zCjjF_4(>n@j?Iksw1YP)e%yHj?gd|*Aa0Rj#Wo! zNCcOuj?lQ6K?B5fM4XPHcZr8MB9ocS>NEg`9?}3+phW}TAX7IZopw+`r)dWQIiwvF zzGc)7`IR;mQzFt1m{6HCK!SE?Q=|g{R3;68S-9aKDI$#q@WlB<0el72XnaBtp1k2K z8|=)aBh(=;QAbcd5hqAT;A~0rVdPUp;ZvfDzizRD_ zrRb*mwL&Ot_6jRHXGoxz8cN=r~c zsaoQFnkQYYmY{fwYYBv>q%ki=o|K>_FqsrJagyXos(o^vlprJ&8A0=;=_#4CA0@F$ zx4gcE-EGL275M< zNki}t)Lw_A1G0lS(DJ0|nYi|6>O=>n!}2uZM1hjgM-r1R$kc_#q!V&K@t|W;vIdZJ z8UWqFZ}l>Z$wY@y<4G7u6DX06!ktLqSsW^lcF0?MnU!uUrqQU{K~lBD64V=27RgT` zLr;LPXmsr$soDXXYA8A>4-sn>MPt+tOX%I8vWV!1mH1{LFv`e&tRJw8IE$F~v3x)t zbop9(_5&HQKR_h7j(tj;Sph{_nLo_7!tLuo516N7D>oayvH^@|elWw7iu-Sl&nwC z2+F8aPk(+OQ*}wKj~Q5BkJEjUPo?KP<`0GBB``_j4@tI9bDiCpw1SjMD^UIrAMdgu zB|o}atw8ys%sE`9^K=VG<4;88Poi3QQTG!CNsV+qk{OgB7L@4*%Al5%4BB%7EFmFV zE58usKIl%I7fr#Sr{SR!;1;2wRAtbWIZ^I>xEko~QZwjH_!2eM7&LfgFR@k_WSj?0 z9M?XA?@)UkgZ|~pSHywFp!7a2!~dZ^bO_ow93?)qyvQ(@nmoRKL!D?4+A`cne5epg z#e7M}eAK;e5E_8H5b!`&o=Tx@!wXy3yQdzXp^Y_8Ghh2c}ggF>U^IfJ+ly>P%jbTB#~OT>wq z8Ksyr$TIj*!~=GuA!$HvC4ThzQF`{HI})>>OjIPXpVioZnEWIJIMAyyNxmP^kK>rd zhPi`8-5@3D26m#R8%FsZD~)zw?ozZv!tYoaw1bAE*W=n@raT!{~}KLiB=w+`Ma~cIN6`0%*r5i1syoouVlA$rqc^#oV7Txt)dq&zT8%9Tf@v# zG~HDLB*l&=L(gHX?Tx8hY0Kg zT^i*ExktJ)@jg)}P_hlO%VlvBsi}-!q zma%Lh<@mWxBaf3aXmlsgz^_V*vinzigSMCBr_G>ppF~KE z^S(X4LJ7)Z8+9MmbwYR7(l->MQ2lSy$M5`*ufdgkj*H zT;<+>d?~L!!v5x>yb z+%TtCv{;3#P+dn|p&j6bP5&Qj`@V}ciep|MIp+12-^E(b?`U1B+`}9+wX;V?kLRyL z6~bY0+>D-R`LxEGyil3&q*&A56Rnswv4)*rR6S|ov=U#?S5iG`(Xo32nHT!?vx=t33L;OD^eqsumYRSG3x;<#rqtD{o>Xa%WOgzi3!WnSq zFsu1seS1~)wb4qC3%v(xxo`}tM{y<3IJ{v=^1HKYS^CPA#juh$BuN2R zw(z0N?X#A))rSfK1vZb*8ksQxzdYp(7uaH@&Y}XFt)K|>JHiFIxdmYd`UCpEh>RZs z|B~sncotp5)X}fNIm+MbTtSbG`I!)D>>M|~rLMZb9m=yZKNljC(EHZ9s!6U8`h25M z(l~S6xR!eKdC;T(Tv#IcitN#w+ABkm5W3^-wF}y-f~7&=K$mTg&QJI|dTC2+rUIYt)}De-RG=Feab$xj+#&D48yL}zu9U7Bu)b{ATB^{v!xip(cXNwJF7aoT zzDGtqfH(9D0I{XmOE=p8P*e!{P|9^#lrJ@3Iem5VzWIz_=Skv z7n-xpIoVW4Jj(ycR4T^E-T>-|n(X`0@QS8I^UZ8Qq{i!6ZjDy4Oei1)^4(@jHZQ>Z zU}uxBGVC$euMmBbGv916=UAwg8iE_(w<9~q87YY|`kKQxEe;14Kkedz;eZM1<0*a! ztQRYA&W81FG2X-+tK{|Yn7gPzKIs5Mw_99!g$}U-{=s2>V2#a=lrn(3xQ9kwL-#By zJ8@*0#09Tu4ESq{>>L-Up6CxmizU7`)L2wU;uuJC9eR*~$z2Uru^+BU2ppwd*D)Tk(kbP$mm5fKmp=^`Z{O{6yo zLXr&#C{;lPq(l@10SSooK{nz`Q>)K>^ z=E*&?*35b)$*lWcW#FLWtcL^%H1=;D0b_H|s&*sKA|xJsA14j$8IHM5iozk?FnI;3 zSiD;RsKJMe#zeU(GZk}lbUsL}P0l_&mX#yID>R2^$4htk3E$%9N%2h{nV4pbq+drz26$$nhZe)GwNt8}2eXa?#Wa6>{;s_=;( zk?FD*u=|3q*z~q)n*Y>P?`58{k@AywmC2{NL9cF6BP>oz#Qm5iM|^*w9ub$q(f^6> zoI#y^a7;aVk6d%B;fiU&=q0RB$B{$pMy0U>Uqm?+`>y(G`p+LTdPtD8{mxZT9COdw z=uWI@rkTVeZe{*YbJQ8A*6)2$ik=7#x%I<1GlKWT;lT;husIX2X|9DV;( zAy4xC%~Naf_oukMADcHV=e-@AI{qf<`6A%TUT@Nlm7%HcrnQ589ko2A?oIMjrMjR9 zv6Ba%6%b6PXLT#`LwNGq)dKkL@d0E}{4ZoreYkT11@(J=|K1Qv@V&0S9NOEf;A^2) zl!tlUL;9G_^Fu4M^ykett9;v5n(0aTrnPg{>s)@|BOPWt`Dggpfw|q3mxW2nHu+- z>)BlnS1tVOmv39=-8}dtqAifL5HheM7C*7`{E_?fw3Rq3tA)o% zQ#-lShF5weBr~{;jG%0@RmMkcj>mlba+pV_o_jo2^QlVQLMvxwLukgU&ki-%4a*Y= z+R9(fc16C4E>Q2dulJ*tOXd*7;vAv5sYgKX1BOpb+4O=Ek?&x>ypfY$jpf3bwl{h_ zsgo>`Q$C2=bczslh5;Q5 zPTeBmWhyg8AI=dW-QTC?;y=tyekwEUv_GwA_|7xzI{0|Dv=UE7;cf+Z>BF zj53}pWWC7)=DRX^_mI(Wf4q2|RkCpJf!(|V6)7K6UDn^VhYbOdN6>&@mP`&PH&j75 z$hEH2+7QebX?gu^(MUDR2R2hrF+#F#UwMT3lPSl#7!~EsI;WYCU8(Y?EwaiaPfv;; zaa%2TgT%W+0-Iq(C0~`;X4h?K_YbXpcrgQmLf@NX@2-< zE`Igsh$%l4;8R=Eu=_o6J^A~tq?MtMjkQXGjq3N$f!7%VV|t<+g0hy%P}e&6e7xst zD)mN%74P(d9U*gz%+VFM)?~2^^cN$!J z;kDi|sZX5Eyb|(2-~C<`Zq+reuk*P8p>~L*4d@J>ZNeoszKj)sN3Er1@B;$)sfVNj zXGV2;G@8tTAG3TWfmhzfV9ecL-M!;*$K?%)F!ew>U`i=ke$(e@W7ZGOOuUMi*#VU% z<)sHlEUxSd6y%3g0ICTkKs*&b54tvds5{9{Qsy!;$0J@k;E-gejNl6wdmn2*JL%HU zGn%7Mv9D0+m&>pMxN{k@(+9UlYNt&Rh(MLg56A0uUrL9rPb?mdVCsdTDvCT7*IhT) zyZf>!Ak9q#Xl1o)V@}B@%*}?jVxep()3Y%fu9zMBOUv;B!qVEymk%=vwcpfTyu|@0 zs7S_ctj9`bYWi|&2A(q?e}p=4VGkA(;I-U~T7tbR4IS24_L6k7vU;mmg()wtBcvQpMh~`Q{+ko zh*N#*04qyB9Xar2z98i1dO_X;lY7-P+n2Mi03b)^kJkF66q1D(R{!efp9A1Rc|$ z4zF6^d_N?-dp!Qdx9XegE&8x?3CM@Z0@)YduO!WJK~f$C8cML#O!DG>G56z0tFWwP z$;&RsTr8`mJy%$PN)*-Vhqwu@TC}0W?S~>FOzm;X9akliUl;LXQ><oIutP=_^g)2l{-aZ1EVU^l&2JPiG{`Z7rIZk%$*jnXMLq7oZruN9vv9< zl7N6yCoUN76`HRYzJT_zezTEu?;BM}Ci@0`*z}hq04mNs2{fKiGhBY&QhH}OP$W84 zPxg^l=@F-O!Oj)4QQ!;HlGb+{l2=J>hHYZ z*rPL)icPzh)`k!?CFYwsOWvowCn4m*^DDqYz{~ZOQ|-``^hw6B@&*?kuIioJVN&e1 z5lg6tJ@%q`j_jl>nu%RrmGg1cdljk>o9aHnhL8g+)Vd~l<)`v7r=6S1D+S&TrQDwEsGdbBesIXed@A;_9O_h{mRbW7cBct;PYUVZ=_%CPcG zWY5U`^Q*#n=;<}@b58;`(hX~q&DmVi>Q@+DtAN2qde-A(&e1n=_{266mCjCleuG*< zx^RrvEM>oN_R;VN$^>HYb)&ft3qF2hO*jL;0{E6^{I11dE?3R^L_NQ{Sr0GdE%)~> ze@V(SEz}H))$B7>Z}E^}JDGqiL(`k%QtX*GC3s^~?)Jf5-fWb_oAN6hzpkR#t6IUa zZov4$>Ox)c4aO?XkCDS4ypvT5OMB?e$pujZPbwjJh?L#ntgete*d-GD30 z0s2MX)VAs!d$;r267$}jh50JSOsPo!{zE5T%OKeh?-%ACy)r`GRL+<>P#jb58@;~x zRQy@Z8+VC=Oj)jT=ZjB4G%mjF^UIA49t-k|jIh zV(D%;L0^vJ>y-3)-seCLr>k~(Ro>@kkz$+r8Z}=G<$M;TX8_5^_X@1FvpSkFA9une z8Id>JrEa)`Pl+uD+4PMWL>OWfcA?YvO*}IOCFa;8IM;!w2?EDyzRU9PM%{N zgbZ9cI}meeq>^_Qrh0YMlZJ|1S9ahI)%JQ^wUJi;hCVt)%i3$b&GEJ`?cfXd%H|`T zghkg^0E=j|G+cam%{S}UpVP6mnb^^jwu?Hul;`NTR42Lg(79Weba_$+yn&-)`QBsf z(`~cQ&Xp!_Zgp0as(L>e%kS<=MdI${AADH*BJ8tB`IjfBGP(o?^%@>{bPW}6S@d~! z7j{{03m1Kb{}QZo(`iP2wzi<&>iV5U_NAoI`JJ|&EQ$Hlb+OML1{jQVS8crC z{0{FAo#R{Q7eBqpjpCH!Md+Nd%#YSJklYLir5t|vL+=PAI_TR$;Sjxt4=o>@#dLTM z8TK02oK{Sb-V*M0cDBxOKq)raEr($-^FGLq4h=j+bx70l=ZK{rlhZp~N8o3>*D-Z+5L zuQos|k{>QvObD8G*<7Wdd-ycrdjk$`JSLHO&+zCmNWvw<$ZoN(*7V2O6f4J>3!529 zE20XR2K0b!u;7+NRndeow(?feSh2ryn$B3tQl(sI5M=K$H27<;+x;B=w{v<OmJmA-V5M&MW7@BnxZBnlv0N-|Kw(@XK?yGRqb}!s*b(UQ;fc*V)R}_(z^7Z>*i7 z#Ar0N#Ji!YTCmr@9)n!53q&axLkXZ&ogEQl$8EG@m}e)48+W z>H6y;epu&6U$vsu0)B8_da4;YK{|H6qXdr?d(8-cDuUNvU%g@xICXkk!>Zj0p?S~C zsOnc3W5mF1ZOLb#&~9t;e7or|=v-rjQ^xc(y58_(hS^~R6V z*fO7PqIq+}f({%QpY74Ze=j5bHPuK^EFH0RZ>iq>1aTSSa`4cb~X z0UUF6zIduL+sK0-|9qA<>c9zfIMeB9B<{Yf-dlc0%V6Y7XK|(1wfwEJZN=sJxU8?8 z@9$BkdRiW=h}QRSwYV>GAvg4bgfHz_PUOesZovHRAGj2%wp+Aul(r#5(ve8-Yq)Ro@@`akD$E)bLODAVbXkg-C3E7;afJbyJjQmtE0^y z%1&D+t)z;X0h;Dk&PI)~$`UpfX6G7lMloJv7%x)`0a6>EAeJ zpEXRF1cG%N=eDSA)}I93`s@^b6y0-;vGk=pSjdO9YTlM{|6#qxi_i?>`{@0_ivn>_ zOg-(jb0n~CoOSH$^WYa(?KKofi`*~0rX2;7@?I+gNO-L!JddmX{IMPNghWs)>>~;s z*K-16IVP$!Hh~SbxiVF!D==-Q+Qs;^BU?AAQ9VJ8FTu%dREC ze5y*%f~wge$z64_$r)RBt6%N;^n)Hi#y{T~J*|ZFn!gu#?jh{C%x9QoitVNogIiaP zYL#_dN!$?ptyzbokDEgss-xaYk+P61IyyVdw<6KG&-)*_v4kZNm5B!pl^r4UGOg#*?gXdUX9_8vz(J%nsU$Sp2Jpaspl74Lk4X_Fig+Jc(g1iSHua~k zhf4p*^d3|2+;K6b?X*G#9mt^rK3+)djPV=zyU+D<+%M&D*@WmDd_J+8!5L{-KZG7+ zL`fucjj6(v*$*?cbfl$UP-D<*(=2#l;XzBE!Lx(583Mkj!kZyho8BRtj%T(fj=8^y zPLnR=B01=mx7azmK58EL0u)Sjw#%3205zw?YZ-=KpA>Q`?E*Afj$Am0EGo@2J#Xx4 zf3DokuQFVrY4_|w)kU}5=cFey4~F!GJrlxIb*|$D&!S+7?+xJ(QqK;IM}~^G+yZkk zH(?3aedqXDj9cvbMK34)P;3+S6~rY;<)_1BBo4Jj2HaqpL3e&Urn?vDyDSxin94Ss zAvG4s3A&nU9=M(?!j$D87k>mFAD!xOrk^>Td3;LeB*zZZ(B67{%BOK1GUHT8VFyefA#qje*< zb6Zlnv*q8eer0;aGIVFHXXRGYU=Ky)OwOSiN%O;XxyPK^HKqI?@CZ2|gx_V!Gi4_xC$qp+>n6 z>>*bk>W*gfl%Y*1Gwj>8Q=VpM9L8oRsN|3ayk1F1TF#cB%SpzKZg6IWmuO~E()e>p5G`pR`FzmEoF{CGZbcxGb`*rJw^94O`Uw0 zrNT|p6s(_P+eDS$4RwmkEwdU&Nb0Kv+Ih9Vr$4Lfd@R4`YB|PVdfTRi{s5lPmM=xi zj&hq@3yT_TJ~v=XQAQK2w;1XsL%-)zII5ZJY9fZ6z4%9bx#U2(;pNBG{4;Y$gR~mr zOI#Z^hdLj0FYSCf?V3dUK$1^y$%LV^?mr0eYMqC5hXqSvZHLIOtMm+Z`0?uQ9Irt( zKXxp-iZNLVPeZm3-)ww|DZcb7FDEj&8OCh_%+Oz9`;N0NZ>HRdRh{j<l>Aj?3xf8E5m zNF#X^nsEwovgM2Fmz()x*=XgbtDV*jAC-l(cG9~{Prtumhj$acY7~ijHgU+>H#rPC zW2`mt68~h1CG|!F9?tK4L61 zp`vG4@_n$x^|WsWpq9QOp%6a%Iiwn&`-YhwiZf1@0J2MT4@cjBY5hbj=mVv*-C8A=L06(ee9 zo*bfePG=%2Ri7_fA{P_!r0}H#Gwb=qR~sSr#@j;|#J(mdk6sq^EN@WvtO%4W$C7rW zzQZdOY$owF7@bLLzoX; z5=oQYHYHMrmu`cWb>~mF_nU>nEdv z*xSirRNmkZ=81d#Iw~wTLoLjw^;22Nc(-R!jeEmyw;DDOe5@-q2S;7ywxHLu%Z8o; zOznU9X!2dt{K&fx<-^w~>uxtWF|u&R@5mP}%hqGV(aYwyV^1YD`JFuU!rV-vF!2@F zN_&AUjUhYYm1)z?Dvg)xoMxcKF-8LX8I9(<`r;Y994aMqy8G<-0qb$v1ACd+;mBS9 z#{jBPzM{LBqXd`KCQlaAP!Y`c6)Rg~PdC-|TFc8jP&so6I5+jk-O)+7uk6$*H|y<9 z=G(yyJ?+=Y7mfy22EPAg@}X48bnxt#4R=Ar)JCNFhGvRtYRk~UgAX64FLpd2=Lag1 zWV%$#(Mgx<&SKoKKgCjQ`Zfosb zM&78^eA;eViSc|Jl*Amg%8nO_AKY@%q|zVD_W>0Ja2l{!*_;JD(kS=m82fyA&{Cu4 z2oR8WtuoNB|7mWCPLjQcSkuDBP_MP~>BmEh=em+Y%4|Dc5wi$Rt`WD>fyuYW5)!Iv zPR)s_g+PE>tb#rP2X%Ad08om%(T~fSx5@F8IY3;NUyOer=iPh$cb)FvExUNhvOOs& zWH{5mJU3d=V49qkn!e6gf9u96xOv8`zMIBSYP#8_=r+<-vG;~^?5u7p0YrJ}7tRg^ zDqaT9`5YYz3O`lXBhRI)9B**s^Y_Iit%XR2OM(N2PjyZ|9XP(Ee70}q zl4es^)L4@eD4EvXF8Q=7%;ntf&eOLC+)?ADF>b2L&(P7&f0=6vGVnXeONIl`S3u6V zL(bP$H=G1b!A6dcyW}0PLX{?N2T%3-b)P68F?{4hUKzF5p5R27q~f~OOV{PodNeLE zPpi2_{0L5C#F*HRY#*GZbPh4)0{F@}YYuHcqe{$+N>VN#$xTW~Ep@qM&#>Tx6}vm+ zMLsmp(Qa}I;;GI=cPug`eZ)MTYF_Hw-!6UET`)LYJtm>)axhGZ27!3qWFCm2rp1LZ zcmlnzG_VSKW-<@7-;c+Q*ENDijiEwOdEy(G_5<;kwnzO2V2D@>LwDVrW?qyJu`tIl3ko2N6L8p#u=Er|}e?qz{?ap`Odz8oq zA72D_m8SBd4_0McO&%-twkeTfI*}AIDaAgJ;yJQcP`s*tcJaK27{}6%?3@-aHbn<^ zZBNuJN2;{sV_K@U@Od2nv)RVmx&^5^B+)AEGh;_8B7Gcl%O{RHOkC&ntxQiB4!W%> zDjTsb)*1I&ohjt_^P#U^veD}@od#>V681&6v#naIbbk(r>(hp5CUVZ<*5|`|@57ijzV>-+dgk8Utn+^PLHWc4TLVevOmFrv zYnIOrK$koRrZI8fTsOE1?AB*-v7(S4&~R3-24@qp+Tk#MEpKb&H4UgusR2fk}dm0qU?V9~!8x zNoZ(%5?=L!nXg1f_-L5Z!tF^LFO;+=ZKScATE`&Eu8s;cp~W`B@E{Se)l8${9tu!h zh!XRySpMvZ!Y;v>>_<@-3H20ZX8WYoRRjn5%FJZw^f2>hVi&c}0EY%0$EeYQh_}WR zkxC7!wrv96%fbyk9R=0GKX2CDg#W&Y`5ah%^Pd=EM8CyryzH%6rjkb1%#G&op&i5# z+hLgQWF9z#UIe9ZS;<~bL_=|)AFYZJ6oqIX+6Eo3W{_P#DfphVk1bjPC9E#e>?c7n zcVs0$bg-vQUhl|FbM&Se7KU|h_fkGHC{F>~H5gH`x*V!dxg;JIpF|RiGFEqut88V` z%f7xPyKb7Fc{R~ZqyXsim3rqHmMY1Qh~x2uO_z>S?yAp_Rx zTSf_=!Lk!EpeEAVLGlHtFe-d>ErWPU^AV=m2OCVEBS{9ziAn-C0;ZD)$H@{@3wm;bTH6Ro90SY|Tv}N6te8ZWK>XlN zs@s~JNYh&|Thb0j0Q`~G*JxI0jO9mUw?StjPH;?~>TB5rYkj-d#QOF+tNkO{cGk5# zu=Y2PrUW9C%qoQiO@ngWZ3$Y%ue)p=6!<)^Db_T`OLvwvX56K*YC4l##~uONlP0D2 zcF#lEfQhgn5Px->JiO6(+6$~U5e`eD{SrK#?;U$-nlSg6G>v)MiKiOg-n zDlvr206o6iB&#E1E0hGP=7uNXunOwDyU4b(6r6NZ9x+TExDKP7zxlDL@%Va+QqfdB)!6_SKW2m#fX3m`j zrLg{@({G#WuAb4Ehz@RZy2=|B93>fGH(B|#hc8NUBXL0IbQFE_(J0Xti=!GbMcgOX z#f1Rt;_LtH(jLXza<98tOzvOb5-U^;rUNj^xu#1zOy#Bt)?JQC>Oh~^Oc;v_B|IT6 zTwTAW8Kvo?m)!|T98QWM{B{+w`sz{nYi#t(=d733c~Gb|qo6u(StYYe(b^6Z` zSg_Qoqhe`yqg8mT2iGi$9fbvdwDMM#aS>nLqD(i^ckYA_J;Fbm?YyP2#5pL+byL1Y zh;*$XoVO|9ds=g}r+~4S)h;<^{U<>t@hC&m!VozD)heX6(cKYC3 zvC7hftVW(f#4Sh^UeX+tvv+jRs-WTO*6%>w^dH6*$q#R+7x0LG)7&4lDr&g1HCTwS zgjC>*EI=Rj{xwAT$mGG&CsBVK!>3wv#y7;dK+wABkXesh#~A{;xeh8$FXT6v-2(b5 zjUEu+>{4K+_&+SBpgBrw>)$mdTY?s-f79GZn?R&~Uv#V&`FBkuUeFx#dXITfxu8L7 zi@nh27UW+;*#&>})gW&U3z_ss7SQVQ5^^3ot0%6y1GPKb!^IDZnA?w7z?2Ig&E3RfZ#QVX% zJ4Xx6?hjD^+Yl(fZ_wW|Ec7vjq~J5mF}ZtUgTDg-?0xkYvIlgpatl}vMp z<)6EKXkyx~3Opn|5fm3Z{`c;~p$`*5MZx2EyQ;r)y-EgtE?r(F|M#*y5mXmEzG7Du zI`sFhE_i5^F;zD@_`iz%wQgmzM6G_&Xtnn5T&g^Bv9NLW*_7Qgo||%QYynaX02zof za%XB_#|!AcT^Bx1En12Yd9nqO^C)o zJ3%{26OgPHQFe$Bl&7CI@(A#eG8S`Sn18q1P zR)$+C4`l?ppi$Rl!gS3Yr+A2c4mR>UC+<|x^Lm^$9V zD!E;}ijwlxhPgQ0MPI*(<(8)Z)@Bg2!HV9^s3uffFVT^Fcp{=|T6fKf=tou?i}>sP zy!SGY)#fBEYn{;Sm)WSlePUGocyd>(sf7`@0}`s1 z%H5j^=i9`bBrduEdB6u72us6_e8aT6VNW(}?~(F|sK^dZPICLOT{vn%9Tg?Z+Muak zI=1bDUEQR~5rVx?LZB}wIl>uSSYEkZ*n?mPvdENgXF@QueQfFuM!1?8b8>wjXw1>o z9uX3G$hOlOz@ZUt+-|J8X|9gzm&J+;@4Z;gU*jJWTwf;iYmSoE4v554*o5hWY&AG3 zw8%wHP70j(Bsy{O3w5NCD^Z0XG1xCLn!gtBlpSZ~Gw(^$38zqP3}SFErqglktrK(X z?V33DwheSf%tn3fscf%_W^i_hPdpql0SH-D?LaLrM3?_h+vqF0C|Q~6~v zG;w)jrPzN`Av{L2^^vmsC0(zqClL~)42!CK;Ts1n+{0ezD32yB3w zvJL0I&5h6IzkQ+voi2w)9Yr1hot(qDNQ)Igx&91^kIZ4`oDD z5ZpUG8A+_uR9^}wv%Ndo0vx1{MtV$dlNp~)6;h!KJ%pj=+6S)04k8zseCJs1Dn*>A4^C`^bE4!uBD$pYqY;I87<2J_4K_{C29D^hKo z`&GZ)Ar^rvUr$;vZoIi3UL^YVdbrlx@PH*?2lb}`mD7fnX!Oqez0@I2woNORh8&pR zWFb|O(Q34zXFHUH;6&0pEvv0{=ESUZJeyLdsS$!G8!Yy)zWThZ@SPXgN069p#=QD) zpo9hwQO{Nli;!Z#-93@DQB6@>!g!Hz+W<)o5ioKyaFYIwGeC17p~Me#zO{H`ym2jj zhslTy={32vX2l!sBPGllRyz!7Ov69s;D(Y1*L)AJV~5pakV2;n~1S zBb`fE0;*s!%j1yE@`*>qJ(_I3YsU08h8QXFA2M>V7uE1(5+pU zYHas<)f*fcUgQ!6dJh@z1gi<*lNY_?BQr)Mcchf1EP<3!ie0=%1SL|a0u zIEx?j4ffTHs934tT>3)N1MKHAQ&s-IuE;0i+eVA2w9hSDN%2E8{~_ACFQuhuYEPF+ zFCWeKW;Hc@Y9m@>YNH{GoeB6iA2-SH{{fPxx=6 zStk6AYBp;cIbUi5ZvU8YCeb-1E7He7fj|wfV+5SM$3%5@I7@gI4!$`=tqFhMsA~W^ z95z;@hO7;JEkX=Hh)DM`iv;vx`$Fhl$iwql-Z7$ICbA)2h@31XtYM2+LUTh8c4o~iq*0@Vth0AaeJ-Jisl zLcnxW?>0FynI*|m!oKnt$>ftDB*K4NfiOY9t3~!9I2Fkglf`u5&EJ-be?l+v?QL8VgaId|WdE*hXuY>6^l?nX#=lW>vH9OmY#=(y8_qL9v=|X9}wR3(MLu z&A6Dg!y;`?U?JnlzcTK>6-+#uSl4ujcf*d@KbFwLrOzf__)vAP6aB+svm z8#DEja~pn%_i$CamicEdg7)O#l62{XY02=*G{u2AE{8jGuc9~ld*%jiw0yEjkLlG^22?*v#@7ZGG+CdsvD1o?WuhvG@WW8tU;}3|#dPu#Sz#h> zXUd8I4Lg8}1$FpLJ|K%}KIWXN+VeR~egON|x(7Xv7`Uy(-9$@hk>FZ#u+8gk(aO0^#JOe*FNwMwUb^=k}Diij&2xs!z`8iY!54wmNFpQe+VY=Li?)- zkquFRO=^E+|wu-g5L*yhHgZZe6RMv?Ecr&aG)?$pcET*fLM1G+r z6VK~;yp^TGFYJCa$yNm2 z44T=y(k{+|_aY&HlG9jTRz>XfoXjRZ;nh5jMiKPK0CjfrcxgJx#qN}bqaUF^YEWZO z$r*inz*VvD5y;dy#?&a$st(ZcL)5)tVG_*Xg;XMgf(KQmvTNMmFfoG2O5XumYP^fR@3 zgf7X0(fIP5GtzR+>QMM^a)a#8VqmxT_r07jx}Rap^zQx&7aF9cZbQ%6A+vq?onPp0 z-hNs?fuH5HU#Pcoq;I4{+CNk7$C;iFU1d0l3-~nwdU@`rH%XTl_P2>p;ovO8g`dZR z#o4vd!*xln55NCDXW2EV&U*Z3jLvEbV|eJns^;8zy9j{k$bA~$^j5B?@%yhQF<9wF zXNEaVF76dYi?FHe#x}O)bVo88?4kIGD5O^GGMc8WiK#)8NUrb#pON(ukVoc4^&}Q4HJB}sO+xy{cp@0u? zwr@Oo5<4nRa9$GcxjCkpfNq;;{)7yfZ+d!XiYOUd zOWH1IVLH)K!%(?<0)0Xk*()O6JzGoBC;u5?&B<+B&<5;YME8`}Q7#xtebQ?jT*b^a-)vvD zPiy~m?@jvN3Vk!SX=F-i@n(wl^&01PtRmkLb%*PqcO1ZXV<)=i9xx zq;k`41{xUE@-52COxX=D!df&_5nkl0WFNiCzOea&E-|PHmAAJ z(U!w$sLmV&Hj=p9ImI3hNJ2e1ibQMz!*@oZjoZdIfb3zppVUe{Xqn3$%NWPd zs%7}7rsbaf1-lj5X0ZrhpRM$7X$vMW&^jjVEt>8*#=Amp3OwBxP2}EOFi=MTV|_e zHAmU#txj++=HIG)^B`y+svY+z{Ie)Fp!qMU!ZD9Axh(c0upt6MCx{_ZH9T17`u@6Q zEjZhcq%f+L)%e=T;g&ezAshY>^prv&y|AzQe8~y-z&_^Ugq&(|I`Y?^9`tlL{Dv(g zy9gby6;h&!9>mq`sawJSTVS>(`YSGEPu&=fTi8&CWapzdHbee9VBBVn9{hi9wrXy} z+oOkYYt$Jj}KT@eQD>qm;LLbvWC?3V{UkPj2A5NmiP`}+2x zp@&;{5cZ3M9`z4DSRuad2C1U@o(-w2tLob0Iv1&{&s0%HxS<8IY8Fh68dX3SFi^t3 z_THd(M&beM(_Vy2u9@1p(C&wU=*kgIwP2%(sMg;2&wB8zA$r(hzWrn#>6 zD4lgI(zw-FfYxn0X*OTpK|gqP6}<`%7u{h=g~(9{5si`b+BxSiO-iI)6wIA8wMMmJ zG>(3<=Rp4KuwTKm`l*G`Pv$TEKm^+8nGnx}$rjl3*?}gny$m&;Hr|Xub5nm#xF^Xuh9V?Wz5sps{>}I4~!a zE+Nt1?Q1B2)Ty#gqSYKj>ZECyW;TGI);;E{6K(FS_ow+^jDdi8u9nUpHpQ|U127AR zDjG{TkQIIp;%-a}W`rN^pyN+a%@B%3%VJDBcDw(YI`p2Hh|0w{cm*v0Y&=7L3ziyF zE&)(=#_S2o#42La-;w16TVmo5T(cx03w(}F=&(v)Y5SPf=3s0nA!*H+P!HB<;G}WW z*nAoV*C@n;(ZU2U*GbUti1U zUv)_1-;_wgC{Z}NkmM~|T(thPd`nEiDal;#zV8{LTT)vY}Z zCGpY;Mk(#pZ%xdKKbx2Zr((SxV;Y$3X9lfCV1Bf%7QyK%pK#+gjkVFLM$j-+0NwtlM>59>ITt|6u_!7swqr^@92RMZG+&3+$%uPj5v2 z3H|>TiLHyL{@L>4^m{ga7rhJGru@m>PtBuq{Y760z8}+@y?#O2wB}iNg1PrkD1EGR z=DL`&Ld~pP$v$0bj=*`Wrnll70u;2tw(i2!4{Sg+FMfy+*E0&2-SO?)d z(MpOgg(t=DZ+S^)6jBUTQ>knA|J7=u3T3RqDz9mU9Y*ndbnzfd@`huYV%F;HDI!n+ z>=$4wU`mu|M)p~n7Sa>}8tiYcqfgFt9B8-i8t0$|X|X#0yv3O(?yoE>2n+H%@{?of zsJ5g0j^Ca%JZ(|A?|}noz2O<2u#>=us>z?dC;z7JmK&_fxqqxwZbuz*~AOM<~47-h5v;9U?c>Bzg53&7gky+@Y79D zyFX@vP5cx3gOSKm!;hKZ5>69V4t zhVeAQ7eutexkc}@z>vnTlf)jECGiWSiqJpBU9 zW1lcISpgPqV8tY?HUZm#M*^tnQL7b@e@u-%DhPwc564}QRX-_b%ENiF9yih?@Bqug_EtCi$AEX|GabLc=bG$aG zAM$8LG!T$OIy|mBulb({y$uB9kIF3VW^G z3((C_8yWjDmv|}o)1S~Ei-hXfm#IXK;K1s)EyBVp^S-(vxrYUvM|$z1u5gtT^!)Ef6gB38Hp;jc-D#>M9~{}Z8< zKzJ_c?6~-Xrv8q8t?>XPdF4M6(%F%yHU0vLT`>!Uzaept=g({YCqiEX;qOQn$MY97 z4R_pYjlV)(t^7wq+B^KU=zd7_ieex z0+ag#)`&Ufl+V#XHTw8TwBX~8o(!K*Ep^w47nO)+k26@>mE+)3-kh)xwB$wr)|lW{ zJz8Y!BHXIm})J(lLwMsR~yiEa~+S&p!(&5!+FRiEhH`cYxkYD5t!T@IMs z3ZTRxfa?6XKS!WY{maD z@1#O%0sh}LY51h~)PL7>(2iXEIeEnf0lNlcV3*Qurz8J(w86?PNDN-h9Fw!hF&JFX zpuHtrxcWO#VT0LLR^h5SBp1Q%EZQcOZ?z zRTD@OKGYoZc28t*r=UT1>vtfe@fDGilFXVRe1^g-NK(w|~<$-hvda znnB=rk~t=SPjhhReZ%iSh&|}wPEiABi&D611wr9S7MOnx0d7%#!LyhHU+*0p}d^h{%a`49GJUzdXV!yRBubW5MWAqivJzR%>rh* z^=}$r@t)%#XA$)FR!bqkl2VF~vG_g6gz^}#YYu#~cYH9Z0D5gpv=Hz+P$ATO>un*x zf>MCjwE!0GnG7cVYpBB<_-;>rFzG$?=9W_-z>JcH{~ZWh2(Y45<2x*XC3}8@NkvfG zt>1x;3>p_euWoS_!f#O?;l<5?IeWhY<>JLHfbaM82aOA%rduh6aC6Gz~6yPDDikVbKu)O{y}sB^!k=! zA^dlsLa60dc_G|_QjB-A02b|857JPHE9$ifq$X!+g=5$D&O}^CHaEghkT3S^XG0^2 z%(GWsn!P;zC|&=C@*QjQx|!RdkuD)Ad|m8E4(Ti2cVoS%bz;O6>4stKi+b*>nv4`& z{Xguzd03KPxcA#^WoEOPsSTEyrj_$ZW@csTuR%>sDND&5$PodR(#&$qOw9pFO)V!% z98y41b40-*QBy%v1Vcpu2L$2exA(jEyU*UIbAErk?{&@}oBO)%`~G|{;Nn{FtYC;4>$Ljg;jQZ=q!hc8n1+8vr-iH6j z@R~(e4=^SAR-6}KF9!|121(p$Nc(7oMM#IH;cr&!q%_Bp|0c|-{unT|*6os3o?K5H z(~@@#wj2NQkLV6NhkxgGU8_*8FK)V-_a{v6wVp2E-Gr&(-@0AXD)=MDyIt1GPwycz zJ$UC~^7ua?SY7<2XSjowj31wH@*`^R<@%&zC;f(w8hbdVDOBn`^6mclzRKJ?in66l z##tgf_WkkmW7Q4se9Gmr1ZRaRiO~D=L)BI96w1jm8|SP_Juit+TIJ-8p?H>cIcHVr zdHYf%f~9vHzY#-?&{xe{k$o zpHAgngZ&9hnD)HWu>JU0H%oM$W6vMa23_dbS2EqtdkoXXXS)3fXLdRWY0o)Jv(kGRN# z!A$WvZg%LRfj-vspAh_BzgvMR!`lMeh<`@C@JBq3Po`c0f6(t$m`>nbhW!b%m^QqV zu)X+K)Jxzz{hmMKb#S46U)FRN&l9GN&!GMZ55T1H(bS9J+?s9|<{91}vDam~jOPGT z$EQ-SfeUK>gbCEk;QX4NVWuxn52k?s6VCENV8(bP)fQY-(>FZ*C!`_8qi83;l+&k_)f50_^e`?{+%`PhECUsjekMnk~Zv7+X^KPu33V&;M zO}QYc*J}EYn4i?s%6z~(w|X!<-t4mSpD>P(>LLbYm1+nd^8Y2TI7$|hr#${Vyg_>y z+A0?%^|ek<@cdT|!n4i(gj%3g!M~i@mDR)ng$&8CsSt!B^GyCUaFV>UIqJP#w<>cl zZ`i;nh`@@Hb{xQ6KDjRi{&Uf5e_5<}IGu>b~$;GfPyS-JdYi%m!6x*H<*% z$Mag%3I7vn^W;}|gugJeK;@FVLCim50l616jo~@1YJ{hmS)=}hhr<)itWf#n9tJaz zXSn)DoR%zmT9vGSGP6S!NmfMt0Y&}S5oSbRsHa0tSwQ;88RLgVGaa1glx<~uomDGs zA0fMqa)U3jo>Q)tr8uir**-@8F!~gHll4I&+;T3ewDm&v8WjXzW4)!Q{Vi14dLt=D zWx>v@N{UxmpF|)%LiQNt2VZ8zQ{>CEok5inq2H(^*nw3_aVo<&gQ`f6B|=fKEi0R1 zSQhBas3dtI`y@hx9dR?@jGWNt?mWi7f!wkgpzy!IvMkP7u1fQ<>yNsR!8cfW6w5Me z=k!WVFW26>55ZSiZzw1J7OFJ8T`6^?!A`6SibokyB9uRJ?WxNPwq(Up_Lr$UJ61}B z{<`8|dsZ>UzO2OAv8w#BL?{flVP#Tu%evDrFB!W#@ma~49-{a9Ab)SN7u?i)Ei*rq-pVw$_T|uxlD~)pI zZ=uT1dz4aF7VN^Rrudc(ON6;cqdj%`!B(t9iej0uGo(@?^w*UHJF?0tu4PzfNY&h9 ziBJ@5$I79YmcgBuE9bmM`y>L8RZj^o6F4td&3TUw)S)H9Gs?y?DQDSArAMaSu=k4> zB!Wd*jI(T&(qq#fu#by>v2rDXm2*<1l9y>O?8D*}Rx;)I-$Ip=wF*)kmdv(-BMXNz|D zPewUiX75~5>EKn?>s(NE%{x^h^gEYSIe3>*oXe`5y{jmXC4zS)CnC1*{DYu;My#7P- zUyl!4Z#)H7w&={NqIj1LIHRlFBtoCFowsS(VKylzwo2b}8h^ADWLT}94mtnGj| z^wq{f4U}e>3Q_rV*jXZ?Lde&k9o5&+0@d~~^xM1Y$p@6dsp87{R~m>=zI&RubD7WJ zSZ!Bs3&=_mM~8vNX`XydWwAAXt}#tRJ)C@+RtDqWOk=B=py+UE0E#Y{6iA~wIU6}q z(Wov?5m$qch(>jAf}y(NoD&0+i$X_d4pInD8)-unoX`&sv!vr>F2S=L^>L9!(6bqw;GIXtW^uB8qcS#7#{lHX5E)d*Y zC8S+!4u-0O?MKoebkpf&!Y_Z(La{U_WXT(WKh<7OW?6b;fNa(fnbGz4SMm@bi-=?*5gxn!EBT54>u1)S>aM-t2 z!$kf=YbF?40jfAOoL<{Vewfh#ZUYmo`2(f66I@i<01a7O>wlM{&(NXurY;2H(0M?*he$-EA`IaO5x=Xx@TP-Y&Zn>0zOGCBnYAGh zP8_f#n$aE-V8{=>QxJEjCWMaue?NBt!{M7?Qrk);&uVpx7$R!H`5sz?Y`lrMsAdwv z?F>0WCbwx#X1KyU?MFHZE+GW6!=zZ5Vyw;)%c_$*e5C#*zA)hetZpZZ5qF?-Z?GOQ zGjCl3ehehF%T2~{PVg(jEbC7LiJY<;S@b-z7GHQm8Mwq}m)+^)2-N*N_#2f8RljaDyQl*ye_cyc?jndgv<`%yCTi_B zy|v)bY*!lkjxOaGrbU$HuVe@(>`|IHM1SV~{%GZ{0BmWpxOhIrN%T>u&%txTIjwZN zHoN`B7$42B^F+NNO-MVCqx<(~=JEZmB_+Y7#YV(>lQ_RA;H??;IAag6NS9A5$)ex$ z+poO9Cr<%^!dju=tt$y|E95v?$nJEl@}z?qC?Fp(=}6xOy_xf-h%OIx5G4v-`EbrM zUAYbL7NH`(BYGvg#RqZ7bYL6dEieU`&Y=F|xj zc_nU87izNPz=8tJUdz&t^Y4ht!fr*_MF2&T&W68{FX=IAHKd_w=+~ANchWk}^Am+M zNB)-D8-8!H=m%=;DN|w!hhV5rG;-2Xc$n|=CZhLW&|$i$e8kRGq|fl2W|WQC-Ka(7 zaWsd{z#pP#Qs55>BkEFAy;Lcf)`E-s_0^y869e zwcN~q@m0xxOaG@@f*`d=Z2EeI{p>qJRz(CqvOwGT%HxWLg}eM7;_EvvzMoe~JNjkE z|BZywgxQU6bgHkJpKz+Tt0&BBJ4IZG_&k3-4R8ja0muY3yEuvZW5EYHDufQ>rcM#q zc?&1a135&_#c{p{dY@Siz5n8kw1Mr-PHyQmHKBW&{&un_v=215(t(YJl&_Y&(V9Z3 z@dK!*GhU~darYahgNCB-s=>9zq4ZP}BI2kVQH)JOIEiHW>KqKmk&bRBx08uLGUgY9 z1GH{#rIU$vZ6JCe2g;Y`$k7QYsJCJ_krZEinu0{;{!d)M$}l7MRY{UVuiWh z6rpCnO@&i+o5Rq_VY(*YI^dMpwfJBf;TS+2VK2%QW(#q`VE*QRJwZ#RyIbkvw_@x1 zY;jg`sAYYoIIAr5-%i#vjy@gSu0`Bts8%%TI9ZvUj0vzM5ou|v98`8}3g@lK8FCwj zlPy%_V>!!{Y$D(_;*|J`=!xa2x!E&FlS4J&= zYu9{+2uzyuxa#==pcWn5=Q70DYpV1%j>0iu!> zUaeafnw>fTeU}(40L-)M3vQp@cIM_=(+>x4r+rC69($;<|Hku~hY81ydZ6U3wpuHaslWMaRn$j~%W`!+3GZa=szyDbv8`T0+rq51p;Eq}AEN3?!-tdZ7> z32oQNF(*EGPCD{e-lezmrJE8@6mBuUI&v*>FYN8jTiZRo$ktlBE8n)1Xb3BWr(Mo% z&6#Kq{Fl37m4Agvv;k#gY<0d5&DI@BYNT(sGQdr63V-=Q+@WRL3S zY!#Md5UuH(G_@9{JR)$NF^(qiW>E05?xT%)7IdyQUxII>t>$ww`gV(HU@f?9u?Qs_f?K zazneqS-3o_U6tq1dXI<4ICZ0;id5EWw#JsC@#*m(QGRrZ)ojiArv%bgycEk!w&XAwFdA{ptK$EiJ!wFp4t9Q;rEsn5*M2p8%@pLqm`9cGkg&SYy5K;MC+C} zE*|_SK4K!(B=4gYGiLOha`efIF|+4sxtth|&%4$8bAS(Yi@KNzqr0T72FFK|&eD>X z9(`clSV`#hek<%*O=N5J zn|Z_a)FRHw%$`feYZ;JV+JVUD11j*dPNNSOZ-weK5A6%R^&`xd#t5?2C4cgqk4B0v ziqfg+UeqD4AUkfv^%&hI4baDoX=K)?Rt-#MfnQqP&^%~DHzv(64B5m!hUN}INNtusjJCLNtw}Ogqq{? zx)`$?!s_#;)fa(8*R9}OR;YHIeo83Y0+($WbmFUW!>CJxkx%k+;TV=$ng-lPg&(uOAonJ+a0}c}=D7 zRCV<;Qk<^GYOlP#Z!5oaDoRV9qdiZ24~SaY;RgCf{+uMw1BJ%u8PnqX4zNcK(BxcZ zCmasdWK8I}`ApapiZUK+FLwOUk4w~8ankW=1z~^AhK=k5#|+JU);I2atSSzvqk1{k zr;5vdvUw|RqsvbqJ$NEt^KOVS&DUyaFv&FJL6YHIKL|a74;z$%DBCRw+y;{ndI>{1 z9$bbLA282Yhua7{Jjp+rqkNuh@pvb9`s~c%uz)e8hQ*gTR$eBtjW>KApQwZn|^Y4S$oUqO^1!%)Uu6xTIi=bYi)h;vE6F>&4$ zj?1klkg^8Q)HtB4ICdEgyZdc95+pb2HZR;j*5v%ki;!dA?F&n$SR1%jc&E<`Y`VZ9 zOnpqP#&X4IeS9n3TAZN1#EV^3p9*PSvtM?k1MS6HLNT4M8$9r+{xVT_aUk1uqKl0a zkBWqT=<>cGq$*-eEM+Htx~Q6i_!Yd7Bt!O_A3s^9?@H4dMl{uW6xPgz^+ph}TxBz( z?IO+$*hHk4HS8JaLPN~V0W!=_ebf+bznEKo%xr7)@#arQ-g<}bs#8z8B6G1eE7sMV zIalAvFfC~Qa^!7mcn;T`Nj)_#sy}MZ6vZA>-AbQ5p}9F%%2_H`szlmA)_(6m)L&-M z2*Gou7vd)YyE@oV(I<0e@`eqR;~OLYdKTsm+r?2hb^9;!Mc2sge9O(*t-oJ=IKm6H z_SfEOx?Aq~_7e3{T8eb!U&$fAF6@F8XW!ZVJSSwS5|cL(`PaGd95toqIbG^c)Dl7d ztJcgL0YSS?H^=nO6Wi1_mdvD`}bg_;g+Q zR>5YR+w;Xd)-|5Pf!(0UzxIo6H?vRtbmMe_k=^Rnk$(l>>0kWVFmQmu6+*J1URvM5h`lQ|E8VwkwW<2~ zRq~`RSN(L_MOSIJs;_}%cGjRX`cke_F!yoX zEtlF^rM;%laZ9V!MSK}I$P?aJpze}XuKw(|tW|uK z_EvmZy*hIA9>KyIvI?KCmMT@k!5q=c%rM!a<;kUecpl4=E#Oe?_8BbcrBHJg&*huV zuQF+lzQBXZ^Ya^n*LX~{c%9+KyOL^27qEui*-{ISUPEPmv5sgTzRul+Jum5ENiTlu z1_5^+@*FVxF1Gjycq=%X(9{L`iW}#}|E0ZQIhkbDsOU9!e75nF&}v-w8tIWzqJyzB z_2AEzZtWM!%Fx!9pW6s77a#a5SPvNFB;4YjJEIIo0Fw2U(ih5A-z{%~qI$WXkZW(J zUai`G_s?5qXfsltAU`ZWG*u;Lx?(_YimbDf@mh^Se<&)QTQDvEtLqGev|McTn^_a7}V)d}XStbNagC%1J~r3XR{ z$dJ~sItKT_Gc!rSsptVm4&lXut`?y%{Ag!1>^oe4qAO&#)`9Vy3)UN`+d@x<*5B!J z50@MMa>C^9#pOM#Y4eXhnOS?e6ffW8-sy-cFwnS#xh^`tLZoX9APnQ_1{wnoYQvp& z!Z**V&)>=QJb_gAaw-s?77#KM`=2-xt$%3m79GNVZdudExq8b{IG{7^H@tac)wj=6 zXyINusvbP;Y_1KJYh!lH-=;u!|A0=YS7ia$pvld1EIXIx zN%eX0W%Jwt<9d6lo=Htl)+fkGYQ_`Hq(={4kv%(w-`KK~9P+Ng77sBJIMBddY-4i0 zK8oGto^FPv&pBYEmXwTZ(-Xs2XH&4W2+xU?jcCN!=z49FQ{p3?Q80nxZlmYo`!HD| z`HO{N(BWr@OQSa!R`-QW(Lq|`xc^~_ztHZR;d-`;qAJw?Ch01>UyTodMmW!UnMO>p z3w3zwWz$HU^w(_P}7>6CGz7?cpLV z0i;U_n9qk$-3G))XAmy|i(Et~(@q!B8@_QsL5KDf+N3o46wxF=>=oHyp?lGY60trQ z%*WBgSCiP0ghy-EXo9~m3sAElXk7%fMm{-fpS`Uy_o%tSh~`#C$MMxzmibEg33G!Q z7B;{6>5(wI<|ElwRD8f(*N(>J;Qhu?^J|OW3yx&#n{5Srw#$}nlx+-e3$CYZxNH_G ztF^U}uO8Rq?zn3S0a@8SxH&fVab5xQXtvzDGkZ1*HxzyEI&$|c>Rax6T;y5l-#7lU zH4oqJCes+5Ef?U{20hA%KDl|^%369vDSvU{$}{o=%*5>O7}r2CX+p56v@u{ii~AwR zZfYwT6$Dg4fBSMJxFP@8@3{HgwoT7KyYZ+)s)f=@CaEf8X2BQcm(&j0ac8_D%#a#m z0@vM|rwJd0d7QX$*Bzec-ZhK1Hz7|`_54l zt!DB~NKT*gwQ#TOwUgV@rz|pBFUcJx#B(do5;9Ivgx=$q+Vv^G z|Nc~J*7lLpeU2GR9R?11eI1`qXPJA19p7-@@mS~i4a-}(31b$U2**}-Jp*srxjQUj z%=|g@c0p`lGE? zuu(C$Xp67z56ZW)Ei;)p{Q-*Y=~vwP9bB@&!9RZFV#<|*{mU6RCFJ5_F`2gItNxf* zl%`lANN?=^#t5D7Uyi!U+}FK5{F-uV`NmxSJ^egPvRi_e@3ER~z^q2^SZi%iS7&}k z-PBio@TyqeK)7l~PqCHwPKXP28{UqLQGv}f+i(F*9MtMFphwh~n| zym)$ZzFa;23F`!5pkLe~Akk`~@C(0Z>-4j!VYB%V;K=IFxcaY%_j4Ns-AT(4(k}!H zc$C>1oi|WK_$hk4IvgXKmtyKZEnGjPv#w>`$d)$cM{-*_bSq}|k>-JHw64foXCn9_}fV8tQAjiwa#UAW#*{7II! zd{H}<*j_JH$Q0K)h3^Cvi-7aX(kS36b>&TqSLpR9W0@8mT+u@KA=kc6SRFpcb~uOz z=-r)H ze3J1XY3d`&0unFZJeY7$JAMIq(86Lz=|OH%gWBaJ$%*SpY{Sts{V!oJqvfQv4!CLH z?u16z#XNxSE`gLTpQDJr_bOUJ4k!5IUTTYLe^2$A$&qX8(Tv~PjtMmCIP?jlN1u#= z=5%p=>PPS1QziUjI2s^)#r4%7U|;nvR5VZPJL0IObhz>vo~A}6Sh_3dD0N|_nWcxvEuhJZ|#DyjFuqrS0n3q)m6Wk@n78f75E% zae(O5ncj?Z*)aeX&fly{FLrs%PUD2ADMbv#r1#Wx3M#LU28ha^VtYp%ewL)pI~KdP z6H}+^_r#=5)pbzI1Mt5|RfeSwgiK2RRAnZk1X_`)`f5olIp>l=1UF{yxJu*I+gTq& zWOjOYPAZs{7U;ebsqn8Fs5IPRz>uuq-vgh3MG>a;tVI_z4Yo#M)wq=tWE)vs_oC!| z&PK_2RyM#hd~Dl;PL^0Zq?c+sxmI8jaD#1e33K|5Lt9&Ed&d)=+#Hi!>pV-j2#$5V z{>4#kD#JbJU)>5gFEB+ZYtomq(>Jo_D(NJ=W}8DX_cl%O)6%j241!(bCs@Jn)ZZpH zXdTSeCRG`f&Oxswjjm;v%#05WSGnTAL!@cmhl#i4jz+fA1_hD?_&<|e(2E>-nCD>g z4v{AlnY-*+?>EKptj(hPor^iM^e7HF;(owoX7T{Gx_NG8_!Q0_U1s3h?4@q&;{P+Y zPtUkc2JIW_@hi1G>be<-W0*n~C2j}(EYT3W^H9dj*r(w;&XYCPFrC^&vxh@c2w-## zk(Njcq53eoLZ~y{keGU7Xl0*C$S>|0U)rx_BvnM+&aPO-hRwBj>$_o1X~z+=Yj7ql zimbE(U#X0-gHO)XrbI2f;g)~l<=A-6Qpa#ytDDKvuP=7wa1&}#2?Z|C(i2loZW0s$o}Cpu$T;yUM@aiuk$M>ub??PRp`R zebMX>FXQ0Mnj-p|j~}3KNxL2}0dHAzS|xQX*Z8lL3NajV2Y^V#c>3>LG8`m)6K!77 znnU;_sB6%J3@=eCK`z_%v#eY{@HXPcn&qNg7v~LwFodFY^7RGWta`$@e@09?G&Dm* zG;o#dnvGG<;Ts!=Ng^a?+CLiY2n|ZLlDPdOLYSL&zPHZZ{P9CF1CLe|V`%>W=2&OZ zO}L$0*+4Quin{p=$0lcl|d-Fg+iKW-K~Ud%GZb*Ar`V-I9D$}S*LpQyW|qn zG3R$)RkwbU(sD7@ku2ch>`37ObHgV{lKHv2%M(ukLIHggaiRO2Tsm%bs`-SLCe*(@ z&f4t|w|C{+gS@<_%jqBK5;k&3&H#Sf#zM5SUSX2U@Th)i)DJ{?Vy8&+4e2X|{)@J_>70q{g zH`S;kSIEEmGgh)^R_RO3F;c97`mfThoyX3iBKiAf?K1lMLIE;_M{Y;aA8~n{*beoR z=!3M_42yI4xbeH!+3qla1z8&hr|dvA*M5yS(V71o`u1$no{;kANOgbHHv2sxSASaf zy6vfX6JY(zK@wnTk-+T{YKsMnr^>9nOs^GfcT1bPC2yAc%ymnM{Gi9Z^k=S=(vD1f zC(LOgqarj_w}jF8+YkfutCS3gqwdn3W0e{)0XeDMQj-ymP>U>gSdz`J^&bSTaVbZd%L|n?W|G>RccWm*c zPSO>_+5A!DC-r;VKrA}O$PIWIfHPZoBBMH>9vFga-Sk7gIh<%ic?79_q5QR>Qil%3yydE#(FppGzcCFpt2 zjif|g$cLKactx-2E7n%dMwvj>cgQExD(JnMl5iDJ}`dh)>~gY*TxrP`hc#8l{Nm^byJegtWA-*c5u^!U29R(N;82k$wzZ!bAz{% zEV}NW0>5aGZ;853t&&|7@1j0gX9W=8@elkP3R>|9{h4Z9zR32nDv0|KM{(2cO*X-3UH`HsH{tJ5%| zI(EL{?#VXs+kw4&lODJ5En;m{3NzzF>qE2aEuih$Y9?757=d8`{S>l4>al9!FOyVR zAd?^MD%`Ln_k{3a+&U-hYLgDRXaSxHc~G}HU1_&WCC!Juz{v-7zW3jvseP~OwXua* zzMkwkIFUgmW*BsR4=;4;d;_o+Y49=3cQPP7Tg-h@L-5Y>z)tlR?m^vi0g@p%9bW1h z8?0#Ma=6og`x4{g|Fx?Cq?uhi$5?w6~K1TtEGSHI<$!%?g zUb&gkyjJ750aYse>lL!4j@J2fOVWX!xA#DM9$o1+en#5lra9H*elU(t7*smb;PJ}U z**(H~rG8&}fhX?A+Rd-T(27oz^abw>MYru2_1h` z_xhDS|FXU1G}pzW$RUG!+OTA{{qbGL5~o?S8#c$vU-49WYg^V1QPB+#Wa7b0!Haa- zH(|?~^E>Zp*Alk#LGLcD_V7K*DJz+mhK-yl3lWNIteIArwu>DRw#?#xQCgPy3V!-! zJ^G=UYF}FE$qed4m_AHPua3qvesDZ~ANxYAscr6w%`GP*d?LTRO0y9Tes8*+Q<&*k zjK8iMqZ8hTqj?4NKC#xH2s$`@wwFCJ{Ax$|`Oq|T@C!lLS8z)(#&qO5`v9!wUEcwQ z%LusnfjXf2SN;BFU*S+8TQA4ADOe%?`n!y;px!sH;Axo};TT@~uLo%iCj-wR>@2Ce zuikYngj~b=(j=Psc3%ogY5#M)rlyj^%H!EP^2`c`7>kzQX?ECEqxm~ z4n{-S^k%a|OBn+ZIWrJEs(x)1)I?0n@|CLaCoUy=WRYc8#P7xHL#1XG%~4X}N^cNt zSjaoFVR_)Ba*y~FEwMw~qqO#sd~PHWo^IP69KaQ?v#7>KuUo%voiusf?7Cg+GS+Qb zw_)91>+Y?CtXn5J%GRyhxNd!D_N=2Fc%)@N%4VO_n+cr@eaB{x9%QN3@Yo1<>@kdKUaO<>N`~}7M%k7hGF~pxUS29HTYYarxbhi6$jan&R#R>V1I5x zg>$=q1eS0bxyYb&<@lC~qhX2*?b!mpcD`lm0%q#&S7{ORV*AX+g0Q0b`g#I^R_*(X zp{sV{liD%_S`yZPvR0kF?kW88$pmriT6+!ox&H7rz^zZEhY#!8pFFc1J*j0&Ug>jo zFgHFuvtU;c+;KZBJ6>+R>tp*_*I#dKmgxsrzjL)`}O|QOP zz6@MCZ+(#rRXZwEuNdZ&Z+*(Kc7qY*_xfWe6l3CV-KSUfydJ%@?$GN}?F-pIFPwJU zW^%FGV9J!4m^p4b+=2fEx+kY4*Z zq7*aeRv^Q)nA4{JxJ2C9Q&?VLvw4rHqxMyDCC}~Wr!NK42{#)#7YBQ9bGr|m3A}W2 zTs24IaAKO{iO>ceWEv-IDA>2tP^;N+OdWK3lonn&+Souz4foB*;jG; zHf~2+GS=IrE`&X<)I0NG(;2VQ6Rq>e%{ti{{oR=_w!Xcp^)}?Y*z%R;kL%-`QP)0w z$$!70QZxLERH(Y*S%2ywgDC5i)s}0Q4thUx$G=;5$?QVZ{;U@JUUNHJ^}N%X6;1d% z+6zkFU1j@}CO5Z29+m%9^17}?ryTXg)x9)hz3g1#<$PIaIU{(z$FG!Y_HSzTq!&wD zlswWhI2N|K&F~SR`}@MVpBr`-$M$XNBr7CaUl4CiRBH62+*|#v7IV@0ldc=!%V2OP zhc~nhEq&{%UBhSj=jVJ+?@amDyrb^u>zG@g8=d<$OoxpcZ3({RhF^zciyo7)|xesX*hT8)2+rsO^f63lx|r@StzW2mk7ZMxR|ZHM#crF-o|f%8*i1P^Tv zap*yJiDWQ&&!zDesrsnwdh(7d+dQIsPB3d9_5Zbx*VL}>-i4Be+w%i11-@UWwn2;EmR$qF4Ho)l_sPlVD+NOF!In0W3|JaYb$CK=Rwl{w*zCCuF^~6&< z^GG)5G$}GKQM2g%`q}fO%gmXN=>-pgPs`)E+@=|}rd|u^wz22v#U$0|uJaX{>1*cL z4**8C`xc!i8+qJ8w}U)o^QM_4n7i_+}o{?cntwn{10qSN1^6VnDIK?nOW2-vKKI zHZzC6V~_cL_Iw8Zh}aN;`HHnrU2w7(sFu?{9{;#Fr2gioSM064nBb7TA0NFTXjK<# za0gvy7B}}JyKiq=`tX6y)JYKSR=3zXY@mFHtAu>HqEXPfpgCriFWmp5u$_I{O5t;< zT9VHBUHJPp+D2?%H)Ze5wCdE&J4QM#sl~p^vh7xz(gS83;3aDrq;zY};}7~RP#TRo z-dV>K9*19bndOvvzXUONKxoiO^oQS=wiu5OpLf@(9;+XyL-y|3Gr*4VJN|sZBU8L}380ZA1UbM1E>TilQ!{tox4 zsd*q1yg`+zc{>s%tLA6}{&Fk?)A#A4{+r@AalqpHte}h%Dtq(5@VxzGc3huw^|qgh za{e2Y&$j%=s?7)wYiyoHe_P9cw0KtJM>+R9xY{J-!wH|oU!uLg|9ZE$lXxri0df~& z`>*u)VZUH+O(;%i(>!6k9*r?jaQ`A(bk1R5K*#U1$y}>4mt_#D|NTvtcmr;lCZ(S= zFD3+w6hsuhzJ_?S7SQyRyyvxUmyNYLTd#lyce z#`iGpfUbhnK#`bAZU!da8tH+gXVYD$O2+~~mY@?L4@S77fv##$xN1ORV0o}RLtWMX zX3?B*?qPXQfTLkFCKgkS$;8z4O>ZI9+D_lLB^Wmn*bEOlcsrUd8 zgzhnG zT%co+V}N4_CD@w;^J88nt@_R2ew`$3@%!z=q#$KSI)~bZ2D^|p+1zYawha=E?8-hz znj$ItjhFvAJXQYNXS{r>e6D=Fe7c;jH?p&4I>gAOt^kvYslp^+$}q^lw7_bYT5l}t zYyL>^=;FxYsLY7WXwTf`xt6(;bA@xBa|a=T5NU`tL>=M{QGmEWj3IDHDK<*-M|F1o zh(D=hE|g&ki5#BAP1y#i)~1XqF=QZCj583`ngQf5+{BV0xNeO!Ov29HhJYa76oX<$ z?nC4tnb;C+78Z+*!4_fDu{GEvEEe*RHmuv-OR<;x}CL4={XA`rD$f4{nq#{x#NrSXVlCg~md?`rWYj8YUH@hl( z7O9w>OcIgSNDZW1+otJ&w@rtqHRcYF*Ru}K9iFad93C5?*RvzWwlXd-jx1X+9xfkW zez3eZ28*gg)uOP#ufRHBEf7olN~@#Q(y)N9fI2`e0898vs3X*h0}&AM6LF9@K)iIA zyl9eSfH4j<2s8>b3^e8%a1EtHe>_lHe$IgR-f|mDn7<6uhHAqxp%@qjih&1)2EqcN zfpBgp7siEh;nD^Wm^4gUvI8m2fM!%<6lc(CkZvGt9A~6zplYOQCVGT4676*-kTZdZ1tfAI$Vki+tgc9NEq3SSos5)F%i+4WpicYWz%JJUEEIebTF*I5$X+Rh34ae@r$@cybMkT-$T7jZK0l|7E(Q_2f=}0 zX|Od|9qbKO0K0&V!EkVCP1FEAf!hM#i}RC|^k~nTSqwFX8AI{ZeP}Xkxe#Uy-$;G0 zKPdyphW6oH@uRp=yeZBUkH_Kh;ka=88g3205w{T^g^R*l;4JV>xF-B@+;Mz9E+78@ z_W(bEo51hI?Zv0yQt-EMxA1+qKD;(g8;`+Z@PW8MJQv5sOXH;Rakx0VHO?AO#1Zk5 z)rI&HTnXMA=Z$CKSa=1T0zM0ug?GWZ;D>R;cw?L~9*e``B|mb!E!74V-Igs9CXUoFi%slPA-t#LhDp<*eR#}G8 z=O*t295&3!zF@1Onw-+EHhDYXkRdYLoTLIu#cOHYub$`T{%in zRM-VG73JilcGbyS9C?1Wq)3YjFd5yhKk33zJ$WL_GBLj+Fy6t zHKE*g;JtTm)uX78?vt}0PLwf!1}PfFmRk?xv-)J1FM@PNU;16w&&}%XVjiqB9F6q5 zT9fC}=gX`PGOjaKw1&KQ4LYo7r`qjjlx&-q;+4de9!;LR1fSmb(@HRXyG~p2eN@oP zoqeuMojUc=ggM*g_wZgklNzL4r!|^1XD9n!syB++z}p2oWg4$!oAlnQH=o(VI|$P- zO;ob8d#~D?!ffa5gPk@_$gw5A2lZl@L%hQZND-X2Nat9UnC^n1tN z5@x@okkT1Rr6M~?d7<7cW|yRpkGiD#j;*8uPA`@@DycQ2B`FYNC#k^F8^dgp)X_K< z-YGxZ$?9aUkT#Q+NwOpe$&QpnB9r)}CQ0>*O_C}SmZ(BWHHYayNs)yO;mP%vfQ9I8 z$7yd~@amTElzK~AA-fwg4d;cgu3vi{aS2d}>b9E(@d8&juf2(|BoxxR!P5{Pe0Aem zvgi_`kkAdB2J;X+$g0#@ipWyzxic`Mb!&e7InpL>#>3dnKARNUJ>9i2PJ^XBdV0oL zQC;m*?tvKSAkN2358(3jOxpo>X^iDyp3k{z1DD7%?P>1T7>~gUAH!-BmuF>d4({rh zL()#)-P1n5?RRPkaQJLLSnQ))ZR8SF)=qJkp)_Qcrlgj-dt-tJPgQHWB$bi%?kQCC z_#Cf3H~ieUL+`J!7UzFpP#hbv|WmwYsap9O#M_c6)(RyTA>@0E?GsgG6l zUY5tLJIXB3ts#=nQ<;jRdYvKn`v%K>^s9}Bqh{Ne+~Jt;!FnG+HNg0(V%tu4DU8Kn z?#$T`1LH`=_C$9p%!9!%GX^0h#?O##w(hE!TZ5lwbV7`bqmb<+cMv9Uuy)2I#0>k? zwN2Aq4r4u7Fmpb{5F6>*UheLQ@gA(2F$yuoJ{xWGbJxeX43^F4g&1R_M%(AyAsF}| ze#R^W0Do%QrsOV*u^P;uIk#j0k2G!1aks;O1~D^+OD6DV_%=6pEsWz}$&Buj5j+at zPIU)kAcNQ$(;`5Pp?!7kuCtwuR|+(I*dPuSJ^eZWkurgS=SfzID9Sx~$Om@yFAc3g@3ya-3q z&f!L)8y)E-3;p~c z4;My=)*)U?HglRvGC**wkOck%p}%Mo;tik~HAS8W@dJfW(FRFR`W+aO^P~=G#aAay z2<=6O5J*A;Z4$gt!#5VXij)v2#5cgC@fmH-9XLU4jR6bas9g+du z&-G=Gk&L~v)|z`wSs_3cP;7QT!kSvBI!gn=zfI~D+tI&d%_LNxrG*fnepBF4;9WpY zD6JJ2(cfoH)>vt%&dZ-csuo+;KWRJrF<`pN)jUCC0v5ucJ z1+%nKn#9x&h+CU9=Kl))Rr4#)D?#KXSYR-gQ85$9H5i9qVxmr&+HX6-=1VCPV=kn0 z784|-cfgC&Uj!uoVof8Yalq|M(G~Z!zrb3c5jLlMz;i)y6Nl9wvhm2HK~j-{8$b~i z$JU>+@z|q962!ohNbxm}B9CMsW`o_MNm40~Ta%(9PNYA3gV&=?QaO)jlwv22us>pS zcr&|w_A``aWx78l?CSu<#>>+*KVw<80;;i?odLoPrPB|7 z^S=#0v6@rW$IK4Uk0xp+HK&RU>`}SL!t$P-w)rW4;#r|Mjw9)h+F(0vyiyG0z8|S^ z0{xjAJg2Q!pg^8(iq$yg{-h1A)8;FsKiokSXbO0oTz}!H#fHEv8RRDM__{zV5G7K0 z(|7rPkH^8mp-N;8ceF^Zk9luwYwTcbV+=L6J$5v+XB*Kim)9H{JK$cifMY&flJN-47Z+Na*UJ)*09D)LSNqGK330 zTexxg`}R&3;sEJkK8yNe1)+iDz^mc8@Gf{1yaJvHhryGYtKs$VLO2`}3@L&nLmD8_ z&0Wp8%~8#n%@vSJNEW0W5)SzYNrSXN;vqGVJjf?VD5M1P0n!ACg;YUuAf1p%NI4_} z(gsO{)Ika$-H;GSF(d`j2#J9}A=!`)NCcz|k`8HwBtU8*`H;_$Fi0sR719iegH%Iu zAzhFtNX4%dNG1dZNrKeh4`etx_}*`ljBY?j--mT%q1*2xUOuAJ&@JeAbPYNW{Rth4 zEcj?O^0p%c+{_d~rK9fB@Kr=T0rF=!|{8{L79K$oG@o0FPh z&G+sKbSpXmU5m~~e@2I)OVO$5W^^378l8)lL%&6nptaBfX!ku8gMbez+}T^&Di*3x z+egaZQam}On)3#JYmcIq_#IN4ho!diJo%+ydCH?aJE^~hA8v(?a(S|JG?*&#bJL{8 z4RdUL@O;wIVhZBt$xIy{rrL`2wI^0bF$15(2l`=+t#VHhDUcgKEZJnJc5CL|z^z@< zbQAbG#Autz!1Z+)zsW>1Ep^Lwp6zX#%y)AsrHk)DQhG!y;SRKY9JzWR(ke#!`2N3AZACvidiA#ePyW=N3rK9Ol_d|Hg6!*R@hIL-wlC^&$yXWlZLsr zQhz@A-4Y18uLqMlHvE5=<4CO^me|Vu$@jZ0P`R6DHT8IyWGm_?+waCdib34>OVO~v zR_0Hh->rW@K|J@X%P{j+(oe46&3}~cxFMRZ58G6IeA4mdcrPdF|Mo8UCR;p^nvZ^}a^lJIq5`DdDC=yBMtkIg`TnRwx=2z*a z8=KUYf}lRg0O$9uAq%e(^y#4qNKR*+)@-^`aRZY|KBT_0OKZY{zH3FBfejK+rIw(x ziNr?Ma#p=`ZbH45smj-_&ndaqh38cH>SH;-B8FPE#^sdz>UBYvkxb57t(glZhou*K zH_%%oChECQva}&%2|zCj`UOdbQt?TXHfAhM)cXqEMB<|qeLhGV<(FvcRY0eZv?z6- z3~7`6(oww~=r80$l)O($r=eL1zg{ME7)gav^-1qEHY=^un}zNpiBTY*)J~)25;r{< zbP>sj()7vfG+8b^(z}G-AhA#{&XWTSpO!G`B|*O;DNrxZ(*lg2mKNxZL3faZD5dic z0Y;xo%=PM_vq*ZB#(747$>-7)y<_Ml5*MX#o^oyYzT}x+A#@B$gHk(Bzczkf+I?R^ z{1{1sQa(?;Ho7ed(t|_M&{ZTeO6xrHTIS6IiIWH9wJ%9K@kQGRaphPer z$Psi1Y6KI43_**aLNFpI5cCKd1T!xwFOZj#mw}g@myVa3mx-5*mzI}`mywr(m!6k~ zm$`@f5&tg#pH!a$H8 z$gGan85Yy~(b99A;sAI+d4{7C+Fc}A?h0SEv906u^iKnNg7#7iVfBuE4#;wKU(5+;&p;%O3T5@-T6@imDx z2{lPZ@kWV82}S{<_@l(5grg+F~C1pEMge12knLVl7uygH&ff;vDQejRZgVI7GZ zo*R)Hfg8XL-;LOf(2e8>?}+G#;0SPpe?)vlctpa4$3(+e3mPjQe$kmP|Q$%ROdIJ z*DbL%<%Al7Q?4Q!f@up);Io>-k> z&c`k>E}Jiv<#Ea97nd5&%UTE?>1o!F%ntXzVFKk0+%Na2j8ma$1Qv|)#Q3D_vLcnt zXy~3!?8bn!#5xNOUyb=zI>@MtfvSWiJCDG+!`x;QDo{|B%g0X8WHa-On6??)-X6*M zy+36HRR5xK_R;hdGb)=zWSM;!!QNk7xBDIND_Lugu0Cr1x_0r$c6#{-7w(Sok{wCj zvqkw|kA>TOXVadTxf(0=iRUgoogSDy&JlK#&xF|}!CsRrwm3|t@i$FuF*QwCYIRwa zTAF><;d(paQ9I)erkt5$*ND{EJz_+WFYDmGGybLd*8MX_EgI}7ykOT-0at?0j=N8x z90T5eS*hbAi!I3_Qa^GC%VCkQQ;F=19C(w}RzAa-&k+m_c?o{>lLsY6$JpGE`5k)XpaP;)lMHii= z;Vj9yOD&hp=hrrWrO7|iZc`mLy`V$Lc$79&^U<*EM@wB zP@<@VW=UV626#=(X2ykITGj!3Rd|c(#uGKq()}q>3 zOpzWOOI%C*xtW(NfCAD^n9n1uP;<-xS4_8FPD`#wyP~Ym*TjNnpUctpxCBFRuY54- zu>xhZpRf4@yW^gyjn_YiJHz5i=q$14+-Nwc#qWE*oY`vrnP92?Q%qir#RZP=3<8^$ zFWF?%Xz{K)qt(u_a|?%*n>G^61Tpk*JM zck!&Gf#TPLII74Ol1W9yBt|Fk9IVm|{Tpsypk*44G-Ot#EU_A5 ze!JEy%$XPJe+JAgQ2Epn?iN zwfdYr9WY&6O4LTYh?P=dv3aun-~xnw!>THDLFtv(_LUCVOERdXi(4ptHQieQcy^!d zssP$AGJu^4UefONCB|BwDK&Vp?ndG@(b*M|C_Eh+M-$zS-HSkxlaU??EQ@b}wmTxY z76&1C?;eE$VvE994`LqUTI_zrlYY`?9@AjJx?71S%^jK;TU1(de`-uM>uwd^JKoUI zSb~$NqkAz>5Lfi2Pgn9^MJYpl(%1Le6cvI{rtWg0P} z`+mkju5>H4Sz-gRID?;9G74fLFbV(ZY6{Xn@+XA70@(2Xx8ky&L(PlXEB646_lNBy zspmhGK(>>F9*GC5cz=~%37l16pv`|MgY7maNxgD7XyBiJ6ioErNlU9o0&^8RkYZfx zxg6&Ed(YOB-H*Ev0_ndOhx^Nk&Y3`~_c&bo+5mT1de8(nU;5fgBZcUXFhVQxf_A~7 zs4yfb#hsR%ih=&8pH@@4k5 zG-X^{3_0J!Km$&W|EE|5oE&0U%wdp$i|`x*uot;dj*PbcRs@c~Jk*4@y5k2(zS7o{{ugAz0RYYtHh{1JlzI4aerUPtV3?5MwhT0l5;^|>HLe75PE0JHk|Q9YNDWIDF2ll)4+^VB zxLgZu_<)$4!9G0<4VZJ-*g<%INH@dHl6#m`2=DXj2GycxoP%oKY z|NON)%{Tm9#A{Y^ob7S!b4mC|toYzVY;o66vusNP&bjw5DSkyPXNn5BYamQ0_OYzg z9|hw3z7Cbqc(AU{eFEi1m=I+>un&HCKi_aYI$85pSMW2ZYfag_FqR``;%t&|X0sAF|!;RFg1UzsoDv_7mBKL|dq!0IjpTm?ywhy9gna8+qN zbkDf$;jbeU<3#DQW!Um&RKWF3=uv*uJKsIj;Sv4n2vc4yIv>F-9;ZH_4msxaI-uJ->2>r7_5s{tFA2? zQFUw-#tCl=t&4B$^l;Jx=xWDwgvP4AaZ!1rrt(Hc1(jSb{ShA)jtvWA|8j!}czXH_ zcJ|1w-G{y1mEA|hY`N3fRqhe8osYepgT0-R-T&KQ+qS5LUGZ>(z3MO7cy-!bVIe!` zp^NwYPGjcb6QEr)Y-JC^!C-t#0=z%I$7~4I@Yjl2`FN!XP!@+g~DuP?tA>T4S%Yj>C`i zk!SY_Snz_xyaloG<=G>1!`$!F=RCW-@Fi|xqU>fGSFOF3ux=2mTbX%dLdEvn z^>m2Mf~RywflaG}_N5#96A9Cwh_pygH;@VN2`^EARRaNAL_{wik(<>U!Y~uylKf`d zbnp`e9Z-3^Ms}94nB8((_7g81I#agWl$5(~DiGU`a>A3$w0lVigko{8STk7!j)ZW# z{aOmG6D94^w>8k;W=d}Yk(=!sn=pF%rMb1i@jBWTFB}(MmmFB6JdpMp;Y2OI4(lX? z1HZllbF$PKIZ&#jJAL{WhH3bvr1-fW@(bOgoTrhjZw}8294;s>52R;_Paqux;n}c- z|C>&H1QZK5aW)(>j>?%6acVD1HI99=HTvb&SnjZ7?9g}X<4pIhvYq2G^`VIY5_7JN z)uiFQT9vA-`>Lxk>2a>#YX6Oq0y-pyCE*mk|Fzzt}7b%ite9_yiPs3cQc?=~|ZR_ZtS{ z$P*9h5uf7;4*b$}&!5Bd$y=8M=f?B-*JIfSOIc#x+vXVH2fhz7f+fX0deu}J>Nyf; z$-nZ%=X~rtHD33tee+3Qa-}-Ferhtv2r=sfJ^x5NIUX#jf2-4Vv!I+i&uh0BHXX`x zzk{%DAGznsv&XBWTPG~xv@c}fmQo@&oMID?V4%UJYMtWHhCJoFmE;5b7 znKO}aCW9a7`Gsc%D*>Y(#v$>yBvI&nC!>+8Gv@2VTb(`P!mLsjA!P;YM4VhUGHYsu z$9YXX&rm(~NB3|9@+y2~pm3d%5c;ZUofy;4KoKLwN$#c2j%N|&^kaWN9l*bdc_i(` zVj>XlBucB*M5d66+j)wJEFqK9r0?x7FgxfX3#+xd92svAiyy?xpRi8VBGRYW_Mu>j zCe2L3Gq|gCVtkogb3rA>yUxw8z+)xpihAROl-axHTmSK8a2(9j*k@jCOb+3qgCZwXvo4G^t^EkBO5Pf(lxynnS)_r!0C)!{QsyTkf33I|{R+SzYz1Xm^8 z`%``8yWuorOj$mD>!_1EJ4rzihOB!tLh_Y}-wn#o;_Hp{r%<1k>P6p-q=W~eSXeSc zGYsrkX01V+LBQDxi^s|76um+e=?j)>Q`2caIt!Iz{3$bHONtITyXqAAP9-85?T>Sf zV|8qvmkkE1T50t+>gPk}x&A_^SldRvY%p9k0YBYZUbTI5xaC9b;syWm=1oQX)bX!Z zbR1Hj0q+KZ(@#PbJx1dB#y+ML?YVlq6p!?Y4b}o9j$0bM)sG3)Dy*EdGL564M%)46 zKJ0q~-#lVXZrxhMh~0tb#dKJ;aZ!6BF1xnEc0-U!7%gn1oz76Mu26@rdpY!a%$4!b>*RY#W|$VBGx|QYd5be22p{F+8|kn_2O3{r3NxDsIqOswO^*KZuxI-*0Tknjj@ z=i=-ZJ)IFk^EPN&GPH?L=ZD<#m4d7t)rz$X*+BbAp#Nbi9=2pb0<}5H7bEqh@ zz;PLCP;^1Ri!qik>b^KDbJP$Dph1TE-1V~lc$K+&Ew_2LPN`5twrxph{6Jr)cyZj2 z>Omy(Y=?9eZ&~?KqkM2<>_K`zfWl9bj|aQGs&D3$DWtXv!wmZqH+D}|$wuh{?(So} zvC6iS_?%}iymj|8rz2=DqhF(?HcW(VbfiSSVa$-5?~F4Yp7bf}j|<_KG0K+YQI%w; zBl#NNC%t$yWW;i9G;nbj5x{jKeIJoTMOv+zlP=-BY`F}fre21z#@@J^I_&#sC)J`aPhpMK_PyyDoMQhndjNo`izjMpllh;#joEq4X%k?_KjiLjuEr)$c^*o-T33`(Jv3N|>fP;K$xyQ0&IJp1z;9)n0tNZmTO_Pf z^vcftOojzFb6YaOsk9jg`}0RAN*2Nr^;#(`+85KG)YZD7#pK{?=IjKpzBsw4D)yvW zRxF2lKY6*8(b#W$^cgz=y=^mpG~>@1`CJ~`f%?Rio)i9karfH6uPu6Cfp`-@HbroJ zn;j_ecjjZ-c=G%g3~UFAgS6H?EY@(A5^WawVlwSXws-oEt}Tp3NGH(33R)s(qCCH; z2l=;5S}NS*Amv(aLZtwgL$~oEugScnFxuXaeS?pGajp)H6Sn18F_IcF3E4+B``GK= zjeIHK_AS((iR`mBqQ{x1plaf%qSTHB$5bhP4%f|ebT2JS_~7n}Q`2^*9Oq8#QtmSx z9^WHpKpnH&N8sC<4w?0KY0(&WlliEWrV{r!1@M}cxJ2<(bv06shtfpMZEpDVuoffDZ{}()GevR!Z{O+o+Awx5?vLLx52_@n zugR)w%M@A?v2`kTD&yli;N#lP_xpJ$^W=*AP_5)(??<2UNUEEVo>|$Z7ZcB7!R?C& zz6|K!a2b>A-}M(Xg7mVS-G<~d&vWjLvz);Nn|bcko$?+9`Jr`yFdc8RCoUCY^zcKw{MQ*wjm^5lu=3VNtp z&V*tF4^^|g%SMnYGM@?aM9!bkb8!x z`92$B>dbd4pM!6scHcML(a|N4Sf`nqPPG2E{p)uA#!YH_Y#1Xt+bIFxLO%NA1*tSt zanK}29X4s-{sVvUCB4C?x1i1M<-R6t_-rwJLI}0RcIQ1Tup)M%!l8*{K6M5aHTFw) zJ8KxT=}to0Wh==}H|^n*+!^8ml?0x{6_o=o`tyd)>L=HYlDDolRcH$?OSyRH9eOOQ z374;rkfV>#j_aEE^0iZ|K39P7ZB|QxSgvKlKpdEH8)ilTl(T#AOh4{Xc75n)qu%%$ zau;2e_z+sCU?J6qBX0UT7}QA2<>D>QEgGovs(2>3FH4(VEwo>YL`^ra=ragQgznXv zrE(}%bN>sY1<@~iCKNmJz@NQs9D-M9T5bKwT9$~HA$A5chhFO4BkC<}AtSp=-`MjK zqxg{%dRKo`ul@}6F}WJUl{~r->e;#4ao!*EPiuum?QDnU(qf+I=+G_ouW{l?2(?3d zHHh7u-{^$p(k)G|mE%Z=wS(l8|3R*yqpfvuN=yWZlbSBu(2=tBUER*Z4Y?(8tf&N9 zN!d-#lPHH*x_mOEUdF~Cjelp0cxXWD4r-W6^qE>@KxTf`Ry7m%;T0C~jChLNYbT6ZQezpqMG=ykdr3*4l;D;tfXiyBg z@q!lw0%7O zrK`65q2J)fQ&~XpeVXb+Of`VMylpHbv$P=00ua?T0e{S6zJ_$H(o(@-jz=%#GI_b`xy(Td!Mj>+UZ!0MKC?A3k$Ic<;O0>v=*9t@ z^3+>+|B(Xo$?xY8akdXDbRsC=p%Z#9Qgs`uxeckQmc;Zb7`q~hrkq%Idq;HER9}8!TiH|uDmT*BQ=SqHwFFg=WR~f%`g)a zT&5=V6vNjF@=Amy%ihd%SM%=hgU0lQpm~+JTYKWDgb}+aibpYgOn~gYTa5fk^VmZe z=pvUpmo4!!{i(Rn3WDwk4>j*TA}t--T?f4lQ^2~tcWP|X{z)#ojU)}Z;cW8uHdnTN z@Ud1{q>R{^HHrpe^+;2A9yu#Fy}Yu9gfE;lv^GZIS-& z`vZ*p!iUHY)m)4X;k-2zw%qC8Ot~BRRKXRKD=TYG+$rC67Zf8@O~Rer6bkImq$z6c z#98a1GfvJaPh96(M8(22*6ovA(*0v|My)X)^eqN_seAa<`^vdEjgbU&YOtcGA zVV}P-310X=ZEKHyxFPVeUtAn0p}|9+eJm>Ws&6#L=4q0T7gyyM8Y(V(?3i@nGg&8C zKW~|9{8AdQw1Z~)wKcVoI%&@0#~zy8bOnAFD@dSn|%Ye|0pR!o=f|3Ll#Q^KV|3Z^^~pfLAOF3Ii-a)gqFrC-a15#MG+)7MPnSDxr60g70_(?f z-18iw6CaT^*-!QuU&N2>i#CUl13^b3n_Y-<8AF8nyxd*tyns~E-opOt7Pacsn$ea{ z8c&B-N^4)CB`qQAw~fd^X%V5JguBs%vmNP|<$A`4wG|u^JI~!jAxv$B{pITFP7Mi5 zJH@?i0n6VsnP|bA^CJnE$%s{)l!=eDAn#A9?^gMn`0~54&kQMiWeTKy_YhvmGh>OW%ClwxlII^XdPS zzH;&`CHC5^_?|$GNVphI=pIgp98S<2PM{u6SQ$zvA4(Viz$urw!jtrnXI)udc6H;<<4n}*(mjEaszFUYw<*AC45E1&T;5lTH_N6 zo$~UUTwxJAH`OqDx~1{8NE`{#_TpY*VmHS(3h(qn!YB);BE`Q7yX@+}K0{-acCGvS z<=LF9^uA$zY|X}IW3h!Zn9o4OK=l0~J?&gx+YhCV>?e)FjveL&+Z%BMY8&x~`VFM8sb?`b>o|8fbvWWUIQlr6MOnd9&v0-hvEzg)+QGV32YB&w zYvW{?+t3idE=f8d(1=0$gF;Ve%Ja3JRK)t2)mZrm%lFZt($=t3$UaWSN`g8OKfRHT NDMp1hFB${m{{V&DCTjoy diff --git a/docs/build/_static/css/fonts/lato-bold-italic.woff2 b/docs/build/_static/css/fonts/lato-bold-italic.woff2 deleted file mode 100644 index c4e3d804b57b625b16a36d767bfca6bbf63d414e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 193308 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

l?s7}*4vp!2W|88=L^r| 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

nR1?qM=|aYy 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

F}woT zIx({Ow~?=c{IbPJ5zvC(7;};$g#;0Fa{7*mQAQ%X=w$qiu85S|NqUrZb+@qZm2{8e z#ITitbb#a$T)aZfiM@b%fD8{t?{GbO>iI|*iyAQ|sIOyfMW(gup3swA7&#MlG;pgE zbH!*y@(ACPtOdyswIXo3lVU}I6S)P|GN`^&$e393;?cR4%3w*+&(Y$ajJ!7jyp;JN zxsy)u+p13y5 zRv%)$M#nwp$-1;D2}vU!Lq9{keeKVQfQ1s=Va$nwg~||QV*H8}Q7TB~DQ-H7R4~_y zxzpoUMCoX~K|ealj459cq@!A+Lg@qC7)!-XsGxjKLJi0Z7zF{%9gD`~bd6ev8t`50 z+FnHtF2xnuB?_bYUqd*>9l+vzyz?acghy=Ku5)WAEN2Po^+&#mq}#IVc7*0hFofU; zzL(eaf+g?1ueo^o>(fWm5o4UPME*nb@FmNcrVGmqT3s-eF~bb1dobe+asx2gyHm81 zh7tk2^O>^DuD|MGO(v33uvJI(iolVuC*loe%OgW1j$o~hl9h+40X>mhFf0)Uj8)M7 z8(D2@|3g;mRiS~P8O)pgq!e|x1Ff}l?$PsXLOZmLY$Q8Gy-q&pc-?;|m+HeBKuqN- z`z5LxzR~X>)c#8v2Ij76!BI=h^V=-&i9P2-2B8--A*5yy9mpDT$*5%vT@pv1oalNc zu=}#<<~ihuV`CjYpv4avsa4(I&YOcP6_U$^C+OSkd2r267gzdh0YB-Rv=yk!2>=kK zeL1v}r)Q_za@&%O+BTDBZ%z^bk<7Y*%yW^=e~v*r5v{$dV*flKloI?~{a*U1DHk5b%JuP-UQD)Q<;Mzz`aL zD1LG#^8PAZn2olcZrwep#baMJA4XEt7?Tb!S9mMgX8N)y9bmqlDHS>p6GaJ`+Ad;H ztrE@+ZG&tV9|iXwSgxtR@zV_nqzXS#s|SF15aENy{M_ZR0U!pn)<^+i0$-p7HcA zPBVIYr;qrqLyZoUROpSMM&E};(tX*BDMp0+H-!#wbi@JAAYZDeIa{u>PZLsss&j11 zxI?eY+yjcEy)d!%1HZQBHHE6f8?>PNc`X@UvywUd*L}>7~emq^G_pOdj7G3vGG=Zu$A)mZP}OQ!B`{h;sNQMR>ht6 z=O5vWzOgMz^ZC#;rBuv#?sndGEvg|pOKmqUtrR*?MPujVA`?wYu6>9mn#$^}W@17< zb>$o$M6q5Fk3-aS)&oRc>!m9`88^jgi*>xsG_?jugym`E)ag-_w)SG&(ckGsaox?| zR!1t`9$t#^JRh(Y8T70EASl^tbyE!hMp-tEW^5nq9c;BF?g+s34n~Fj3f#F5Hv~p? zn#ZeW2u@0mEqhpB!nG7M%}QK`UA>3TyoS%rOn-D2^b_?bM0vlYp19cSP2%;t_+H#U zSbnV!uk}jfS(pL1mk^ar)lpAgtj7|slbdS zP3bOA`6Y3_KqzsRQpA0Ts=;dHmSb=2{j2iZ;mQ_VYoa(CBJ{?`ti91jozY3AQC%W2 zjP1A7#-juSIU14K8u}wd&xVM8`jtPbcb0sW!t%|t^jxB}PD~5sI!*rtcwwt@L8#$5 z>k8oYwZ?EGzWk=F(`x(pm%C-p=>{40@{gAl-+P3C$0(&0`IPXuh&E1cDW478^=H;b zg^dGrK#0R@@55~Ib)aCQPk70t!#T*f!u~vNczu<4#PE$odssD9&Jz9wok}lanN#L# zcH#@YD-C%eYpNf64_6~z@vyA;A{wAe4 z5rlLr1}MyD8`qJC`p_(AMd!=+!1Ic-CmqhU7U(&j~31xb*-<< z4b%-b;1D^#aN{%Zmm9bSLr5rNYO_vemR}{0rfkkTBEX`QXWL>yg@?3>xe$b9GS

8ef8K{ReTQT1j*|N=yGY3`pO&^8cVFIF5q8r(x&+80p#lAF=a`?4g(d=C!;H#LV#ibs2NtX>?Se4o7ML%Dy?bzq#UFV^!Gucrb zr~|TD5iwI;@m(9~K!*-@go4agUO+gGiple-l^sOH-v?+dS3q}VK-gU7h$KQ?**&(SaZng5~u!~WUzH}3OLsy*#M znHrsjUq95wV90I5UigVz{aRlcQgUHZE?BR~(vcKV%{q5husCt_EBv_}5%`1BI)=T# z?=c&Q7Je1aw(U1FSPOrr1I!KR@@w_K6Q+AH6zVCt+r!<@_sEl};JZr0G zYO4qHXqGcMYq3iEn98q^yCWtSH3=+ll{)&r!H2-#oh!))#0Pc9aLety%^Avr-eofWm zG+3{Fu_w34gSBxi1tga3u%?ltVpsHU7EpZdQBOoV`+MnIzw^o{xyKq!!@M$gEnm0k zuMfJRPbU<6fo#d!7yGWdu0*HJO2wjay%O(@CQJTJxiXJ8ZU${hSnW)HbkP`;d6*KS zl~SnX9c+xD{n!sdEXX2TTj@LzTHQkAr6Lc?B>ACP5jI=MkfyYwH~i0cBL0$=1=M#u z3;;aQhma0~;2qa1$VV6#gg$7Z=+$pNpZcS=p`E@F)qdx5MWv0>hA!8MYj=;wiagk< zWQ=-2_Te?6HuhA&+e+e6WXS+v8l5rn%&$aE*=W;J8Hf1{@Xv{(AL5_#MvR(F0FyBS zi4!vJQ4pzb^9C|~63d)?Ee;FP;q{A9Yb&AM;I}6e=Mv%6G9?lvk z(FO#06q2Bbj-C~KC#D80eVlRxe`J63U+-%af>50U;(t|^QQ-mJoxUr6zF9DYWE^Ug znMT+nPeNfdYIG$i@08k#%@LL-u`qfjI!AziAW5g(ip9}mPofqyLv+Ug{!Xmd-j&w4 zQ}ZiSoR}?`OUQ@8xE-M@FOIk_P<$SXB4-898sl6b`Cx29C8va+pcn;Kbox{x_#mHj zzCHSV03$l_D+zB9{7?ovfR#u$SZ}@3h|t<^4O$X3F=jgaDBhsN2MuRast2$cKjhr* zJ3UhlPf)!(IE*U{_l%0SE-_)R?;S*DX?|-QGle9V@L=SXr?2uzP_3!atg4L=8sOi>(hZg?gGh2A6QC37?yq-DYoH!E*E5fix>#Oe z72aQZ9}Kf~L#ZI_WRX0Q#k(Gccosa(WTF|3kFgr)&~ zSV`GjOZnzm06&&@Ig*b!VpeI9MFqJcgIt4mnWrky;#_|pf%ry;mHRXuAhoc9Xr?7z zW&w&4LC+7?Z$BiCUY;ibwi+@mmmfwncK#~p$FJT9D?W)K=w3tlXDUj~Kodg%lb<45 zLNm_9S+xmTy7WR{qW@Hnv1%XWnfCM-4O_L(@l1Q%qM##Bk!bJs&?lUm{Vf^E*T@Lv zUP;Ea=kd;X0}YQX^glev*d$*=B9yx%i+(q(Dmr52*A~Q}RZ)!9R zwUF!Q!jt1V%#U!L*cxyaida_5YE7}#PdU|3CAp%XpL+Gm@%#yfbN zy77N64|BMFyrfIU3=#}Sk6L|`>p8|q{qldG278V@rGEJd9eef7e~;Fn;OYjUvvme1 zuDp>u%BJ%i!xy$D#3k`8zF>Fff52%VdjoNR@>=)j6#E{q>j6aEl;9CrWEn z-QbsF#O49+*&^Q&GhVarxFQ<7;UA+qL+T4Aci~2jT~Ji zNe{Ch96|po$E-qfJz#9m-IjG=3(#BM^L;LFO&-E&VQnpo-m&lFHu7gnu^RA zt?4CHP7SIx-K(wn3FG#Z>!4P*MUU51w08VKNQ=vt(H%OV zcmA&ryuV!k1eF4j=}7bW2(sL!web69$1lZv49=E)3_6`S-#VT}q2y|hA~S$R$s0Z&Tc)JE>nStN;BY{_waI3ChaT$h%%XiA zp~p^wcPlhd=)p|T9c=mQTVBz~DPEXfrB6gOKT)$t#7K^rJv-BWBtrZ)=HuUJ9lppf zsKO>}$IYL;)On;pEEV^0+}z})4(b1xYMy_O`bWKM1Z~SWbWJByZfO*mpyRTM@L{>W z7WDTNO{Ihen&Ipb*@Mrws~$D62K^T`_y0j=K>RjIa?AqHbyn6@2gN}16FZAU5>d|J zfWx<1q`=?J6W!9mJ+mgulrN*@LoU7CqZl+^)0kt~y*zrQM&l zGpwth%$0WYzB_b{LNM!STwy+&f*60n`8uwdGydGV<`FqtkQB@7T%zo8*)eMtefakN zc1^-|4Zf@HGeLVg!7|be;x~noV>Wc#HJpNMk&2kPKfe7dWqDml)UfnJ&mapLwOz~U z#TH~3kv;wG7cHA?e(fk-{c+sRLE6< ztvBl*o*5wCq21w>|M{l!(uC0PtAN{7jHh^$zb56e*N3)|E~ya|6}?; zJvje$;D1FpuiqR8;MM4&lo7`|rYRtL1U7f7Ury;fwBM9Sj{S#E0aA@FqHY;NnPz|{ z%j*)NY{=s=0IGHE|1+7+x)#4i7eluUrA#wOljTiGLN-Kp4DjETiE<&~;{XfmTJ9QM zGTkz)GR+W87V(mVuaLUjUwCl#Sl61?=yK_nk(OyjYO+X`{L$w@{+As;zZ>={Z2wy( zUnag?|Ky78gCFMC<+t1Q_-A?;S7j)-nn8XnZ`#WUMJ(C}b0bXJ*|?Jdn2{qv+sXcp6e1ag8fWC|50$R_hGl6VtB4(tMpnu zm2w}LX`!8~KX7=za9^!@mvEN=`q)0!u33BLcuu3*hl+-ZR?Hr_6Bw#K-SHw&S|g@| zAdo?$qNB7U3FKjHVjM=Euir+pKhD0n5Kv5B><(=|FRX_ecrguTG)Xv4ZdBQe=+##) zpt*0ec~Q)j0S`Fu`ZbHaxEYrW^v&FQTyo$R-@hVMrFb69DPZJBmU+z`*T zgcfC6RT51qC;AToz_yf)H&$7}UQuz&Z|(gX`wi!fT^MZ90TXlH+D)T_C)kxp&2`iM z6VY*x4OQ-))3sMcA^m6dPsoqP zirH0rA(}|m5B5x3;2mpzx>4Q4z+UZR(gp0g>b~gQqvjv|W?=?=g^J-|L?Ht!e^33x zQs)FGQXQ);!xN%nW{nKjdZ8WSdAB`I;-6UOTzVP4b(+&*_6$yrF4sJX;BXt3g^C~7 zwl2GS*TF+#$kk_YLt(-&{H^-K^o{x}g3YY$!r863)EBt7f)#Uen~*-@9YpPKs=gpU z@tDa)m;^LXaC)&b-z)y%C@}ApHMbeYOx=$~*iICKQMT@J_fMc{u+VQ^Z*J=*=c{zj zo8{(G?c2pDP1>7bJ__nFu)S;)x+ZzuTkYGRwvm5UPM4u54;3XfI%+O1GWu z$Ce6#Ev$NI6bP^^qBh@>_FLYY>;~S_y}uwYF|gN5uh~jaeGZfnVy1^jP{|o8MENn< zdV>bkM3QQcOaz2z`CK0D8mROL2!NUn)OGqe+6~z*@{>haI?>KKg7awvY-0siV{#|V zQ&1en3kR=qy*?e#pSxAuv};UHi&dqUE9JTqob8|Ad3{lYyqNhiuv9O%pIOMU6{!ZZ z6R-@XY}PDoYpP9rM^-1WwWJBb*+_NyWZTW%e@Sk4VO!k(R#wGRBHHoGC7p4mA^R?7 z<&V%0X`j^`lVo)LWuGaW%Aqn!I5UQ_P*yReVt<3=)RbGccc&1euV zJ!!pfy&vYWwQ1L=treeNCIHXF0nuro!YaQCKbhrZ$AH)8V*QiG$^Jv(<_+fr?=at`1pDTay$w!p?WdNgY+GX+IpCbJDk$j&%-9i>b92ww71VNbR&X^aYHDJ4H~8A*t>>i& zT3UMR_!YWlu*Ih8+luEX0gJJr`k{+`lyTVn8vD#(@4A_MuesNwm3*UloL@2n+B^+U zCO`E42Cr$Fgois8Ts0pWEQdk`joKWGn`Z03X=NXr*q_*I!mpWq^d?=G`Ih})pDQNL zimZl7d9n@p)`rla3f170{3V{|WP?ec>gHKBHcs!fF7-BnZ1)P3t3$MRg(<+SHTqvjwq`9wg`m)UwSVBp*mB+yr5eA3||7cCmil&#CvQ#{3- z@N%x`rK(NIghtMQF{qF`<%>G8ns37JWPmQ9kX%-TZ1TrzA}4GhwkrFyF?5K{jrifI z5S9vC6kd`SyjHU>A`?b=L#{C2-S(*ZTY=EZtBZOg9_G;}RL{x)t@vp;=#Y(QEiH`qqMO{u6k8OGmZcpW#;eY` z9HgK<)2+DK>~kHzTu*b&*(2&R6PooNfrYC_7Ri(j5&R`UTZUDWTe~MkyfVSlZi99+ z7o3dp09H%NQ=VZKjhy!h?`uI;hQZi$CgS|XSDVAys>t(SlFej5U+sVY3|Q&myRWD& z8}qmi&!4-dYpaTb(?U$ShLd$G9p)v(!6EYC5HC|~YH&!h?$nrmX(!v%m}YGuQ9b?J zop-Vs>iiE^HfUHGWrd<~YrPDA!ypRsh;G%lA=tbci^0B1W`NQI z3qa0+86f|_iW`C~Uo6G3=6S7$+KT~-9iQK}Z_k+7?(#Cq<=DNAyaPpXb&zIHL?NKkwZ?NFI9X(Y9W;Z0N8Q!nQXWV9m`?b zFtT-Xl;wP_`4BRJe=~u$al3VNTo!2zBUHhyX&u)E_LvHKh&nEHwrUUmyh3j-^DoD4Xps@ga?^}L7b62@* zlCbJE1S8d>_7EwTpZ-y9_3o$6boI?ujxCx!jE!XK@M;DI2EOn0E)p6wzm7o8WXfb> z9(SqVa@bT8QPZf}q8=4tp640niGq2Hz~_u=V-N9%PSN)3C7+yFcYHFrxrmCSYpO(xA@{^xWt{Wh!=CI5HKnKq^K#6S!Z3HPwM+(Lc z_4{ji8vOB^i^_8V@ny?7a~_+x;k8>yEKCk^8!`9k6q}yd)PZj>MJt&|AGIzuVW@V44jK(+-KbqHMcF*3NQLV4YgTcW(rc=1 z4u>UU58jzZK2r)I)f6(d>KXt8lRdt0^vx)ROxAnNF6&gH>4>YR3)A3RWte7syHVd| zg-i-gUkRP=mQkcE+bw=O7b^8mUX~-Iwpw%)DN-#BE$d4Wv+*tVnbO~-AhO-i8%(LF z^s}U{`UV2m4(Jx9YWHY{0W9n*WfN@d>*~0cE%r5v@oW3=YDqw>Ip<}dul{NNNhcQ` z*Kkn5op1LsIPeg;GEaX=YyaIM|B{$y`Rn^wu~jy`Hz8vSRCH}=(Ni~gM5NDx3Q z0{E8RoV6CoE>iMjl)1C!NY8SGWj=HMc{{?y*p4S`gz1tvtKl4+ko9fHb2P%z$Hiv#n zjbw)RehL?!?@WX2B_bCA=YsS!?FA|cFM!v!qn!?;d!7SwfU3wv3^FY8J&LpXORte2&-)Jot00S^n0OuDozoGp)tQnLV1zPm0y_lW>~$fa(7!px83 ze#8+U8#-=E{*7s!#tgi8qyi4TG+mpxem&=2bI+4lKYwZ9b$*sRLH~Aw zBKGh`)j2tejiF9gX1J_qR`o~lR{VyIjf^DTY5{pYIEKBU2h z5ntKpfsEyn@;B21@3&+{mz@2Wrn+o5%u0NT#;>7gc8!yq@rFuM(OOp7bt7*(Epk@a zH5#{TDU^NrbIZ^o-jYSUO(`9Dq5&)@`cf^Ckj@4&7Y3Pw1hwM7qo_RJ%9WtjBFTP} zsX>w>Y6+5)@Q^27JjNZzn+}g|pr!&#EUw(*@jB;je@c^-UU)9JIz@WjDq9~G)F4jS zozX_&!(YVIhTMh>W#^fS)bL2lS_2n`_hr&kU;7E4!=cZ7+}??>8(zIXo~T&MXPK10 zIeo^9d2d(Tn0T9zb=b|oL6UV7cd?$;!%%^j)uQQhB6!^2vl=JY%}`N~wh}kk&ESZi zr5~syDks@Pp*6QO^QpcStTKAuE9KjA94w_ak4w?_Gqjy+!VcFiJscf}Vr#Z-I@$W# za1A&QC-<-Rt#Gd0_m0}NTee*Y@-VPlkR4u>9o|?mu}^St>Ny;$)2DBTelssF-#+&o z-**__r*`#rtns3OB;8(fz1Q&P4Y)-Ifs3|(fDte;U!~>R+0(q3TVj}7;+R_^w0F$e zJ%eq%WV8~`YW`e@5?GUPcLP;cU_~tMCjd?Vu2^` z$NrLow_9mBrvwsP4B;ac41!`Zu71Abm)PCJ*eZkUDuWK-cXF%~Pa+~oBJ7?D3Oqn+ zuPSiHBAsy^MddpTJW{B#H#*}OPmrO;2b_P zN&DWgxyY`EW!{dbFs&8UURniNkD!dFW8?@BNV-fB45!ehR<~J?T;&K*eA+ylcXuq2 zg++I_M&+UR#5YVw@%Dmia*gWGQj_tK`OWG-U)nk6QXvPqX}bD0k>qDgR zSyaGuD$XquJzV%i4DZwz^jCkH+h{4|8PLfI+f9atrpd&ov9f&)>#ixIP35IcRlvWF zCb)JF^W}eXeIDjJo%D)Na&;!48%!N$hK%3mMH_9;YkoU4Y;0Md$7& zx0lKYwyo+eaoFkMqBC@pghN)wRsmJ9} zQ8VmUrkvrXOps$A@-I2&@v@sOMvE;@n3>C_$tU`~P}8*}aBQsCPnih)rF`K_VO6ny z5%!ishH&oPRib>@+eQ43O}=qH)73o(DlhZJ`s43t)vn^?!&DY0vdm@uzcAg(6r3@n zv?;VH4DCOv`zle1ov+m&pVfIr(rSLG&0^M%RxU4cZSUl{PV?-TIB zV@fwrOFIyi#K<}DA71fH(<}Mm1W*|MLP&74Ab{b{SIN!DHrVr z!ekOll&bW7vBDgqbdT+M8dqP&m55jAQ+?TherBBx(gd8g#24A9Ibih1^Fey6kJrZQ>}vY-@=|B%a##LLPnEsctG zLpIrViGxGdXF>WAn|CB)7b?5J3jLh=m@`bpy`#KLc0HOY4txUkXW`niEu@pDxI&}# z8Xj$cyXEKe-+)@vZMIib7Vlf=(Gl&F?A!e^J~=T_D+|DP-J!dCo`uXkVjae1Dri8l zQ)S4zQ0Bqxb)kKs$QfVQBJ}Zqwp6;R<+82Y`P}nJI}!K!BC3dYK4x%*_-Q*PhDGi$ zFHjCpn-)i~yJg)PK5iR*U2xv2Uuf9&)zYqa$%C|HGY3E!Dk8h;cKg9F2&s~+S>=kN zybSuLGDdVj=b-ZN6msQXC91V$Mnpp}dk(SPXmeIJdUQSP>b&8#x5I6>i&*Dd<~TmO z!vXs-^KBVM=iWy9F=sAaYtc+}we(!1MRKI+2g{4&HMVoz4c*11gK=Qpa@pY|E;J2X z%_Utx>%AA}7l_{Jcdh6+d_Dk5^qNT=wXXwR8+`Z??3GDX=CbcO*VZoMOA`tkgcP^xS5qwr#3YbL8aIWJ}nt2Ek@jO*-;vQCz{9=*<%3#JYXngExN)4uTp! z-C=t*m*Hx$+{|89z40}*){WN|{%X*BV`O`L;xcNY!xpd3$SKmOhJ;Mm`}hd0KlMql{HI%_`VNRv3y@5@}+C`#e+c0%sYKd*V{ZmRa$P>LpN>>HQJEh|6)`!k5IL4zs#I_5tJ3a|6=gF>a3JdaPsiBwX6F6VpfBg8r4GeqKi5MJn0~Nz|DWxu&Ajy zsUfM@@E~jP8DzS3pj8&;;ppV3j=Ye6z|H%;b+%O!+u6~>QLAgQc~OP;n{S8j>nI=% zkVf^r!~PVMHfDZJC0FED*{u5$yB6jT%xz?Sm{j9a{@LtMy(`ehMX!9cJDhb4K!*atinN;Z+$Z7kin%!i|Aapi^vpIrEYTxptxTtD* zq%pK#wVm@4Vn{EypNq3v6dYViWBOQ`B7r&aN}0Kr6U)@D%gj?7PHsqK)lJG}cdVl4 ztg3gcs+TyaNm;8A(Bro!k63=}GoBO0I|5>+`qju&U0E|~_?cdc%IP}zLkc@lyY>Dn|718m|_!8RleZ`I(F0JgTqu4 z*4ewbp=M+oLo5qKpiFN}&575gd4bw8BH%AxrgX4wS!h@SZFoX=L;`I@LPL)%ez&YV z7+;q_>3s{s$me&{{ ze4)8PBnM?ooFto{EsRz}Pd4pwmwC?&T?-}BC7u`Y7Tlx#=JHkWr^EsD=hiD#k#zotj_2F*V6 zeO>G@tfTIWL~iSNCYyj14zU@$5G7BHPVPz#Ye%X7%N?Qkl^VIMf4E#PD($<9KYlHT z>s@IsOw_MBw{QAkv%H_b0eQ^6yxvYmYu?)HW=*wuMhKPl+sxWWi7mP?@`K zqpm3uf{FYF6Maf6gS}&~y%X5#Jkw{4(BVKh5Hi#Htu@H3>mXsTeZU|)wHb5q<6iX= zRcC=ci`_>e2g_DU7P}}S2MgacZwfwuo{23S2d)U2XdP^otL=R5QB4P3%2i!#Z?M@v zXg%-+m3g;&i|y9s^EuOWtKJ^SdeB|ZoI~L=KOdIZ+i*6it=qp6F;t2KtR27iu{-v@ z0fjNFU{tnd6=sE>V!_gjOhvkcyR>Nz$VRRnjXr|BwOc&wKV9dd*(V#mF&|~hb4uNM zxq1F6n2^l*^Ya%ts}|jFM97?3Rz{Dr-tD&jxPMhP?Eul(Z_KUP8kq>09}n3A;oN156$#47IdHJeaVmn?8Jocf!(C5V&!Wq&82XY`8 z73Fm#1#)PZKHOgU8jk5ha-mqO%)V-Dvvb)|T;59ErkBl~Aw55j87uNLDCN1Y*q9%;z8cn@k5<3nz|U<9D!*3t z2chpqBq!Pkoe!FOgZ)Bb^T|u&JTPp3CX&8}P(6{iIh*&4v1eP-d$n(k40qdYymW_~ zs#`5g@UxN2YbC2zky@*mx*e5ktxb~tg&mAB z+-;V#k0Vz^vgJ$@qt3;4P{-x!q;{#=5!1uvip^!$I{C5bK@O5_Y3oz?M1j&>ZN<;g z8;uxMu>p=+FD?xat67!JDHEY{!GTVy42x6UQuM2F&B%_|L+>STle3KLTH+@DE$kP$q-5NcZO8CaAE8Z``#QNqxmlXg&jT8(I`Cl<;pD-ac*A5>uAS z!}=_Az60zN)jODhCkUMzY()Fgz^K%O!ctl%Xb4{1a^>cUS>~PfMJm(Dhe%9D(dJOI z_N(K9dBLI`%$)tmxJL3q@{U^Cb z0mm^uxscIn&q+|hzL*)1_BZKAIy7Rh*s?ag+?~r?7qz)+E3M274hNd1`q}-Y^H0X)y@BM6JFkOC^gy<3`P0Gs9q;fJ+YRk~PWCwlk_fiD~ zVG?_dty^3})YFm9YITXnG~48_$7G)(&H~RL&=(^N{Q^T$V zj6z7iE%CrfR#3)AsV)<$J6#+{Z!X0QlB6^q3@ealld|5J>nhh0BBYC_rIwhssF1A# zU&?HbNgeKb=2iFzB60VJ=cPx-zz+RRk&q(YgAp$|m3bxWzv3sFn=^zY;JW z{Qhzdi0{jbMX1UI%_gj4=YUa4>HMff3Gud4vZ0^ggf^e3fe)OLpR~Q@<1I4fD!{m> zim~$X7pb3qrvkdcgr|zf^6_Aj(~)0L2~HP_I53Ix?_Yq}i^@;GZ(cSv1#%k-*>f}d zr808W3fW*OV#e*suwnj&T+Zo&vgShQMboF>CAi%et=#dVDW3=fUk;lhOjyXPd1rEF zQL(H>Sk9|CSe(i!I*@qE@WwK6`JWe~xJ)TV9DoVVX+~pk_s#oPOHvo-x5Dy^ZMXO- zCZj^W;so#)IJKXkF}ybhO17##9W12a?If#!btLzE_#~7_`6&9caHBZ);{M_+;ON<~ zF~L8FcKSGh(oY05y)g6n&Rbu>L^b>3a!1}ol@EUKJE1Fk+hTTA?R0FcpRYL5@rb@_ ziLDFt{o>UnS_iS0&Lx&F$xTS>8t$x~cTl>5s#-j_F0!y{*dlSPPyDT)*iLsz%u`>^ zdDv@Mb}P8Uq?~ET<|I}RZADe}z@@YF3U~84*if0ytbCT(_D-%WJMee>Mpa$D-eW@7 zc|c-{!NuW8UB~!d|Nf1*nC_a?naPO6ODba#PBFx7jEQW)uXkwy$KSSd#^!=K{qy#+ zJ4LMaYBqB2O!j2PTdo592D_i=wu3O?q<7yR-7rTKZXFi_;P%tF6ce_Ze+%z$3DMlE z&kZ!Qvu=8iL}spsS6F$4CI-VV6TGAR@2<_4#gbBf9-RxRijGy?cGGIi)tBpcpC5&r zfzF=FpDk1n*B(J{Y;Q5V5`Ez*9JMq zU94XtZc?$mdDALM(g^WCxNUge%UP#Be#HPSzCh63D(s372Y@oCI3~`o$d?t@)v1pK zmvcQoW1$R0Y3IE{zx3o$$zqs51Qd7aM2kEMzY%^T5-c42@*qtuoFB2HLIufC8uj3- zT^8y8dhHGKPVo+)m|upislJt7-N}$kbZb0j-B{}??Xu~zep2<>cuhW_)g+eEIkA3x zoz-bozhuvwL8CmwU64qnQSgDGFp-Liiu_DHN)Adzr9s3X4Sf0S#72AsFla={F-X6Z zYk*&T1`?^10X9(|6P}k~6&vVAlDU;B$JbL2>)|t=*iQeURHkZ7Y6SFIGVmilaV)^T({@R_2kD1=hcLe() z`zGaBWhR>4d7?#6S$8dW*Za8pVkN3&CR#Zf&+2PMN3-;3>iCi6)9DI0I$Ab$p)CqC zg_R5Ic@C57We&4f^Sm~WGa@VqJpah!gbzomF+!Tb?X_|D4|wJlR|#TV**5i|K2|M# zMqI+#_Vr#xmGrA(`OLHbWzg(I_3NBQW1-IS2ZO0BJN=!*i z`G{tw@@lF`eBXiDJa3{F@P!D~U5;u3v=0JqRD7dtF?=-2)2lRAo-QDh2e;{UhHqBS zvEleiugTPWUi+OYzefKaKTi#C>~xauXgPD#R${mJY93@Ew+D4<`>`gz>s=jpcnMOZhK+3JuvAW z*uW&&<>vIaS1BG$Ee(QBHZhyiL_LK(frnebrs@9&WrQRx=o~l~Y1rpN*Zqo(uf86jNYkCRo(mL7eJJ}OC*{l4= zF9PrXmhfyY-UXR|4l>{Ft!3z~J>6V9`e$e!1))#wWJA)@K;OcB7nU`q}lF+fM? z5H41G*O+wn`tt-n?qgh)^DS1dn|6YMKReyO4mHC6xl#Ye|5NgT zpPl7D^~LQ)_}7Gx!%Jl+V3xzXVJASy5mlrj|1a<>Qt^2UasCAjnqB+=Dm}n12k2y~ z?qqt=E=Q#;5~+LqDd>&s_ct?JV}!#Ytvw-^$haOt_G%*9GLfd;eKkPZ8j~-J)VPb) z?2Fa>^RiRbZon_OhBa!Jn>~5DOf+Vdi4lz&RPzdvFG>()^#4bHQQkc989z%K&j4R1H^hLZHy-#dePhQ%*7^gN{q2IggpZU*7JzmUJn-l+Gw83%IBNiIG~fZrazd+2bAjW+v!y`up|t_jZl%)f&O28o~K( zNF;NWnT`klwr^$U-a*RVlgy26mVA37YdP31uRTh2XP?{^ zj_%!Fm(}Tp+T%#RMg=EHKPme+5G$SWK$HvOydn90Y2ioVm-xDmsMZfT*NW@$NlryK zoj>isu=euyZ7;U1qi@!p6+Twi+)K8J&F#vebPYF{5hxpYhAQ1Ar?KzI;GltPXPE?7 zF^RnIKJ6oIVrwFC{nefTVXsgh->#1f2T>e1SQfHqChU4N(V@)JkFWHyg9onr*D2gP zD(}^R2N`>SsX$w@Q-(la;7fnOP{n$R0q=AuJ)Tc5W$PE($<*~5CCtc|hG~7N&lxv!AX-BIwneo5!toYCt#>8~{Xdpt?TA^M2hZH^1@~+%h1Shi1B$*>!hv|>V z`N!j%xZH1#Mo=E!4Ypac+`*h2MwVv%4!`K)uF$07Y}nVyH@I=9-*iGtn~7|V+yV}eylZl z_m@Y->&_P;%xl{QoX44^Rf5qqqiQ%aoib+S?;;Z!ZyQ5(gMc{1as@RRz<2#HI%A>J ziOAM@fbT+#^JF*4lNn!Pq;Rw~M zwV-F|j_S4kgFBYfdSklmxkIF!NG~NUTRJ=PX_YB|86mBEy+iITJ`u@>LR=)VNH6(- z`D`{X@wSu*x;i8Jindazw`H=krLw|b#V@SI6RpL4ttqZ+lBW{xzf$T(g#C^BhfF;d zRXz4~E%^0m#QP}}zw7nyH+|oK^#PAAq`+ybhuA^nG#o*%j60FDJMgnRvS-EF!e|=R zMw|+0_vP>K$5=iYo!EnJs!%n!TtCv3rd4Az-;|VX;l3nNXx>bjhIJC%6wXr5^->qA zI=i1pBY9=K?obx#P=52jOx>aU0^AN|t``W)iwKLnc@Pw_ofY4|5CA@bfKL*@CuiVO zC-yB0_HDS@u_*9~1NdazAb}1I_z3Mrf_9TayNRIzJX8U1r~;78{0YpSZ2KR)`yY7w z9~Al@n9cl&&HVAq{4?yOqcAuE@XVen{zszu&qD0|hRpzKCN+92K3Xj?Y7(8=jmZ(f zV)i81|De+Upx&XAAhSb0;KO6np@ZA&!vk=7#Yg#ig8FqV*ntMv zfd_ya({Jqp zP0D?h+!P;d_ZPhiIO`zQT`m5?vz3znvQcEoN|<`@i{BzUuW%h610!&a7r15_(N+#{ zPx-gz*-EK@9sdQB9&}4~_E2^<>uo}c1mZvLAQg8Tdl?&A1Q_XT-t7)y*;2+UbsMiQC&q z+S^F|$CCDheP5fuGz?kT>6_K@u<(LCh-KPQ^4FrKzDe5?0__Q9?U&GME!p~$U%f#0 zExDN@o7o7vnIf8*qLA5$u$khUJOzS01*AL$;yeYKJOzC9LX3Z5`63hBW5kwlMtf3H z)d=xKkhw;Xl>fG5ZBgov*GgdW3lSY-jJw(n+``WR9atQHZGdJ1DIFOp`-nTV9 zDp(|TtlGi=`)hbb5F{ckA|WD2E<`R~E=(?4P6SFz^%#Nvi8JJv6IH(~!5~hWc!<~C z>qwcmI5F>BBjV^Kbmc<4Zu(rP$|EXhrX?+Kp_M=nY)Sw|qz_?WzoH})VC&WUemX#e zBPI5+bc^^7jub6B6(iNB+-4kS-1j(<0C~V~9Lm%5?0&{OQQ*tF572@h3INLB63SXo zK^cHWxM|WBtk7E^K7g_|%pVCl2b>2iiHF>v-#Gw1aF(Pj!~k0Ze`B!)R6@Kky>V#% zMy3=VQ%uVj0U;4#5zvUNh?EGqPZFOhb*Y#E$!O&vjgrwd@{5cJY>$M+=O2@dB)BT5 z#i1U5f}G@4kF={73@*R=30KXth7vcO)lCBTM63;JJ|CXvm0}A&?d<{ z)}^l&{a~}^H)@E;%sD8?x&u1)8;EPIz>z<%%erq-8JE#Vf z3Mv4BK^>rYP#Gu;)C9@~1%hfpX`n(-45$;74~ho0gHk}%x8HATZcA=MTE~3neb;@b zRxQNwb=$_aN(sBs^g64`#(88r za=U;7iUYNScL!e&_z!>w9}e6Om=6pOd=ID&G!9S?Y!3tvkPoa5cn?$#$PWAuC=UP! z&Ib$!ga-n4;f*tcOWeHqW8cn~fd+laO}qB)O)>^1EB~yRuCTAjt$bYZTKTl1xq`l8 zzaqTydc|yob46i=XvKR)W(9x6V}*6ac;(f~mlgGu_XZh<6^9*%d6gqoH3tZ*_L-w* zS%kdLV0QDuN(SN)@#atp@$)brVSb2iL#;!uIXs&jzw5}Sj@b78wweKx^I7HDhgMRcOs;^?ogURd#h~t$5XX6}C!xq=E&T@&c2!4;=tR-m5MroX>)Y zMEpeF{LdE#5p&^fkp$t-B3#1tBIm+r!qFll!b~D|!UrP6A_l@MBJILHA}GS)BC;ZM z!VcN>+2`5O*{s!l<>%?0D%Bgrr?j1fj_U@;4rf>Am=~C*nAeaq$fe4O%9YCb_{I1s zuMdHDidTw{4rsyKpd+Khpi`)$z4N{UrL%I~d_7@(X5Hf$>6nIm`}6IEX!*n;+MQWf zBHKavCC|;>&D}lnZP=a6jm-VvE$v;=P0_v8?cUwqJ^pR-o%W6P{roNO4ex!^t;gNf z&DA~TE#wAruW~znGkz=Ro8>=VeMzBP7x*58s zyDh%6zOlZC-4fgo+^5{?+%4QJ-1FTv-!$KQ-d^8f-C*6v-l^WKJXk-%9tj?eUP+4+ zu%l$Y3ZTG|L*@+h{UJK};V;3*j~{V9l6}PcNc@uJha?q0l`s|eD<(5K^Lu8j3e*aW zhPS*(O~@W^Jy5QYFp>4&485j%Q~c&I5G_zqg0=+pWf8m|LLbowgGx<#b&2iYUA@1; z!bHWyfV_iXLeNyuRo<&$jiZiZjAOB)vSL)dtHP{8`}Xb|<~Ot>^rQDjSY)VV@5!*T zQM2D?qj|g)k}{OT5H-7r-))3!)z^$h7*0V&bt{f%bPE%K|3N7$ax_x-_U z=4~5c&6^9gu zTZh8JVBrLzDPcMxI^heUd?9?{&7q!Q*CE&8SfQ~YvEizr6Co3!LVZ~P*1X7%)K?LF zR5CbFw@(D6(cCh3GRQz=*)VAtnL*&7EUk2rj1|yIc261~h%cKgtt~SToR{U5X#zIM zdPrZ%U;;5^Au=k!Wh!fG7&QU4k-D@d0gr5!dH^?$vJBUhZ-eOaheHC=kEA%HWTbec z#97!`Bw6@bgju)_5LPg2Bx`I{R8>q9kWac<#uMl%do7J6V~{_TN0(ome>jCUrN}{B z6a_b*PZh!k515te@@f;?MO;Q+#$rTa#Kc6zKw_em!OD@!v13tVF=MeTQ7kc)5tWe2 zXom;~h(q)t_%QM?mNbeqk~B6eDl0N8+Pz=@}7dmMEfLmoj6A&<$4Xdajt zoETyoY{!WTVf~`QkNX7t1XZ%Yxdr;=F-);>uycIk5awXy;N_s?5a3|p;Nqa0%G6EO zjn~cAP14QyDsQh~uZ)mGs2~(clp1IuG%B6GLX)gH3ri{PPeS^Ay>`6+WUHX`%^Dkq-9vpkv7D{s~xRWz$C zbv?fP>5w*b(=v3@8taR1AW;lJ+iChIKwo?SP;ksbVe-mNydJX!kDs*rP|}<6Y!zMe zH3ok=GA$IwyXpURKhPvdCgvgI`|C+$rC0SWWIHg?FcX&GE|T=qp7va^unW0Oy1?q+ zCpL-O(%v*qqE4v((RSND60W$@u@oX0vH`DR0O_;^Q(U(x-@~CO-mE6#MQ;`_RV;>H zIggD>!#h^r7Noopd-K45QeH>24soR^F(ldTh`4y{k#n0XjN4E4Blh0W++;RHCc>SrrVv4mnEwM>a?gI{uU8fz$~yBINUpZZNZC#( z&`o(D&}sQtgOR@RW`?st&Sn|ntI{U9Oy&E!Bwj^Ij$nKR@V9ZlL;JHR(8L+ z`E+uiQN8zd#qX`n1=G<&5APCBMe?rL_Xkfoni=nHCjx}pUpmQi8w#1X(a;f5w0>Q4 z4wogPo(%<-zFRfg&ax$qTQ|hyRBtE4W78s}#K6CBHfX?AeU+67MLWU=&4wb}S(9Yo zs|hk_v0J=b*W<#cr;%Tgbh-qWtO*jJAEp^B5LBL0mFb601SZ{6e&2eWcgeS@!}@jb zpWsP;s3@cX58nM+jPY`iD(~4fyg+-~#^lbibUn%(yRm;tTYSS@R>~Dq?r;ZtGd@0> zM2g5^_zONgca^N-4=8#z5QM#U7$`Gd~oY8w0t~a`0BJ?WfO1wM;7ZjWA@x;rMAY0 zc|S(l;e!L)B`f>=iJNBLQ#98$SKU=Qbr#h9&HXT-; zT`WlcQprQqm%8aWp<~SYScU;p1m0pdJ1CmtJk(j&Vl|vOzA&ScjRdt*;=jj9l)_PY z(n;G3)!+f>I;&!U!hDy=k9co31IxvGLFcv#F{J=inv3t!Vu#TSaWMU1#OJ)gOL}kW zh3~=@fvY(9(0g%pZ7b)hRu3hU;60N_oA;%${nNKwyn4}UWBz(=ALelC__{w+%aVyI zaa`rzB;X)Q_d-1#Ne5&K5*8x4&lnR5tD8dt2&P*v%{d<$(2r9Jzc_qlmbYFx7}Uk` zx_$|mAYuIpt;VGKx;?JTfXE+ZPR(qcSt$en30|dxEtHk zbr2IUu3 zcgfn1l)O&~weXj)1A!}lYe#D_AB>w>9_kowvGXGyU&47q>n9DM7>xQDlBp6_goU$Y zVni5CLc6;}Z!Qm#9=6l!^kg2~e*W_7>8#UqD&+>N$L!M+o5Yb7q4r}r)Mc{+CWaL4 zN@ev{T3-^fd`Ko7KtxIax@i^JB-+WXJwc^7^wBh7q1-i(_H}0n`|dXT47i1J5$wkV z^K8jpeLtzbQ8mVB4fpPm){zk$a!yn(L^mMUOJ4_Al92)LP$oB!3MMFe7zuLTeWx*J zSdk}0A0G49>Z5XXSJH;Lc?>>i>};9FFa%48&`SrRY^TPRDb4k;m#vqrd@SBqnR6P< z7tHq#X84??(>bPDA~=Uyq+h9lrqsFogO^L$Hf4G2LMwchp(v*ZO_&R)_MUMsKS+C$ zQwr&f+%?wp19+6Zmv%AL2PtLKEDVj1^5-g@CfeNSJ4&{lwENJE(2O*wWbkBU$S3v+V7^?YK|P(w{0@3 zt{y)~Mz4J@0ZOxr$!1rN@EDJ)iB*$xtZOXSN^9t<HqB_2_DFtD;2ZHZ*B-$t*Q)F2`6^qh3Fm$5o7Go)NJs3~#C!j|ECgz~M{$jE z^ywVOGuYfP58Tj_DB7NhRqXo}H!b3tu@^;Qw;`cO5fOe*$IQMy`!`o;7i7bxu}fAt|$Y%7(`YS?Z7`*)KP&^y$GiP zwE?xOz&=m>MRkSt>2ZH0xVrb^)bMxCQGY{1ox#W)@0>HytIwfq%r)Cd6Aafi&xH?J zXK(K}hIx1G5K_YnN!F1$7s++Oek~{Ns8_C`szf!hC16Hsq57Juw8sv{B88fIRFhX0 z-6d6O8$ZX@1C&Iv9--c0cQC~HK5Q<9Ut+Bk(6UYxY=!5UviEG`-}ll7R)C^}OcsZd z4kqmvgolh~g{y6L3C93qBOQ9@QF~Y&TCNJ`vg`Q*m7w5jye_Yy@J1_#5LH|A<+lNf zU!JwP)HCL_&pR7=mIa?M9Xgw^0*afeuQ2^fu6`~H-F{h){fcsWjd%57?|4D#Zr?Ix(6@EcE#YP22{bE%{6-Iq*ldN;B zyWM$@MOPUQd3`B|H`TV+wkDh1rGDx@5zmmTnx>@Zsw>OG;~Spk4ZDDe=N~7QLjHb# zMm&6@uiOt09%K%48b}{h-B^t>pIfUG7J7~sc=p3iWZk9Q^Kbav^WAZ86+@d_@od-Z zUnYVmHfuKPL+2}}M9N!QYdmANjMt3ULj~iV6>Xc{BJh6AJB<8-Rsy^nDya|C7*1hZp;9JM=Uvt**u! zDvc6e5n~sHFeS6*C_X;ghT15A_nnybOFocLhp5|7cbX`=kj}p94<-O(Y-2Uwm@htK z`;Ap6ynMBUykQ)ppE$$ixS*lHWNbYZ3p{8eP(Q++sxIjlCRKYRg4!icjtOcGRKXFb z)VI~O)V2G{Vb5vLgJ4JSBDhGn8;Br;Dnu&8%NPXcDPVN?H}Cwpzr4sX9OlERJo7}v zU_bCE0ADXzUt3q(U|x?`m)D?4&qM!8_sRfM526b(P|+LL9oG|N&e9$) zt0k)RC|_XI$DMEBv97G=)xXzA(M2%`*OS#B(j79O(<|1u*0nZ(=@IA>7^LXEMCs}- z81U&g>oyyB>Rsz&>0%kg>Z|ImR9IKSDhVo$cte$~xmGfHyIIT>mpPj{D%a;N4y=j4 z5}Of!Beo>A%P`Hb&#=m{$uPHTVrgKhWofRgt88psdpCP$dryQ5!kxs4 z#Dl~=)2TsVTyR{7Rj@4+wRqgdLomzVxWSYTeDS71qC zOkhS}XbEBX*Ko`5$Z*&2z~1?r%QyEUrz4LeS2DLI!B_!RK~09YX>AUF%>Bssz`uqBS^bhr6%bUxH z<-KM2^7itv;Ev#y;E~|2;I<%a-^smApn1^2ZDq~4`L9aL%u#0h_}bs21F}sr1lb-L zoNSxyID031Kl@MiVK&To(->jAXAC#qHa=eeyS}x4w7$E3Ai61v5ZxF3^UXEKJ;&3; z%@g#2ENcki?ER1(K?ncsb(Za|noyi${lhxKy2U!ty23ihy3RV?y2u(*yi`9~-(SC4 zKU_aQv$eFdw7>Lc>2L`q@Ym*&5|0agzAFs6)@OvblF< zXk|m_m(Z+GpU|?})4bR`+C1Gn*u366)jZI=);!X@;MwE3=sD}zx3DL4AavaR_u!1_L9l!2_~QN% z5HOu{3VXbKq74vx7JtTmc6z3N)_s2aZ1K$ftn^G0P#=&R5E;-KkQ7kaJ<$ETd#?Lu z_sUC8J-M+jwkHM`J9NA@IWa+Hf2Ac(UW2?EXi9-Ehg281EH3p!^+$lIn(0?lpsAaw zp{bdvf~mKuw&^!he^Yf+8&m0*5PBn1DN|Qd15;~LRnve?wN1HAuT9NOrA@;h)c-Dr zoc@F3E0%Y#89P7;#kIH1)V#*gN!-cFN!Q83Ny*9ANyEw3Nyf>;$=FH4$=ONI$F5lGO7 z{dh!7hD}C7hEGOFhD%1C{UMtu8<0(!P4Lo1kr?9}6B^?hldpeV$5|&^$6F^B#TF$I zB@zXEL(9R)!7@Sjl>PuP>L+oQd4S4&BK!?JgWkz~E-?FvP!3wFqXyY=O2A# zCyFl0Tl(tIK)Fn}EG9@V$Sp`EC@9D($RS80C?d!t$R{Y)M&HKWM%5H;d#NC|Sl-w-dgxu`hG~A5dWO}*!e({y}1^H_E zI&{!#p3aCmI(-X!E z#0ceS6Vfb1^>XYLt`sqqFy%2-Aqo&>6*(0Z6~%F-ad}=k0@{>MDReqC3$zCD8Sw@Q zLhd5U-1wEfh>`INu zCdRUo>xkC+D%@V2>Fv6Xz*5*4P4v6+eBE!`&M|Mw`v-dam?}YQ1I~cF!ONo(DI1#F!1p3Q1b}!ur*RN z@;5R!ayHU7iZ*gI(lm-RGBxtKQ@HcHbGuW`B@1Q<=Cq~mm#Jy~WgNvDM-7lJpwfeu z{?eJ%;nun+|ESARVCFSY5><&}-*UP~aWGt0FloHVZUzG`3V(u2z;odM_!Qh3 z9tmfF!{K`HR`@Mk8eRy;gU`X;;TZ5SxC1;3E&_jqOTnq(+wjkDF1RZk;$}^wQ(DTc zz0A~^WM-MiX_Qu8QEp#>FcA3R;>7&)XsRVO;#do2x>S3S{m#w4WB0wFtu|=fmzMR`MI8yJ|&D=aNa8U6*0`P zaj|oK;u7X!81K`d3Q zRIHb|2sl&9QW>?9x`y?4t5CHE$~3f=%9hK*%0#su%aOG(Dv8v2+H4Ky`pX!!X3DL! z#wycI8cS?#=Az2xv<}L6H65y!wHxbgRp*|{q_kwqAUauPf}h>1%JR#&Ml5;s%;&Q& ztp@C=GRF7n+?NLJHxSe#bFJFj^fGS$&s=`l zkhW?`wxLL+x7B6l{@#A*oMKsuPIZ~F!J0;AskhxFWPfe$z6?vdS)06ERL`%it@BRu zvXCU<^X`R!-FOz-o>{9VYexAP&(7V>9SnIlY)@uK1~#}$yH~VR1hd-R+uMWT?FkneL`sRa8|} zTjV(QJ-wIbr>)F9xRlU@tJKPN44l5ib8d@2%Uq?WU0-LVJa(5J!((9Ew16mEGI0H| z=QK8zj?3e~V{JFSU|0bkW;$!@5I7#aKZp8q=KO}8U)~n^c0cqy#66rmlsqgxggop# zG(3zxWcs@LfAN?12l;FHJ9N=>GrVLWq3#yyW(#27NEb^MOB2g-oG|%ivOjR~vgYb_ z-IdEVDn9Rr!*y*hsmD&!=KEorD%Dp@NNcJl?_24huwtWYF6IF8X%hyD>H^(KSF!yk z%w9|WJAQV($$I%6IF{xc41S$>sx#lWw+pZ8dl)Iko^dHu0Sju7d>Cp;DhnG1=2NoOQJ8=G>BqaiC~~ly~rS2<_UG@ZJp=VU+F|pisoxi zE*D-((!r@}N)~Zd=a0i3Auf}wh~^(dYqgz$Eh<-BJ=SXBR;wdAmX}Ug{zxL^xz^CT zH}{I0!9CJFf_mQ2*`n2%8$5^WoY!=Uok8c+kLnavF~vMrB0oqM)X;$4W~#5*@{G!$ zF#oSIzw|2!WuGzqi2d&=4in^Nu23mSrItg_U2f*crwp8o$-MWlez}^+o49{Cqo3yA zhptVL7XW(6CD!&Vd7O}GI-)LQ{%-dm8%_`=GHmJmHHwmMiGP;Kc9heRyw`I6Fk{Sz z0q5w^a^sc|!?*4SrD48r{Y@_ro-g)&PfGl23%Y_h`L=PKH-+kPb904iow&#e-s(Vp z!?WUcmTc@UdAPrjOOyO%&l8ZB5uWNt3jc5xKnNFHT6$(~M`poxmzL#=&F-0;55P|! zOqU9CV zMC77@cI!;RjNIswi6Q4ujoaNuDrdJ%K!2#(bIXl2?Ko2#e4+gpYqG6S`-Al?wetDQ zsY|%M{dB##p=+a?;XkEXzzK^P`fy0sGhMx=N2Xtg1!!^YS3Md$XPcgxtDS_U4&!d) zjZHMucXFBc?KCUW4zJtsJrEA1Y_*-vG`MPK#kql&=1kw+FeTp$TfMqM`ddoVAF0;>RmTQ zWxh3ZjOfDOBtJh1@_KclvxPUxQ(hoiuF@odTf+-&+$EMoy_^)Mj^QugKOEa19PaDl zGqGNE$L5DSRkezP`L7)1W^Soa3$lM_^c3E(G-@_fQqvQ{wpKNWIUKiC;9w=YJ#+r3 z`WeE&Lf${dI}eoOmpZ!Ry_4Il{9v?f{anz?PH#3|YXq3mUq}^-_K1W`dsB9z=!Vrd zznMyDnV?#uYQ)TPX#MBnM82fE_esqb$+j6J*hb!?zW;mDu8X+vQE#7%8^^|R zr<8zOpV$A(K?{Qhxs|6xLeiZp2i+m%cER*lW&GoBRB`L1_M`@EKiSmLzH@$YNJX3M zfz-}o)@x+vVf_;jNs3wEM}{9?sQvZ*;ZM1rPxX8w{z*N0lj*bBTqmbd*~p|BfcHyX zCFHkCF|A#TKkdGsgzGV3uhZUt@_uKf3Kbb+#|{8O~C>puBzK> z%%HH`aubQ;Zy>riMR04_ZK#r}-6hTHfJ2>6t6tcwPph;Co2op|&q+PJb!wr1-r4nN zzwZ1cbvRuOeJW?B(+>e5-N=?=mOlSPB*nSQ>tVx7rsTbkU66bfda4QLoxq$QKeW+w`aU1u>C_1pcX4zOL9#8ocHY;! zk>&EROQaJr?Y0cUu%$uoZNE) zCw%PePma*>U(oXT?EG!)gxyu{h`K#nPfKecmGT%7PUQPu9&?O&XUEHat+rEdhIaQrB5%LHt?vS z8b2;tIhk6h{!{&4rV{}6B=bkQ#KQBGzx?@m<;h@FIW;9(JAIy*)UJlz9$aLZjZWJA z(GFdqi@7Mj<)4M`Ppam+SA-AAchcM%MGya2c|Zn5YkJ&9>!Q~q(PJ(EOU``1AE@+m zxCO=i>co1~iMnTgDKglh3Hq=mRmDAGLa4@OS~XBGvSKIcqPvb9on@JvL`njhFyD1U zrK^jc*zFR=S*r<&05v%S>R|7y1AalR;h*ZFUq*cT=qzoP51KX&kIz=hVXetH-&H$f znT}6879v%L4_=wSHIx9@INnB~f1!gb^|KV!<6s|ZL~$3f4jyxNX-{Uq_XAk^;g!5a z%k8l@wwR{B>QeDF+;1MZumlyfo~_k$jjdMYg#=n+z3CX6?FaDJq zS?BitEYY2VTA6T@$yBxSy~xIA)i^bYB`&98;Y;@FmpLhFw2E{unXEwB*KX_Av61n- zj}0N*GW12epsr7{4YMiU(<54wGZc+`YZ}UX!YICP`w-WC{KW)u) zBKRS(*4dbDK4o9sO7)hMMxgXMo8b{}?$=pj;$RS(8EmuUHr<)Tc15bwFi{(rR-|$k z7+pbY6+V(3G`0ALw)M%+RJN3C7e&oK+-;C)u0~1K++f&IjW%4=u}&VYVZqQGD;MHY z|3K;z@?=-YqpjhXVq&NhpW0X=IhD0#G#9rw%KjchB zI%H5kFW1XX{;60&Jw2CoCUFmhCfCZt{teH@(bH976g#Xar<6u))md|$0e%Tk(7VJo@&~l#}?RDn1Ox zgNjOI(9Ar{#H|3WEeNM!q|cJfgU%N$Xv3R+|Hvu&bnE(dzvd0;T2uEO3Lf7UIYCc6 zWb4}IXhty%7EWBzdsWbx*o7+@tF0)P!&$!pbj($~5Ovckm^iX@wEK`_GhHljVMFa# z6n3o<<=CW@Fr7$a1<51REWrgj=!gR`F7$SiuxU0+`;)L`83??QLM#VA*OYfJsQX$6 zcL@b9RqC2w+)`)L)@-us3OnZ~=X}m3A!^<1%-_04KDlnGR*=hiavF*&a_084i|_{5 zz@)>-xon_sfFH!u#Ir?vo1L4>zG?B4ebc$ry8P@XH)nGBW$vFjzcR7%BwL9Ry!4Qj z5YfKZVdh6xUbI8(qspU|O8DiXj(uelf_o}f6s}xci4SW*jX4;jZ+5Dow;#EZ;bUNP zGOHs~EB5+SpES1kZs=(KsHDro%FglUQRFke>?OIUr)W^NK);eH=F6DgOsY=m1{YVF z7<)C;q+|Rc(#C4}_r|vFW$X9G8oeSUJK^hk2gJcBnjxOfK*ujF*SS&3s^oHWbniK zF>HT|3LO!~2f3TteU2~XC$4k8U#d@nYyof)pB6=3sApm+<>A^u9IF&iwqL1VzF+l| zm!`qKnL=omSa-4OK*k7XUSZ7r+YODliCW2GjsYlm3KQ)75@n zB1G7GkhOm|8f7)tsk2+WM96rcwP&pj99d%3gfHbI-Z#a3X-_}(gSFBuY6TT~e{IW2 z{_+{CJKp@%+9K*hxeID9ZjabMCae?!BWpU69?H25R88@l&;PL2)sIKL$|9EP=i@W2w zw26`0o*tcNp1zeEsy-a}Fo+88%rX7=)0XNW!k(fo?H4bVP$Yt~F6S2|m23nFolDd& zLMm8<8#dhHBQ?B71_MA15CX6PpmITS>F;X02L-8OfOj~A;uh@CFF+X_LMaPjs64O; zCr!eF7YYL6W9und5JHoH^VoW-7SvD{U=!|=v<2JCMU06nps@26%1dP(nMvmYeOLRQ z)(lsvpEfl@nH`W}O2yj?v=540e2e@4Z)k}8zit2LPXCvo)Tpqt*5i6`d5zf4)3IXh z|4^RUs@MFm?q!wliVp)W9S6uf`}YCQAfGRRLUG%9b~5P!f#`~{tjq#!HQ~Z8B4=Da zGzd7+lj?ENCB7|%rno4C`-Z4WL9&Sy9^cu-&(34`xTXDx?)Suj(tvnU~d-8E1(hP4BK8zkL-b+a-*7 zh4wv+o%ge2n2}xs{T3$Dboa0~QT~gvJou6&^JnPk_c-gNYcB38_IatUxK`-T01rch z`{MP`{0?dQ?Nv99{x9E!jJq56wFUSCY7=me)zG{K%{{;h-~k!FfIKQ$?KR0XtgJsc zC4CY9jq^+`X(MOi9mc}^$ zpi~3byVDx`I)3{v-)W6KiSzzjcUt2jsL397TH`8dFM=i|wN7!@wH?%s0kH!cSBCT- zQ6{x`VA$Dj%WO^x8ay+Q@7PAI4c)hm>yJDSN_Lok44R!XyL23-!4h)+CG{)z$IxKs zDEXdm^jGwbxI2*lywvA;^i^W*zkfL@Xy2o@Xq3$I&>Fz(%!Q?UDegd(m)&m``8NYG zvvZ%4^-r0KOXJP4$7 z(?02{SlEiveeGyH(>CJhHQWyjNwrj*Q=-WErmXE=mHGg?3@F$hdKf#+E4a^N$x z*CG7`@+**rZ_xbmx}ERNm>`~u1cvTe`|mf6ggkfyD08u)!^sE0EKzeRg-(|`sb ztTB5QNJr(*WqohCEN8u}2crI|FI0S%wpJRUMeisgL)tEgN_fl*EG-RInx`|!MPMxu zGc2`o+=H_7rX=gf`K3O_50lF0ZjoIr(rl}&htv8wEUTrjLVvwG4F;rEEAH0v5nRI@ zXk>F@(K3HX(idl2T4QMO;*3eXP+HFa`5g=C+$!I(kfkkXlIoE9DzqmQy_7FOPe&8= zM$XF88Ch*p%S^4b8hL&Xq$A>Q(#Yj&C6xO@mw7eFPyHflz1iJTAE3{eIZiqk^^@to zi^ZAlC+{q|c!juH_LtJpYu|B^+WBJ7r&a>Cx;TS;p!+fMuz1`zfPI0m4BQIbDJ&#= z1lNC;R5Ns+MmlrR-5Tk27VGUXIu|1?-?>rd4HoB3YKyi5X_Nsh#u2Dn8j;C&bnK?R zrKi0dX;gI$J36v2;=FIrJ_h}G$x;>Vm29U+YHy1>tiFtNKv?0H2_el1$v^OGsV-Lw2dr02cL-NKRk~j8{ys?MmjXfl9>>>FU&d0M$lXt%il#Jzo6gL&4r_1)hgl4T=FH3*9B>xrm#zY?a zj7+X6&50*y|JX$nY07NVCumcVmgDNHjhCKx+PwB(mGl|;(W(+naa>Dw@7?y~l=2jx z^2qn+r2IxtyKa`tk6tzBb?(^7{t9(V@f=G2U$%!QuKC})lP6`}KY%?sKbUglyKWYr z;ods({kC!SNY^zDMuT|nvc>(aeI<aR1H*pL^Vitmuj%;Zq*RgM^!^r_o#-c?o|y} zol%`tomc%ubwTx(szdd*s#EoMRhOz;&8S&5r{>iPwMwm4Yt&k`PA#YnYLnVr*hN$w zQj6-aI--uMW9qm%p)OM=)#d7xzzIr0EocOtU=U1#Rj>Qb*%~=%QRv=Xg{n69gg*&4=|51UtvZu zKP7+fwg$AY`txzD{`?_UfBuSXW6v=AxlD2OXP$Y9tL1KDe#_m)eVuuk`v$j)&2Zo2 zzR%Wi>$&ypEnExN#x`)L`2_nge;a>0yM@1lAHY7%-^Jg>KEvP54`X-o!}*cy9)1)* ziv1Nonjg*X=ReI)Vqf4V^OM;Z`6>Jq_7MMB{{pbL!A03YMqmvZvigxZnMVF$Bn~b%j4`D6o6y@#8zT6Du4&_d6rt&%EFSsu# zf2aHdH>a>qCW$-?Ye~P1wWMFcTGFp$73ue|esq0dS4{4Qg)d_LKId-6Bm@Xa2*^yB2a!ocKx8HiA_6jm5HJKx z00EI1#4w5&WS(aT^E}#G?0b(^q_!U&r0>0tXIpA51w=%Yx6ZmZ6fk^5p{4daUw;34 z&pl`Fwbxo_@3rp@2tbfVxuc<4v})HCF$2bAq@mrQjDas6LJOH%U$)Ry~-!bSnUI~J9ZhQ`cikC4K6T;Uyd}lP`PzlvhA5WnrI-(1Dp)ZCa6C?53EnAAhf`<|)g>tBg255p7 zXpioA9s`hu;TVO9C;}^~WBUX&?V8j!fzO7<5P;@SA`pWzD34mGgT{CgtI;VT3S- zS;r|WtRk!}Y$$9lY$Hr!)^&Oc`wCNpX~GQQXyN$Gk^M8BslqJbJYlwQsc^M$W9G== znNE&ykMNN2gz%*Bl<>?5_NsGMcusg;ctLnkcvX0VA8U)B$=L6q#IN$pgnKY5pDf7F zxXtsF<|p0b*~;+DR*;|hB0MAgFh8|;ZY!OKQkc>CW@NruEZ>Z~2aD&MWn@gb3Q@Wz zBl69%`J}~bLAmdx<#~<$?n=B)<(K&%ZOMGIM7~&=*Uw(O+NSaPITf?8086nJTd@a6 z@E%U#Bm55M@hPt01}Q2)Q4~w%D3R(@Q))+DsTU!Uu6 zZWuaSe5}+)RQ!BczX@rnt)b6LT@7h$uds&gi4EHwJ0q;~!V(?t>6YjS@W@9sFO%8ToH}+yb4&pG5<6UY_Pg4tONo}Yt=Sv6bNS&xNB~cg7 zoo<{xeJPW(XC#fHS7}$HD*O5w<{S z^^LlrzNQ^^gdJ&nc2PTM8@qsAP+e0uZP;X6cEDD)W4p9NeW|Xiuk1p0VY`TJ+nRRB ztU8n)r-sx@EE+_qG=yH_Tu!Hq+s8|9Q#S3O-L!}Ht4I~4qSZ(>N@a8X8hR=N{1kP? zJb6ddiWwVj`Tp(R)#?M@>-QeuBZ6z_EPn6Xghy;ou2sGrybs_ND(NA4D%7sUt+wNL zNe^MHx7$my=jgrBc+?IG{JO7Ohs?+H_R9{k7jmUq7~T-$Z$9r6%fNyq=gd(PVie{Jl+ zyZJQPcW3<*t;pM+c&>H*y}bWz#AL26vLA^>dE1u2Rk)v#!!edCpE-C3s~@p-dD~f* z_X?qG9*5~Xr!VIEEazXw(!6ah$Ge-{Ct(KWb4|IPD}zJ-f>z&czlCOqvx}+s)lbw( z^`SbWeyUEZ|4{#_{!5)w@6vkOKpSZjZKf@>jkc>FsUNHN)X&t<)d#ed{J6w%8{dD1 z56$nPT?^n>a~AixgUif!)fwI~KG^#4_f@TXxcvuQL45me^JP=Ss?XG?>MyjG)~Ua$ zFVsc#H+4x}R)402^bRee#k7R?2+L_Dt)kVmMqN>#tE;q(Ry<%<_&rNSc>j9v?rQKM z^!)v^aaSZ4yr@y znA)f|sm)wzPvZ*wRkcNJRohgK+RnZ0RJ+t}?kmW)rE*dZp)`Ll$GbVjHfFG6U#Dz1 zY~680`_|zxwl5mx#l{M1ky?XFe18(ZUPGyBsamF%s}+>4mgIY zqQe%Yu|?@LjIGF^>Cn=Dtn?qR)~d~1#U z19XrM(P275N9hi73O_i-NYKT^L`zrqr}{+$2E&r?61<@|5hJf184@74;-?<7$u#&uyy zl;Vmc0cCi8Er$x6mz7ZkRoU~^P!qNAI2xe|dgDc|pi+3nO~X(O<8^lgMshvnuf8+z z23J)xF-xA;eC}Mom05W|*&}3M$ys%473dUR1uFTgims>I>UO%l?x;KI&N@kV(bM!2 zy;LvPEA&de%8hmt-D++Px29Xmt?f>7-*B_sneHriwm(nn4{o)ZdRwcN@7Jo{ruXW7 zdcQuX59!1Dh(3B}Kf#z_TrfUZI#?!HHuzYuT(G>~n>&#+>NE!Gy7xS~-*rs=*0D9u zSo!pxfwf?9b=^`>1=b*FAG434sQsmV9T6PM zdWd3c`f%R^^*~hBFYA|)$Pt`|YGP9jj@vdo&NiLI6C9fl(N3)Cs6W%6;RSs|-#{*w>fiRS&6RQJXK!WY zzr(m5)%?_uefgbh5iF7KZNBsBuSQ7aPH_DSi>r)w9M2|v-_!iQzr?W#D3IeN8K$WN_HK1nHnk$SR)R$7YzRTeH zVm#LpSzI?{^X_Ri?z@Gjx{D(RsQ+7wIb9uq?~93RzKBjFn(juoAg{ z-@2M;F8U(6hz>wk(PZ8W`kG>&5FLabqN(U5I?h_>D_urUU)2crny+@8d(~I3r2BG@ea)5(KTZ>!Bfl^(S|tyZJEjF#!Rt~GY8>0W~%*j=1X{iInMr&`I@zo zciETmJS-mFMOZwx&tUP${>qF&3udhQH)b4KGUL&TSsKqU6VRGj2G26fx|f*ctyRnl z?iFT5Yb~>q`#H0+dzo3)TEk4VRx_*FKV#N%zhO4CKVUYpPcs+Z@vGdp`}{6JhdNMK>KV!+Okr=0V}Ip{_UBf89e`<~$<`KM>9TjoS3Azz z@2eN%Z5NI8c8JD#J4NHYJ))((U7`uzZqYK{UeU7NKG6!^0nv)yLD5RyVbRLo5z$2N zsAx4z@Z;w#mnUeV#BY+sZ?YdJYqK9AZ?hj8Z-XBdZ-pNfZ>1j<&-Zw|=li;}=X*B6 z^SxZgTjxi`Tkpri+vvx`+vLZ?+v3N=+v-Qc+vZ0?W?s&9)>csbL{~y>G-k{E|09Y* z9m%S?e)gcAZ;$-?R{z$kfqst3tI@a4)#4WV!{4Vj;GIVw`~tu6pLf+Ku*{z;&3?1P z>@>T~ZnMYiHTyj6d7kSzUO}&rSD0J$f5+{OGx#-rk3U$`c@CcBPUd;=R$cGTap$@> zJ$U33pX$HL^@o4?M;tPYu319IO-;rnubO;owP%csA*)oKa< z8%fpYE{loJ_GUZpuqd>%L^3~JgX~gXWhWx|KTaj5ij(M6cWOGdow`nar-9SZY3w}Z zeB%7k`NFyCeC}LvE<2Z;8_w6xH_lDXn`mw6fVQ1KIe&KkqN8SAtI9F1ZFtzmF`hA|kcrgF6gRQXSEjnDW$KzIOk?w;X=U1)jwZ=;H!qkz zrk_bRgUk>!)C@P7W|SFgUNaNT6f@n-H1C@C%=@yl?9VxwV#nBVPEn_nQ_-pHRCTI3 zHJn;b9jBi2xbuY5$Z6&@cUn4aopw%pr-Rec>Ev{FlAJD1SErlP-FeRG;XLpB!MWgk z>Ri*FE~pFZ;<|(`sbh309joJXJnvj4dL=o(YXol^%h<*>K~vB~m?#r%N|}nLnyG2( zm000040tKc3001BW3wWH>m}hiV zx3b42jkISp0^4*0w$HJ#P4B(;-g^sRO6Z~YP6C7wdJQ2Yq>>N@m@6-GC_Fh|iM$%bJ|E;5+Mk9m(k^HD^LW-m-!uMpd?fC%TLGL{HI2^b`HX05MFA6XV54VuJWsOq7je zRoPg+BLwEf0)lWj0i~kWG?zZ1Pw6w7M_-5nbeIm&5jtigZG?@oL0i){wvB8P+srn# zo9!n1tKA}-%8s&|>@J(jI`%(hzPk=Zj`^sO|l1%l-uMkxl>%0 z+r=a?nKO&LqL&`22g%KHhZ-Q)`IAveR+c4&!kn0g!bGI#Eo;hJvWzS%OUcr5wcKrQ z(nz^Xc9s=nMNv^Sm(65dSx%PMqcAs)z+5;Ahv9DAgZpq7g;1zTPbsM-y+bWT2eCw~ z5NpIbu|;eU+r(zET`cowP^THSZ8ZATm%nP&?2x&^*vG&?+!Iurjbca4c{x@G$Ts@Fo}*j0wgE^92h9O9aaV zD+SvGdk1F*R|VGxFGQQ@G|?HNgV8b3@zHsr3q;q6ZWBEwdT#XhF)AiBCUs1@m`pK& znCvk*W2(ipjd?eV$`Y0(I<{}@lQngCQ`+*D@KthQoTiuSGZ%11AF)0*?dFf+CpO*OE6_AXq$D%Gc65*elpCxFERpZ!PKn zp`~_o!{`s9r~a)am9HgZOw`|65@I?eYYE0C#NLU0`(IiX#qIrvmI1jEa`p4IWLOyV zwTL&tWG(+#rFz2uSkD93-z2?nX8q@ayq(v-bNz2i^>Vs@TiyRtd$rxAZkLt_ajEj9 z3b&qKntr*|zgt!&Zb@7t#Ff#>zj>WFH?eoJ6?Zw@@1NW!F-Kx_VpL-0#PGzk$^KHm zSNO$q7sD?+O7c$ylFAerl1guEvX0$y48~wA`eVc*_zo_&QAw?w&n@zMUP(DK<))Oo zLsExC{56V@*pP&f-67XP-h@(UuF!m;E`WfAtT2 z@*i!X_d*|pd13UI7nU~Z2}}RCmpaK$dMDfQ|NK&65n)mP<);tJ@tI6g*uiA=9K7Tg*qi-+P_*C1d2kRkXvCpj*vaZ;shl~ z>k)dSPpDizaq=Yd)A$4(hQodSjKW=i(MPaP)RajCqA*G&SBVH}k<6jiG+YG45TCPi zebUbJS^I_0!2&*M4=1xW!l$jzT2aEMZ6lwzO?=iildDB9pSPQnh-`cBd`agSO#&v=#e`VmL$;$I)~g-=`D!0i6^nL@69eNAVkai{Dy--&u(Z zt->Egf(R3Bajy;FejAMkY>Y@P+T%gd0dLz3c*o|)`?jFyg1_4m_{5eJ8ALa8*Q6Ec zMOTuxI%!*rl&!(1MJCaMQrqT~#qt13e zb+HH3Sgb@#u`(^g_OxELQRDD?3;56$G8fEc3ffL?lG$#y;UFAL2k{51Rf1|uo~?}q zX#uvQbyUa>!78){tI}$mMt5;K-N92fH=ee+DB2FD7(0l{*$GtMenegE3F>B#Q*}F; z>f1SPvicC0+A!5ljaTi}N2-IGfYs<{oIzJ8i|tIY-b;$JT`1mmrE&JY`dCd=lSC&q zSxv#}*o$`HQ);ZHs%dVfnvR{+yPN@M(p9`?^Qw+&hU#R;sLpDpTC9FjOVm=eO#Q5u zs}*XcTBTO2HM~=;RqITIT5p}&pf;*s)F!oA{c0llJ)6UeQ(M$lwM}hTJJe3KOYK&B z)Lyku?dMtQfI6rSsl)1sI;xJTa;qe&Z=|jyt<$+szh~3T~=4rRdr2W zS2xs6bxYk=chp_ps_v=#d{{kD57lq#k(=datHVQdaeFs z4I|j&lrR!T!Dvp+>D&))5uf5S{$4r`#=?g%o^SDO_y{KWam6zDSgi3LcxlXabH!XW z*ZloBSHyfTZ-k7lv?$t*ET%`z{mm)*Z zay#XWBgZZ!hPu=)y;$y5^eVYj^xsl?5cxbA-Y38|k!6(H%aUTowbsUR7;b9uhnYcR^!gs|ku^Y$G zOk6DX;30e<_TpC)vKn-Y=I7oxUA#oUw(EFU1t8)YH#$&`0aa0@^C&Wo{ zN}LvF#5r4BoEI0wMUiOV5tqdkaZOwm*ToHSQ`{DJ#9ecdKd`O%eVzl~z(Sbsmbj&` z7=D12@C7XKW2@!xIs60*U@3eBKkNLum@c4;>w>z3E~HE9!n%|$qD$+dx(s{|i)g3K z$Lru*_>M}!3heDin#(ozjPipTJ-cq#snDS0ig;`LHu5%C*# z6pzI3I8HnfPsKA{DV~cL_$Mx*4B|Bv!JgDm{3+hjU@4@MAhk5olPF2Dbo8YRm8oQE znU+q;bTYlnz`>Y+gZ7q;v6o~P87JdqR+&v^mpNoknOo+e({x7W z&S`@4+QJ3Ra8Wx*)G6SSP6?NF z2wc&je2DjfgA|YwLLd~vAQhyBG>{h3L3+pl;gAtBL1u`6NQi;}1R)w?APdC0IS>c& zkQK5)cE|xaAs6I^JdhXiL4GIz1)&fWh9XcDia~KG0VSanl(v6B87K?o>}&hRzJ>Bo z0V=YBN{nowGBZ?xs!)wna43gCb*RCqpeEFU+E54TLOl;XfBW*-b6yIl4-LGO(9qmA zcRb-qXyhpmJPnOK<9W~onnE*ozy!F59Rbau1#PDNbl;}1#Z1svwGHe@JKoN6Gwf-5 z)xM+^Zip)CWngZ9t?-i40P2|7a;=nCDS zJG=)y{Igy!=nZ|KuYXSJ4+CHz41&R&-aj)9g<&w_Wd_SK5SqXczXQ-PoV@-~ifdZkU@mkoMs$x`wmqI?kaR_zB&_xpWJ^ zrhB-^8eC>m;mk!$xWNkfSTc5JpZj{Y-r|kAU%3*s@Q9F!^+2K^dj-`rr996O( zQe`g-)wENomYqhm?R2VRXHZ=`lbYDM)YN`T&FnmCZa-69>_O^o57B$}F!iuUsHZ(j zz3fTqZBJ1jdxrYjv((?7rvdf?4YU_&h`mfh?G^gaKA>6l8O^rOX^wqi(|PeW(LQvQ z>})JbUtux&8jI66Sc1OAlJp&xqJ>zRzQ;231D2&lSdMvIjR&9%5L*W^0*DbB~w@C%%WpK~K_#!a{dH|FNt zlw0CTT#Ku5J+8uaxCS?HPwvaTxj*;fe%yx#;5kgh3wRmN<0ZU^S8Pw)$M&}UY%klF za#9}3P5CGn<>j&b5r4=Z^EjTs<9Q-|%%AXQ{3(CVb9p|`<1aXZgB-;%9Ldof;4EC6 zi*bFf$F2As9?C=P0NbCZ@l^hj7jPM_z~#6Sm*t9Fo-1QhY>CaW6*luvr!BBGCvXRD z#~ryXzsv2p6K=+BxCM9Muecqz;!ggCzvu6G5r4}+@IwBPvvN+(&bc`o=i(fkhf8ru zuF9pk3YXw&*ccmOLu`OeOchhz6f>nvW$walxHGrruJ|P`z+Z49ZZc&|X;YR*@Ngc) z19=z^#v6DYui;fw!IU%Qc_z=`$vlZi@o1jTQ)miJrb#rBN|;KfqAAHg@z=bVzv3lS zfbw%3$8x+WVTzlYrk1H~YM45vuBm70n+B$#X=DnRd?vqXV-jQyQ!pv(#23s%^C&s* zRL&Gi&Owzog=JIOOx7`N^{AwH&^%7cLzySCi22>LGwt;mHu|hSr_bvP`l3$M$Mp$) zQs35h#C$nNej?|}Pvt!MnVc^_mtV*Q@=N)Z{91k^zts=yD;DfHEzHwlI+aeX)9AFe znog(F>kK+vXOwqjXPrrB))6{VN9lkL>S!HfcA8ygx9lz3=`3o#IVOKL$K`T!%A7GL z%vp2NoHpmod2>{~=cdX%a-ZBQ_sb*ls5~eS$V2k5+$C4ax^joys$=C^9iNn|)7fc~{;uiMG7CM8#ECT5jjNwQ8>Frao2O z)jai?>Zv|gUznfGaWz1>}R=H3P&40J_UiPl7$v^dE&)sYCoBjLNH)LkSx34F3#3UP+BQ=(tUxJ8GeI*&6R0q z=r?{^&wa8@AW1vJlwo|&yE=MzzX};jkg*r|p%ATS#>`fW#&+%nblIZSFgg^yy?`>s z`0s*IFghK%Z`n2(AsL>m_YKqVBG(~Pk%$f*$|%tl^t?^Em3#eFbJFuW{`URAmbTRk z1hw0NO`D-5sLH4sh9XHxahF!18k_{J@$)riK5qvCPV{0ylkFgaM)0#qM(d2$BP$BS z&?2)OhLVhSa1e$LWtG4^xnc~5@?JZjymVWQHB){(pev%sJU&=>* zhq5IbdQbF34|gYP`69yF3Zk|ZZ-;>l@pN-1z$1%;8d!EHuV~yW_l-=NnlT)uE0JR9 z#+2DVB(nqilrK3nt^_+d<#nFrjD5j3&}I}eC8}#D3#vapWq7_@vPa3DP%kHcGQGtt z!vzl!N5b#PmQ7B({lK=Q z9hPi|rd5*3_|%Q-4$UYKg`hLuU49)vx*<*TX&a|$oE)0PHFG*80vYJQF3ot6=tY8N zkTi$pRBJa#a@~5kOw$MQi9>Iw)>hEkNtKoj{k+znRf#d{?FGr~tVd?-(rlTV6s_wf zXZU9tKV&YU64_!qNH}?j*6pFZY_?=eyf(yE`kY@u@3SUEBu)6=g!bi9ol?NWFyEg*-dywptRW8Y!=srw{`is-SG2z$foJ;1jbOq~G|qZs=}&|I)i-1{xnwRPqRWUM z4xj8V8au8!bVXIp)f`&?FDja_1Nv2z#8@hdifHoiB9(V~y{2qp+5@b0tVK-px@j&h zzPpIbaTkv>UTgtJyn|kSCx%N{%(8(RN?2$hE(mP} z_nlxwrrR!u0Y~ohXsGtRMbx3x1Dae7q(FH>zo4tO@3vN16f0AZfG?XFg!vu zWRs0?wQ4$L9Kax>#%@p%HGCV{++A^y`}z>ZA@HR7P?e-yC@04NDX8 z=lRtTho#(5QdBr=4J_tbSV=180tWEbNZmfF-h7#TBImZEYWc)VT}9W*Js9R@fw#vw zC`*MZpn9VY8)lcAOQO{)7?Sk5I+g}@_-nLc^Z)8TcAxi4O=5){ska>teDpaP!}uE< zzbyv|7{oCOxrvY$)8WL|9dkHeq05-Xk5AFx!Ok@o=IILXT}4+RTAVc>c@+(O%7%IR zL~%P(3-D9b$DRTB48UaYx$2u*(+1F*E#~+D+st9G!yE>?%we#{oZA3jFo(gH%wZ5P zhe60358xhi7~E$LgRhvw-~n?Q0ADkQ!8god5HW{A%p4bBpE(RV%wf=F4ub~j0b@SEcN1CxbKZvX)R0ssF14|trc zy$4`aRk}Dn=a!iylj$u}GreXqlbOs+dhb0XgcL{uApt@sp-XQ9Dp(Lu>;g7WRInGU zYk9WSRd?UI``mrIuDcdQjY{U`f6l!#$)th){!ccWDY@tC<$UKm=dcKtlf@!5wiN9`O5gm`uti1i)mo<`IE(tI5d6Oh%g|Jr9d~3E!q-z#uY&;LkUi*Y}jI zsB>tXzEl$_zhA^wIQ;HpZ>l-XtQHuB4KlM&t4XuSWR^6I)@PPc_v7CU^9%7s!-t8D zsrlB@x!IxmY^TL6?_OmIxGWC8$&|tu^0i@`#)lsBX|!o(narFa5agSrkSuB930vjK2a9}c8ZMXsF0~Y`W{I*AU8a_|Mdl*0Yo+*X9Bz*spxK!f@ zSSAo-M({uSR=>Z^KpDcHnN+|=eX6j+0pZvesgvYMdTej(*nBj4AUzlw2Lzb-xJ)Yd z`w)8+_^qQLKQZ)#=Ji*Wa3(^|NS9i5VyjV-B;b-_G8U8JC*|51g`r;O7(&0ab2TQr zTxTNKgpftk{vQ^LJq+<9SxE>#8aatUWCH(UN zUb^{h>@P$bX2hQLw_C$Q*lB9{yVQb@!F=iywSheG2M7aa-34{yeF!6wC1W{QEDIzr zke-T}3`$655UE8Vq6{2@RtbX$d%n6aSFJ1PEvGL0Vc)e|ufFchZ8^I9xy8U)w)>UM z;me<^|w+ZkKaX&oSVDwIl#W-_8(f> z!Q_7E<217-4%E5o$-Ew8L6Xl}!dscEi^6GSB&?@C}YZU^eSgYi2<*j`Q zU`H-Xi-^`ABwO-0En6kzuoQy~hKB4T2c`L=T_8aC&gQ)#h}!cR0-NAzF#$`ValnRA1dCzDt;;)>nR4qo;0o^qoWu(h%y z5!}i7qdXq{N6x3d3%60<0X}vT`6_H(_-gV*_y%kl)H5mcQzU!_XDQ%QkYI}`@)#6+ z0KSJmexf_vhMfe*4>JQDK8%I}{KG`zhaX=09*svN-WG=cjq(sYOpnQOKt#a92sU!t z@Vh?hB=`!x*2c;dfgC4G@Kr>XGXUQuSkUSj81J!+ zFlL|_@+j~{VYAOiY)xbmrH2691&lW2N8wvqq2X%<~xm?6paQEbqMBy$q?+b_RkB>lbB9WQ(4;~YB*u)~_N$;h;JKx`b9`Ns7_R`(k+C9`) z$m2p!UQnu7@~$ z!AgJ}&4O4k7LacBKvEglas`NbdB_(I%19(J5j>QKX9KLEYdr$&aj)}lEJvthW#F?H ztfcYneYCDd+hFT|d0;b*_44yGvU&2PWcgk|q@swh;QoRYIz7T{;9L>DZ$9Lx?ibdsePK^U z#UAu~cSYRCPj~e%e>KY2{_dxl01=JF#Qk(ER-1!&=pm>s1gzvKJ(VLsPv?<3l`HlmG}ZdIASfAH8Y)gyeHwlpL1eQ5Uw-wR~Q5kco(c~5S z9jv8hWu^K0Ll5DzFP0`#?};4t0Z9H+H~xN4fva(CjVeWq{b((o9a^@A(uWg*;9ZqG z{1$m4ciGX|mD~Fp6at5a_6eyY-x4gykK9Q78C5QJbkfAQ2py9`r?La|oJy|1?@3fk zWoacHc^S=_n#|61o7Z(_7H@lcUFq(POPuuyda*LAVR7}qX86@r@T>fFkF47INeyv_ zOp{t~a%l{ss3`@9FYRH}Vtu5EmY!{=Dqmsyc!v}d&M>8ZbYu&kki!IL^h zI_-{c!(08a?Fh!p0%HOzRp6xf$H0#z4GX#N28SiF7msVt-mQcXbLH)lG z>H!C3A4uo{192l&LtUh5h}Fa!mqNrFe@1_Y=D~NszZ1mdWdZs}hW#64Qm?}&UWdQw zr>JX=hD)$#kAlHJ{~11e0Oo0V@L6TVqrhh)vZi0^Fzlao8=KvL*L3S=`>*-z)+WGn z&)oQFdgtyYeBSWw+x~P%TiYFf+6G_W(X_iOotDo5>Nq{7FA`fgG3iV4SZ0%oM?f$M z2$@&3>G4$(qgptc&{*kACqHZ3I|plMxOE5@^2G4%gRkGxE9R;VRvDAxbfC<~-(}-; z-TwQlqR22v((!I|zAa|4;(>|wj-xRf_{nwQCohJd`~*&Q;k+uDpQsUmrZ|rg1yS;Z zQ9XQ}Ye7cF0vEnYVP)bc%roLFa6B6`o)t~8BjZX&$IS)^j9d{6p~^&@h04E3y~5+N z6FJoR@2P_SF?r&Cj1$DgNw`1*q17YsYMF>9{E?kT!^Z#HoUTlf44cUl2F>st`f7)> zN{`P~SRqPxt9DD!)q=R$<>c-(VW(8mxYy=O z=pf2Qu6We!am4UxC}q->(dr#$!fsi7J*2ZVZDyVsJC@|D_AeaZ1OEP{B`p~inVDbg z=;>dUzVx|VU0eUU+^TiW?n#8VonJF}lQr{!fmt^%%O?|MBJd8GoSI`OEzsr9FMT;} zcDZxc`a?JFSLs!XW^bWQIB#LF#;34WE-km!RTcPjxM@LuvN;(tps}&Fwt80a=EqlP zEV6hyci1p;fpC)VKz)Up8zGaXh|LMa(1Btmoj!{EV5PGsl-W^WT(PLU-I&akdn*RD(@Kr34W(z)}GG$4;N;iF03uv@$}%Px36!I7}Ip6Dmes4+e-1s z1^iw@%u1OU|FBqQ(`;tqTN_sGcDrN^u8YsL(1rt()p+Y@OxSnzV{`#G3M}U){X&{Iv~Lr8Io%7!AMp3iTvBiU4OS zEEV{@B@cG+I;%~EZ9zwcQ4T|_ktroLAMDSKU{p8_>PH)@<9(At>W;+5T~7`$n6^(M zCBi$-n`|Ac3%-fS2~Fu}!NC{NqJ&%l{n?agPh>8f9Yre3ehyijb8v3+_F3+smezt5 zz9F{39nu7w;EzWaP)XU{_Fli4yEm@F^$RD%QmEG|H!M*|$JGEvEGx`D><11*d;w zGcUPf8vUN0i&_-kL{XnESFmphUQ@mMz#^&U(FBPgLF#SDDO+4=NlD4_{yLqJ*(4&N zulI1@`~w|MAf~?dIOKYTIG)Rot9GXz-i76=RP%J2g2Dogy*!wlQrVrJvC?lyyMpTA zm~Domd}m)?R_BKN4<8AC=nZlcxm<3<2hhCP!Bob^sEH!XDY$wCXElz| z%-pvW`uHE9!xy3qbF?nO)Ji3gx1NaQMp+}mC}&S*Mtgx#8?5uzF7XZ>PUFe)?poY@ zO>Zb~@b2E04PI>6?{v=G(bm4H-c*oH-2RKt-BaFLw(FJ6t6n+S7)-^`($vTZf=$-b zb+8aq2gAKIPUSG>?WS?^Ou`A6ra&ry>ZE>|9~+@@%ZIqtdTW<@z@7s~(s@R-1rD1bh`?`wc{A@hu(jkOl;nwFj54^CiHkkU!(Kp{@_)`FJ zv6DyO+`X8YxrD~*$v}rkgD-;#R2&<}W)0@UJUtc9N4aW9A!lEtmCI{vgxI&~@S_WE{O4WG#hcF#%s#QHYIpyU%&m2b6n;vQjF4z; zNi#)x-jxk<2cM>+2+H{@7)#?=ZphQov8UO6p`$dik_UDS%qne zWatq3mJb9MKY4Xs$(APu=H9!eILU~u_0BA?Y*=xq07yW$zkZx(U{m?!a4oCib2Sqtc%3$O z?f%!d#-a~>kpmL(D)|B{nZ@#pY^fj@_#<-X@M)!B9PUePTGP=$&vk9(xg_8#bfT0} zuM%*nFkZoDYt_9qt=G&;mt4gc#p4oBZDz?M!%r}}=78~%P5y(GiB{0Sl-V6)3=AC8 zI2>Tm^oz#jheYj^$)9zmyz`DilZAerGOF3*+9;U{8KYer|tTIkC{SL8w@yvLF| z4T0zrQ=y)Xr5WfC7)qwWy#u|EkH1PQKyRBOSVr}k{UMZ5`b6BIKtxj|tzd$Z)0}SY z=qnhXj>c$Mte!vyhF_bMWyY{Cf>V44#HsE#Y0Y$4UWSQdS~3Coaq4kJg?RmP1ks#k z>Sn3r2Q2+WnqoyxG5e#khS9j@&mW|qCmP7 zGZ*(1M8=PWP1`nvMM}umSvnM-CsKqww2>W!%iv+PK|fC~Zun^mo%Ms&>J*tlk?mus zYdg-@^5=0AxC!$Ub%F=~_lpS3)ibuXdPvS539qJY4TBAFkjr0~z~?6{QX7z{8C(!5rhM!AdZc`Rrj~okf4hD$yZEKx(Cq8Q#hL7X1_ zd`ZmbPod8l8|7e7M;m{mj!tj1zg~5fQyOyRZ&2uIEPE{8LHm2175EjjO_uePG)y7J z-zX!R=SS!m>AkF9jBQe27OJLpho;(1?WUaMcuZxr_>y_kxxq_+FJ9B;k5AYo{uNQj+;W%7nvG@_fzf#;&P%y?*=+8LuFkj1^oI}F-$Yo1- zQ)QFPMC7uCxoNUXGz%F%HC^3pT$UM$5%JeUyqmAc|KCK&w9?4j`0_qa)0K%E%RZ-* z&TpeOCMFWqvYCgg@A)y%Yg)19;=d!9xMtiuP|5|r zRFH`nd((jHkp4TGNRFIS0qQPfBUO@6x?&3|b$Z8_IuBCa(l)DV<-a`!O(Emb>J}nYs+MH`+I{ z<*7A;53S0WRpaoA3_fFBTkg_Btwn=gOr=c8v(&V;)tK|#%J7pqt1N*e*or)d+GCW+ zEPlc@J0(FB$gkPh;$f3obFwxOPf!NuRF-U=pX;uk7pR!4m6c^G(!4H_^P0|@jk8kK zDpYHwZpD8fWUNG1UZk$cjx5tkM3Wj{^03?qML9(%=%=f%D|QYntXSY3LY+Rvt2%3S znOvPh;Rw}cL3eG`=a$xcyAChPMAcYteQ~CW$4kS)e#gBhP9Dk6!JZhd>bzs1P-^z5 zJ4IrZPGu`<^VJ#B^n&u8FRWYo+%*j%eTpX2&FJI?D7c?szABq~9m@|^j-NgcO|g*l z&dA8fjc6Q>9_B$^v@Se6(oOeEd{KHwjnsP5S)Vthk%m$C%!rY z?FMWa4K0&cb@b(zkJ7Ut2mu@;--`6r!qFyXreMQQK&5hJ8T6S>rP7(HH)Od~1a^rc zFyPW>pwBYkXXtkpQ@;dn!0{xkG!{!Tu3XB;Br(aDe|#tHaP069+(VI!tM(`PxJ-<= zAqJiS!T+Tq(rJs3n$#za)lKsop~(_vvL1aro%QH=NZ#3Fz_V$2|7l!;Ls%vYpVrm05H{ksWJ<^zq6s0cq!Yp^ z#%1h@a7Xn0vRMUKdD%pPd}sRb|4tMR#P$C#90H@(PXh;z4v-YEbr2%z2}3R$j>z;x z`$gC~4qMIi z9iYrB8Ff3OwhcViJ@8{4#fHOPfl!@YT$?&~Q*u&8%iOe?JKH@&Elt+KG|f*<4Z%5f z0&~~sd}i6AS^mmYdHVc=bC8Fc*P}|S@}gG@Is>U;(U{MJ@X@Z1@jw}$=Tm^W$)&Ze z=`nr}B7pBq4p?O4eIJAx@uM*Ip)s8?V@_;`4onBb)p1>8q=!0(p4W4U4j+ z(j{7PVtW_1dkj2=*5QdP2wQ@(KM+%8M^++Xb}7-J2rF3i%&v-xUC*o4%RWKNX4XBaac?L@z6jB}DT+ zOJr5m1DK%|F^jG+#d3ks(9JYCgLB#STlWbCb2Db_*l)mk@=FmG6g5|=*FSzDyW6_Xc=p8FI;^ndg|!Gdt;QqOh&b<;o?nk}%&Hcv1RMrG z$OHDxkOy3rlvRpW^2VqJ(>4)}TV#yw8cJESYSo%`t5y=6q_k+u(6Uftu2-SuSJEv* zOPpIB`X6P@Y_ieKio&JWV=a^51}4Lu2sQWCz9`Vv^`4=j z@gPqZ)Rpdhi3XV;q^ddE$htIjhR&6yS(g@#mkpg6Ip&XBmmbQ!r7yZD-M!t9lAv+x z(%1*TJPh71Y>2K)7iDCP4c( zbiGwa;tjJGB|jw=BqX^D9O0`8Ol@MuM7@I^sDH6N&+MsNo@wTeHVtF{Nsx=gj$o;$ zvdLB6J_kY#EIc|t&^xC-lJ^BGGg9&$5?6UgS4X+aH~0Fk{?l1_mXIe^O7naMw^6Nk z{YY{dGKzO(vU!|{p3pqJ@&8Cq{tsC@oqoAmr`NClBW_Qlk=x>@)yV%h0YD!$ z@-4BAe1Trqifl!P+$W~qKtZ5J*oeobQ<*#r+r9e4La!~mB-`ezYOV6+FFDYV+TK*9 z%SwP8a{3C~`L)4@u7;p9zcSyc@YRKO>=~-K`X%y(lD;+mtQmQ!PPf+JO---vubsKA z)jg(T)j6KLG*5neY37Uqe=yI9a_qZq9rog%^gp`2GE$4eUW2&9{7N#eoFN;n#=OiF zSK=_QKBdU5pzAF}DP3^bs)(1T)n{IMIZ~8h{Ht-~TkOwd4qE>t$JAw-;s|(;Zs9tf z&eUrrh+7!pyc#4;DrwMps{#7*`E=jXRU^#)y;2$nGsNL95C=$~#2=V|fovMJ&fY!_ z6EvxvsC?V8b2rA|bK?Wa?aKU&eIy6G3OHwiSFORX7py7-}y}+0Zhn z&^3nUlwB?u%S4?dKBVVwGbYbUCF2$}u0X^1IX1zGozuZN-b4DxB%3l%ENLy2YVHk? zYQ+}p_p)C*0iTjo4NxFb$E}AjvLJRrJupLA{0c&dT|<<4TFzs?zZ~eO?nBw@bqjdL6q>g&u%{D>`}UlGyCJRGmraieujx@uf- z1p=z4Ap1q6@1^;qH&WiDOUjp{X}nw*CNMU@is(J3o!0xMzgF*mGxg&wg1v7-dFJ6r z*{Pn&@Y)r6g(zOitB%xor!^7q5Tk`JNPe@W$bTi5#+whL8ypVQ=YnbN=ht$C!x@6a z{$}Z8FZ^~{L%dhOxbQWBMXHTsU8<29S}-KSzdoGC6XhRS&u#O5mb z53o(jr78>iI8VXlB^{1nkb*VpvUR##UHD82gN?hzEuH?)kycy`85bJW`i4z8blY`Yqpj;ow2(vvpwI?l%(V)CZ(hX49=1?wXylSB_6ji#i)}>lyO8c#*=A; zdZk(m`urYqVQV_Il`pqQlcfoASH8ngnqkG1K{sE_mn9$!HD89!f#VtRYr!w%8OYDH%kYyi>PenlVKCHGXtL9cn9yN_j!Vp= zX{^An#VXhbSVFX)Omf*;PGmpX_ad`YtWV-|B^t5HD$`c@?4^FKA*U(Lla+)MQsKZu zgiDafH)c3({$!q1zFMs}m(I`6>8o^_HAxa4_6u5vg}expr|Dg6G4n-vY{hM?o&(;F zG6|&6r^?LCRD0Ws?Z)Eyg$3O;x!LNBc~ve;$=uvvYk^6SMEr%XOAZTO*)+k{@j@C&(|wBGOI2t^?rfWKp3+c+zJWLTiIOcHI?)fNDv_J|6Wp$RKf-#zq#P-~UR%xa-fZI;QbS|PcI z;)Cz*mzgy}p$2|rL0?&DT^jiU`y3E(JbK+rGHLZ`;^-G8?&^@#C}9JxL@ZAvpBHLk zVQCO7m8~?OBgjrJkK`+*;2%=}X817|@=$ZwT;hHK?`*P!Z)C=1eGkXR84i8_ z5c@!wjo8P0hu1^fF-7FS)ZgjTV$!2kjF`oe&ol)-Pp(KkCv8smLwQ>BDXmdr5S&_~ ziz63nY+jqkzGyBIQHfcPei=*x9<>(}CDZfyN+fd#3nyM5`4Zw3wcQ%{*_Go>c1~}F z-Cog~lha#iw^#P&q@|{&`BGEK)0Xo2`31e@R%>~0LH_)53)NFnSy^0MSy{sPhYIWh zRte+7RK9pZJzvI@oqve>CW%_0w~K|z^_dZ8jQrB6B|x*U5`NkAWSugF2<)W9d zvwQ)B>w<7y5H6pt=STVwMqOfHQfVD*7Fi??Zz2rX8Y|R!Z8;MHpf~j9C`qo4l<*Ua z8mu%#upnIhsm2iXhI*w)8<8it6T*~_%9F#UYwGN1N&O$ne7i)$O(f*;dTz3XcWQx3 zLXyocUqakYIiXimuVW&yg7ItDf>)tz0*qfn47+^oi}7>E5~YdISS0~dAU9yrX3h+$ zLw>iw&XI})@+5tdA;}cX4VqMehG15Ymb6Ra6XNwEsYq%Jy6nYi>IAWZU(DrkVPr@Y zON3HOZkj32qjBgEPRS6bJK0&Zw!}_I@&Qa2Wzg?3!JkItPJNxTuF1|9HyhZ=?OV18 z1cC%^Ts(#-+}iq54&#~RVSD`r!H_rK#ynzJUITBk@4v{5Hc+6%OQzLbJKMKyPZ5oU6Kkes?-n{I6hv&j31fP z{vm79J`wC+6Sss+-1q@l zen`^~9R1YK|L~Z=rI-PkpD;t=5piwlnloT4_8gX0{sRpb(I z^wd{C5+`3xCPM8X2NiLM-(q47mQ22f&X|Mpq>o)R3;~UVTLal-s0FV(D@`s`t-&Ih52)IRE#G#$Px~#1GPSXb)H|X&`T4J zYS6oyoOJd*Vzoi&>nL~XEqbxWC`_AE?t(9w*q1}>#{N$4tF`@#9Rm%M+W&8oTl`uL zv-d`$^;_gu?CNLWrm|VscbtS@2{#LkuJV}WaTA$74({fMg$_I(P?z)9pI!BD)QOqZ$`73RPM#sc|vhM147ATKfb z(8M#2L(<3!A5^(B=G=x9_l!J?C2xj1r6Je6+mmAVdhID5(w$lp)aimXsqU(PRvV~t zTm62kGc66tz_zwV6g^X06jvm1$g?%8Z}Ne!x}k(`bCbzfJxDpAlD2!*^W)KFPqx{cr07WmbE6P_GY`+pT2*{W6!+>hV~eE-Z<9 zTWZog_9E?B*}LsUUX{vQWVaQjs#K|kHjBq&v8SejyFL)dz05dVjCC_{9lnzG=dxIj zZos4PFzM?;tEP7|-(d&Tu-K#>JQFXHX{4i$p8my?@R@T0cR`xns3D7&yuu^eqJO{4*o7Z(gZ8SJQG{? z$h6T`#7tD;&Sb{;nVpE)IH4)Wu)$}OwLwQxk|U^1hGVhs)CJJHfG#sXEU z8D@7)_EKl!SUHv+6DX*wu=tS^C{~c;V#QxIa5|@v^X>XszIGTY^!_TpMhKkn88dMJ zOCcYi`$bI>Klu5hrMD6X016wUXYP{l4Sld1krv)epSJt)B?o;_B3=6>yXo`3;VX-Q zN#-~}PPe6pfC1QWF7-4&nGgSmy{Z4@Q9TBO+DCY*XcopaUihm{>txOvTf>~|YKXK)+9F4r0YACs z3sVZ0dPt<_D~!~sIFIoStm2|cg%7wEWDc|rU(1|`j_kY!^6?OT?kR(a}J{yhv$qO9Xj3VY*>BM zV|^pH44t0Sd3xyR2uQ}t*4)wFe%snI3@clETYLK*YsxSp2kU#}UprgxJ+Nk`2fX+q zSn%+dyLSHTkv{BM#FG{li|vXzW0nKChYtOt>jelS_#WaYN)P(kuDVlLrnE{(0-WH@9-AXe)$?rhoKlGKdKP>NCMO6eJ~fg4Y@Ts&suvdinah z+S~71SDxOnzBK%m)B6w4Ja5}g{n<-j1o+K21N?<$+5I=QdFOimyw~CZ-o%;P@9SEA zd`U34CLYP^b};PM9smmZt%>FX(7T4gI(d!p}-?jayb z_oP(!Wma_tr01pX%0PdQeb)Z@aaX;5O;vv1_Tv6Ktdg>>wZ*M>uCM5(nvwo@LZ0T4 zPp|}04Dl$292?RCrc=-odpe9bTFzmEdcsoBnvp%X)atBRR?IDE%TVT*XZAJ(6Tqj1 zePx!0ea|eu>g<}#nMZ!VdG4-8(>$zi?a756Z}VVDX>SIpd0d%OTy4uOPha`imWueo z-d#0=&+IJke&nYkuK@Ski!xi6q_53k01jLFw90h5j zQ8{b*_L3o?-IrZ9!(&ZQdo4YOmsQAYMFBfM&aNb|mEV5zzkO5{c)acGeb+C^YnK?5 z{Jy8DpYJTc{qDP}QuI(}`6Cwz9r*~1y(MF32HO~qFm;pN_=8;(m^ai>WOkIar+He7 z?b@6UaFW#OL}jx&?M0zr>xwliT7$(~o*Z2L+rWdUwbEE^GJv9>*zLRey2C z^43zFB)esxCU5BsFHx+Q3Z+7uR+k>kt(vp$NY}!Lx0Y9Id1T>T|0q%h3+sKEU8OcQ zR}hbKV4TjHd-&EOV{{v$K1X?ck_|erCqg-EVC%E=+*^m z9>~t%Cy9jSKvkfvW8vK6$CvjgJ*6o*wIL@uRnA*r6{1b;&1;O3^z8iP%muZnWtm-a zo?Iy}N)MIXRhFj@*yYS=a!8hi)H8S$^l=&RjT{AglJ+u4$JmV4L3T&nEjl$k6@%U% z&&4^)G`qEr1@)(mQFNnGqvvVf`s%{GTvY&4rC>WX>WT9*CS>#z2S1quy+Exo1- zb~hr9 zK5WMSn`vanJ}fR^MQv{uw7rDL$=;0Zg(9c?a{y9onG}mXp&DA8y`(!gr>odb0Jfue zPF8kjiGvLi2bgB}fq`dtS61$R7Q1fq*?~}K;Oyr6);_o_J$>1OYq4#ePgDOndye|| zGhJQJ0NJ^-K>Bni%7swRO+5J+#G@Exo5;&U8lg}i^O2ipFn~fpBtvy#S{ozBR;Js= zlnWEx^90Y9QJ#{MkNsqI)?--V_SbhUylqjs!B;V(+TUJe?VgKD%=mSm9cgg4Y^;6a zf|t0dvV_R$EH-DqIyc#?&eT0fefesC-oU-R4+jGC^nPvevc`v3@66uy(JfgSm}|y{ z#+<%t=f{6!bZKDZ2P}ucP_83E<-_dJI1m^Z3g*u-1WQdtJ;g=>3#S&9RI6-izPoW* zA^mL9$oE7oq&t<4dy(i7UBIWaB}kiV>>xknzKL3))~QNqsVkK4O5oybe*EikM%{;C z|155j(POCP8G;Tc{8k2*iL$dEn5Qy`Ibu&^0q9YsNM$Ysg^4xzt>I*wBECanNa71! zRawJHeh;&+;tcULq{SYK51nDd+(^q5Vq@AQ;0xkunIqHetSj{Kg8N!?I?V~3jp>;~ ztt|~JjY9<)55f?o;3uWk_?tWQ$*vCDw*epVW%%wnD_R?{9btD#0nLXvn1`_=y&miY zz~;pCL@;iZt(~*(y1Jv0t_Z#&KBY8Z7m^O>Pq$NFQ$PH&i0MX1ndz)Lb?#iV4V7A0 z#n8@u(9R?0l|W0TTU}|d6Ui*5wE4(}NV?{1z)d2xNjxX3tHiQ>{rsc(9oZTfe(Q4@ z{qj`z3-MxM0$1a;)E!(_B=a`rRMu+JimaP5+}QhMf!vtHGv?0p&un}V&D2v%GJINj zdTzO+W_b_U!F)cC|NX&4Z08wS@th-_?%rFM#-`Li`I+etKnu8P$uS z60_uYWNGxJ5p1EaVz4zMY~|^#g^ex68&5BOTckFMdkZ@Al6S1@#csYLswwm4%urkQ z_IKVe&)^0`0z)pHjD$?IejA7< zY}PFtzFcdTyOW%umOa!b7of^+Ilf#e{cw>v;EPX7p9Wl!bK0RD=Ob} zek0m^5%N-P%sFwy$8e6xV`dm^nUGmV!E6>rQaTX366VMDpFS4ewvnIgHDGG4R4e`@ zzoLBSGXtxh*rc@FP^wBu&}L2_{?gqQpOA2Kd|E2y*1^#URbyBV9&nh!gwrRlu*~6+PbCTB!2$U zsx?h106D#UAxBD_8H0*P`4r+ML3g36Q#Vk_FLXxGjzj;dy5_vXk>}U z4-HkXYj*R+BAhE#Mm6iEx3(81P|tv3Zo`hpmSF<1MlYc1_TM5SzPcoebI;t~RkxzG zE+wjGfK>tWqJKl(E=PH)c+&h*96~5@7^yOw-2F2DM71aTGb^$dAMMQQs?C-wvTNsL zb{<)rRi1T*r<0S3@iv>zoLOpcW?4mW`ew~?8cH+GI-4~ z-m~aFh9dj`*b4E%S>M3yWCOEqJR$>I!D@PqOb+L#sUVbxS#8L5fp%-_=2`{8)wm@* ztE+w_w#uq{_galPayQC@(YsMBqZ9GbyHO(7m0?G#d-GJPy!qAt`Omd) zY{@}K`%-cEN8yYQ3|V#Vw1$w5YQ{F_Exx{~@5I^y^2B@8hG^Z3(2lD+YQr~B-{Duq z)V%1wVgGaNehQJF`77+9_n1Eeg~-S8sr%SQx`qZ*DT@dNZNPzEn@wM3LjUsT;VKX^ zhzLKmI?)j)n_B2>EZ!Q{kjf}(X# zf_O0hUzgCd143iP&4jQr$LfXjc4{=yVXB6CXpgHcdTBv6U|MD(msdf=V5S&1^RetE zCH0BA$bU3^)K{#cK2bJjJq|XQngS{LT5A7Cj#3%0s|y@k!do5r8eo%^IzOcLYxCT} zCX?R@-c2!wcVbtWQ>ZkjAM4Gn5Q}nCu~fU63Z`hV&hXuu6!50m9{wOTS0t{;g?KAQ zz9TZpbEu9udW+>)`D9}A1eCNbx-P+_8FkJ7yms|-JIm*E`kJy0mHXe^UUU7(c6i+E02qn|kyXy;M4`9*UA;C_FeHN2O-8bC?z-CvpiEs*#fMQja|RalBGzmb?l0 z=&b^?!?z|WeYeFv|BC#KF7xo+0-ZuYo)})^UzwlLZN@v%`zS1QznFehmJArfB!Q7j zzPI}2)Z2;bWSjCXbobBIjvN)pl?JW^V(VyAAw9rWUc$m10l;R`8+T9)8y9 zHfbJ4b%Hm$8r0w!Xss(W+Qs=VInfB*a1 zH@0S%?}4Vvo(BGu);t|j;Rl%91M)X+E{&IITD(U8vFmA1lG_{WNjTBF^8kNJ492e0 zV_=T0FQ9zFHD#TEkd0q&06pBw!P~mKj}2CGaemdn(K&OD4p#BOOU&xR_$3EyL(j1# znVCzD_57~$rUk*^f}1+AL1t}X!h%CYzkCyF`#$PI_!{av;`%W^H}W0S3k{=(@yr%< zX1b9NMz20$`rt`T_{rq5#yNqCqB@xHI>njcXNOHrK2Rzwe3jz|ZVGgRmrRAtUI`RP zTvCd85dYDr3V)r_;%=XbiRsHwz{mxN*LLy|7FzIUtR796IpeRb!T(~ualOf{ObE4G zsksv_uOWWFVksNu5+@g4x*>XhO=ji-7bAmQ7K@!o{wLU-g!m}mJQdK(c4 zhD5|k>cZ-epSfje4iIGR`qN$X&5*@fO+ujmo&oS@%GA6(J;8?E!{`v_)5-Traz6d( zcMvuk{=_kt2r-C5=rrDO_c8q~6KF>N;_icV|MYG2X~3UAdz60q3=#5$E93wHg9tx0 zRSrNc#EwtxHQxIJGFIk3MD{gsd?Vn{dLttK9Q7NK+(SLR-&rx8DIc&n=vHmZI)_j0(3d7Ru!cLveLm zsOiRm+QjfY>{fo&itA^#tf=BB`1dAW}>fmkR zN4vWp4c~U)tB02es9%sYgbVEj#w9p}vh(XL0ZM1@K!0)^m4RIKYx_DEP+hLcCz)b5cP?IyKVQrli#XO9K z+rcSARxQ+;jO5`@u$Fj*Ety*C^n>AUhpb}m+LAfPR^&rjL2V>ogYXTk(azw}rK!|N zG^4LX#Lq@GvZW;&)nI79NNp$FR43jLRm)Lb4R0sj|L7xX3!|gzkrDDlq~|ja&FoMj zlnU6KC;;rlz?%>5>GDzE*_Xb2%jme38VwhD5GoJ6+_XGB-V$DehNWfchPdB!g;*S* z2Z#Ug?NeIxJzx&tf%~ahQ`>dYt8cvV>hB;dRI6_#AA>&2GycRC2_NS~RtK20Gg7G! zS?JpmW^diRar5S#n|{~1YnGc(R(34T?Ynm%w{q9BtCl}=bxqdJKimeE@(8`-_`SE^ zcJHmX-18uzVCOD4Fw0ixQB~}GYQ^BwJIX5V2KY0#0sdQ8C2F=hGBJox;mAcoPy6DW zNo!R2w2M;)w7iRDq_-AY+|~1guDTqPCZ|)Lla}4Raofi3?227auUd0%WB#%0QtGk{ z-Z^__fp;9HQ`YL0HD&z`IVx#(Wx*yJ=6QJZ%Bb-A*QjX4&O`*|y8S&_?;@Y|nfwj>0)ZONs zlq8`w-@}=E?d%kht18pqoMR|ldZ3P)eSb}nCe19RzQUfQF3M~Hy~1sh-DNH62pGzX zfByFRUMRh1c?A;z48lm=fib2F33fTvLfL)a5|_3&9Da%U{_H$T&JGv>U(0R30s zW8!CO2Ku`prgwz8kN5yS6q%dB9DrjPKQr^?;bNGM;@05=o!z6xi)_iagkeH{OlvC2 z4W+=$^@&HYL)+fHd!36zWgG2qV)nHv1&fp9tb7hg&kvua@qzPPHrg{8otNP;^D><2 zOQq*!c%)iCIxmwjH_FjzKD+6`q7vy5Nxrl3n;DJ*$q{Ku(F5Nq3w)OJq;Fp~W(rSB z{LYeZ@|_{cXGrGgStjHe0B_yY1klJ6p(0vx7}09rdX`8Jwir zlJ&r*Gf_M2X*^+eq&LqzaskgJ#0Y1}Sld5mtkOzHq{y7iO1qlaDOq0DL+iS3>J5l& z1)k;wrK@hNOX=;KXD^4-8)v8{b53{9^1;Em3p?5ZRROb5l*Gqx%qVx)_5`*0IexMJ zs*dWxMyJqL=xtYMP1@%Cyt2DWGWYL{W3S<(|Ez-P!=YaSHsONAj_7d85-7%IM>s}{~FCxBd zo*{M=xX+zka?@-_de4E`RO3_-&omcl((MZBPvE2U)`9$r^|QQFAVKYn@QzF-2>Lz% zMrIQ(lODIvVSAk z#pD<0yf+`sGs84Iiw@%#5sx%CN$dsgC(bQ~yz(PnH83L&O~IZqNQf(ubHM1c(AX>< z9lv$-jp8O zQ_G+|w)O~3;dc^$UbV~MOp4bzv-s3s|4J?VFSUj9nkXqA&bUhR>)gUPZX&tIWE=hm zvjXYs^3ItLc~b!AIj9GY%@UzGGrdY+y?hD2{Lnr39Qvecpwa1U9H{#1#<#9-Xt@5Z zjbDtuxS#vzt+zhLW&2w<*4A#EW9x*BaSU@N!hn zY%;3%QIz52lKf@$5NLw`V>ZJx2;4G?Gcd1g=j1X|G#`#i+@m!r(n6G>*shPI=G zI8XMB zPj4x#+RP-zV*S@s3{gj6j!BiXUsU*@++q%tnPqqM5w+Vd+nzj}2! z3Y$%Go>(E~?cILg;C7i(CgjuW_>sFa-7)K#Y4s=DFMO*`q@l{2R2&!lsQvN8J1&oM3H;S}W?b6RQfN@!LM z53gD^JVYH6RIj4dT*T3uCW`o`Es1%t~${7d6L1IAd5RKNU-|McLQ9J z<|vz+qw{tjS%3wBHz6skEv*Bu!XbDIU#63cC`<}I7;q#D<0IuW-RTQv23TP19qLg+ zK)y=rDvZY{l3C7}apqNm3O{zgIlC$Hd~%6jjm}q5l#J7-zX#dWGk98h$ya}w|HiAo zZLe%TcmI>~EBXrz>8Yd3iL^)m=YJlh`4^5lqLz&Rg}DpXhDJ234|@gialZGZmj+|= zeEH?ebmr`<4aAbifPnhvV~mYL1+f`>C+gQmyMLrAC#_X7QC4}d&z@=!+^E$g&stSc zv1(SbMth^ckV3M>_8f1LHZUXIXiT3G&?b3v?6mLRO~fK>7g_#`F!!pBQuZdL!d}=B ziL@8mmCB85se$-}r*at`N_(bTsdQ)Bl@6mz#iQ{gN3eG|(*FZI*(-(CtYnWiP!mi@ z2-XC&p5!d65Vi68v2Ve7NIQ>-W((C#E0WOoG#?7EM=HEiD0QmbX(nSDvguDVn$p}V z@{ZAG+s=1)pKrsme)`0i=2EL&@J+;}Qn?~bzQJ$t3i2Y$i7WtR<70ym0jtvy3!Fw< zmri%vD7DmgF3M}#+n44ks4WSQsL)LmA_?OP1WLttWdyo<88ju%t(HHnl0U})EG5}%P(JnCBm~B;`uA`X}EsPVO`;q zjE_q?gg08@L>ObFDC5%y8;?%L1L6fNT`4tNW{1)mds_>*@rU&p>c{@PiIi}yEj1yz zBWzJ8@e;HIFiyh7gm5E<1wv=dvg#R&Ya*d+@6pl|HQ1bVDo$RMn3S2G@7JX`lw5_J znO|p7e+KJ-5$W+N+VKId6{bZ%;;fMJxqOo;fny5V6$(e#STuZ$Su0iHr@%tCnzpS= zMsg1AXb3SSx*YdgbS;(Da)PgLh@>{DSc9LcJ$J|9Y+t;CuW9I8mZ4AL!8&H*`@k|b z2SUwb$%yyqJyHl4dj!I@fGoPcEKo(4!*8*t;J4Q3x9~Th3;l++sd)&@0m<~>^cALO%hcIOL zTq_ncu_~58IA28JC{XN`T&R2@m(Fl50AGwj2z<#d1YwtiZ>q-Or*Pl?IMlz=r1{)Mf=o{9Mc4rA=m zpRi|MrQw{1%gpz&^Raj5@x+mLu=D5XcPlX#`Rv5Im1Ol#_s8CqQ6J##V{6bmQeh6^ z?IT}oJ9(19Z6E6t)Sn5&E7OJCzTy?fTU$@AC@x-cvbFX2iejw3_4vx7qLs&6TaK+L zDq3+2jVo{%yoQUe_WN1-K#|i`955IH#V%)2K#$FE76Sge1^fzXDc4T4(n8B-5pH06D{tz6Y zUWQ+jWAJx$Kc&NZlHhNO80$Rwlx;xTgfhA;WaKMS`9h3VGGT6M1z(m_2;v0_SGvuX z?oz=ijN`l0itN7j zuDOw_W_0?uFr{T}RZ3T9r!TvDZ*{h>qq8feYHe%EqIj8r{j)eHMGZhFu#4)1^d48# z){^-YX^>dbRFrrnGDrb1p$D=;eQFh&FHJJ@<{<^vI=hpdW zG$v=HbnojLIG>KaotT~C)ylJNp6pbQR+RxhF~~J?nc1T;`IB7Ua7lYs{brYaPVv;} z&P7?S46i*gP%^uq?pnKZuqtwE&;a!5qs+gz}EZg0;nD)r9#chwYqjtW(h{7E~mV zz0${Z<&ONOl;#^Vv9fO+K5cK;7dvO1T379{k)py^aY1!7p?A}VW`|&TDiS9Gu*l? z$ISC-eO84&CEsR9OUtxSL%F-lRJtu+&xJI#jfvRhWFO@B*^nkjY)wvEmar#GFQ>Q$ zhLw{Jq0xQ?G2sn8-U@Esu^Xh%l(CjTWo1WWR*mLf)?Wcb{GgG3sD?|cyOVO<1w?XQY zgD>58(?Dj|ePbsFAG@wLue2=3Q$0T?efh$!Qny;k>}f&$ovnrao5(7mTO;a^J+TkN znQDEG8pBRgN(UGs&?$U`DMt%KbRtg>TDhnp?e3+$w+`o&TzjT_@yT#LTOpPhlJWvs z9r+e(c4HtVH_1BE5SqRHwqN)4J$`!o>=3*^{diyBuWy6*+dFRkpY@HmY+qcHlvJ~L z`z?))N471jNyJ!^rqasNwP$RF zDRjgOELr}+!LI9Cl9F0?&F+5}xUQrE(RL-tG@jU-O1P#o!X+Q|d+?0EVNq`8!WpU5 zhxo?JZ(Me%tPFH4erpu5%Bc#hp56Il4j31w1PSo2?^b38Y zKA7HT#)}UKj?k1Gj5~OvN+#SS=941sR-r;pI+aj6)T(6)smfgt@>Hgq1WJRniYE}s zL}razEmgRS(`|)8qg|hh$nBxtfaJP6qvV?HQfri4l$Qh-VL#DvNS#-U;xSd47Kb|4 zmzS^a2#1+#=$zJ<>#*ngwD4+oz$?*Hy0$$OYF}Ggd@cIy+CqDtFCoE~XLscLbvi$7 z*Sv`JGNC0_z&az0zB0KE5cPKBIHNHYoe?Hfo+_fEl@~Tg1$Lq(n3Gw8Iq4;s{N}{& zaIh=!@HIDU^$D88YY!%MheKV7hoaBeDF^epBf4^3Z~P5O{M|GD@S+As}q1iH48Q>+IHT*aP56Xxk9H>?hY3FmfmOpPr3}$ zaty3<8mPB}A7;%- zx|7wePxThPTvk4-EqmzroJDbRJ}i%(ZJLR6_F@(na!U2MmyZ)?4)Bc8r> zm5f<;MWZ=F@ffAniLD%1n2=K7>`tpmRY9h7+*Gz_s3d3Ay-NhZu4|Jnf3>VC&MZ@= z<~5|*OLr|U%36NcB0gr*w}}Uiq-DkH8hceN{IMSCH$}j%OuJ;WoKkmZ0OIv9Myy zLTHH3S?s8%7)k>|qSY8f)Xxw?FFI7%oOP>v+Q2uZkN3r6Hi&=A;U&3+8y{a2k6ZO^ z^4bmI+&G0yXmF;OGD4*Rr(7?_8zmR^Z@XP@sjK4bS3BR1Z`k_a(89-e&m@njoPQA( zrZx$M@p3tLw2Ram)X_6=D20h`C=-!A2U^unQWPDurpS)*4zpwoFbgPi2nDII+TDqR z>BHxi)voU;Pw27cYGqKRH_z(>haubClagpFb6^!Bol8AZV9xRBp1{snQoiUsyS~C* z(iO>-5(cF`LAZU@m)&aD(*^T9TwcG_VU!)^>b==+fJ}KDrND%;rk;#T(WlYUN<}0FpV_yIn z^&5~&{pJVe0w0H8wR-s{TxMmg#UMSoARx2SOFG6zEWr4AVUNEOcm@1X%JqkO1J^su-1zsa zh9w3$kIZ;Elbh#URJGJ$;>JG_ct-|5S(44oa1K?!QoYEL%+AI;sV~5D^Bi{S3vZ-` z>KE(m3Xn=Y?N0=Uyy03Php#|^%R>!-gDH0EDMt6`9Q%$qPF#ES*may~D>&l#tOL(4 zS@PWe#>V~6Em`vXfm#0!HZF)n24)6>GY2A(1&u*0vi;qIb#({d-M-_!gSE8>-`g?& z#t>(d8SlKPRN? zx2Z|}0^mmL>jpR>{T|Mt7+6ozzG-7-{7w3K!x(x_81oZ82p0nzwdmP3X2eg!v5J9B zAED=ZI0wg*GvV{*IOe?{e}R6#oY!~%w(9C__xH_va9hnk?FAiaC>)|Kzb!4Tqri?uZv0?hS=qi1ZruOD z4W*?we6at@wi<#ozXNF!p;!dS>>?O#tbhc6XXMYo$$rd`FRcJapSl13`!P#y(H13J zI{+Lb#mu|`=WP4~*hYSIl1xX{0uw=nVtX1BNB0~ON@{$w%QvzVoJ*|<>(t&nm%rF= z;>W3VY$@mZ_|oBH-OX_L+Y8$x)Q{l-=LZ4H)*YbPT~S`?wq$uU3BD||T8&}qhU@z? zL!Fyyat3BMC%qCcWHB}jX8bLPPvN9f(Wx6^VWny!_>DC*9b0E#e96!)-5od0Pa7Ou zvm$5NnfbH#FR9ZFCuaynN$F*YfteX5Q`xe{%>HUmLTZuQUz{4l9{T~|6z*78K6t?8 zxNURQ-bDq8jq7Ko$`yKhj#q0)tM)}2LJ4PqCQuV`7kJeP$=Nh9^jHCqzZ9@92qt1K z3QtDI=0KAUM4j#wY>$wdgR9NjYcGwyE>J5(m>gUC2apPmDPtyiu%@YY-toam#g>Z;a))~xEhW-y zePBsZPFKEp^Qz=-|BZ{VTYV|iTx_j0d%^yu!Sm~iwVrg-9F16RO?8*e&04ThCQ8Ki zu5pD}(er8ohhsxF+0QG+&oU+q*p$=Zs1qAz&FsjtSo2#WnH~97b8b5(Q1TtEf$AHE zib~f1YQduO*W}mKgNU{``K^21r5&M+_B^w@u-TtByTpk-1l3HLJTUKYU*{cb%Zk@s z7@YIcLU79JV$OKs`206)7dbk=L&+y%b{=#XEd1Yb{Lz21)kcftA|{ZzRHHZOlZe6P z8o%oDCqk`UfPZ1l)LN}K(0Xhw9NVA5v5oSC7se=z@maF|`53E{JxcaVneRr)cT(Y{eGkejY_O>I7aysue zXVm%@4h=2z)n=G+$`~lNyDBrS*33$my*OZ`bnY`N+V;;&OPja9ZN(XP;-SInt#i`S z=4`DVILyfDGAN5agtA9MM@Ngre2FgCV3SPVaEcCPMnMQIT@Y!^Fj}%^rUqwZ7=aHG zo4mZFc>DbPqBVEV>p!zRSLMlfQ=iIn65qn!TfEeoJ;NWKnQpLT&!Cc2UZu^IGUvuQ zttVC$=PkRnJ9ovWCx8;&QJ+0=?A0|XDQjLm z7QHg#1}?3zwd9?QeI7H9AUiuWldSz7!|oJ192P-2IEA*I2_hk)-z$g*B4IO_$D+@0 zOW>UCfcRtJhM(y3Xh@Hne!h{JPvHB0@(g_5FGJ61V_)Mx!8slSH~kSkr^5Fd`uV`y z=o!xZ1c(0p!M~zDONH=e{Zji}F=x!G-}}ta&~NtC)$RGs(9kn`>&KF-d&8lgDzCSy zClv0jPX6zjhtA_o@L}6XCe0hs#tBFW{>UGI9ls>C8rAF?@W}5TdE^niGBtFski!=7 z2Eoe9bPQ<}chCdzpO`!7Q9oHAPnkQ=CJX*HoI6Yk6?iDplwmYPs{NkI3|E{a9M~k9 zweigC-aA$l_-Y3-s7HMriGTIlZ)(s)l;GjCzTSE1!P;S6|FkevGj@U z6*^zGWxmDaFnMYh=B?Q3@L*5O4;9ekt^?9k6peAs$Yn4|E)zxaxY7TSd@{Rg zv`S?m?-=xF$}b2ZEGKZAN2yOorHPheS$-<&# zY4EoVblKVQG6no@0sY&%#(!G?zbmK9?j9S9mgT{+F1qX-)H9f}8u;5by6m3u-xk8} zTIf3N9mlU2epgGEogbs3WesC%u?n!6g%eMYe>azvk40Ed!?I^4%EtbPMSu~OJv(0J zqYeT)wg{HJK3=aImKo`?H^xR$87<#_fNk~Vf2R*)1K#TXtgLxeNl8`nvaAIRnrWE{Kl>Cx*MTL<|2SrBK>B$<{AqH=;g zO`?hDSnCNonmvu zq_A3GvuN9OtRJ>DiFQ5cePEms zUTDW7D!jl-oOlU5AQffZM18DEAcUayZlJwWoo1juYmS$nI;9X-fj6lTqx=7WRX})2 z(`1)py6B4Oxp1gUWj0wxOO`RQY9OzCxjQJ+h!c!%qs*q01bymM)j&Sjm>jtc{0~l; zGwS_WJ!P&;cRAE@#R82>my#;r>cO@OtDi;3ll%eeg!S{0mBUou!K>)E%#I(J;mHc5 zq@;yw6=97w&u*>AaymFF~$S2WDi1I!hB> zW!;&Xiz4qyRLF)EBG3fuj_I=a6kQf;;*k`=mnJB70+v7{qFxqiu)lOkbb`?@;^dMz z@Gq59q86=*`J4OzWx$tozNCz4l*GS<@=NE`7OavOTI06UDz4$cmmEa_)4hM34Pvn6b$+^O-p*}47k?Hn30;^ zqEXdHk}4xcW27=EQqSnDrSQLch-Vy~y;eRRj9hkA+0JaYe%<8_hTZ;@LWxzZ@M-Lo z*$#X0oUH8Gg;t@)q24O+>rY_Z?o_`w5TG8D+vGg1E>s)v%qmQ@{f z8p(1TS!L38k?@=D=r=o~-z3oA+>N6enYr;!!b2ROeKw-Ik;qb;@KD#jNUZ~#UIbgP zBB~eM@(?&e^)bKMi51~v*yWgg-A;VP$aUCd#y@8v>jgqb^doq79&qwNga=e`cpj$i zq3+rYW>JrB0wthm3-uV7`4X5x-MtYsfs#$sqo8OL^%!*y@k=}Fb|Q&5Lg$T2V(I|X zPMIXrp4;))Mp8iSbhGE_&k#%S;#m9)9O!Rm73C9|N!UlO(L;{?E0()yFSWnqkTv+irD4j{o1>Y~au;?}HUuPfw z{PTy;KJ?K?55c-_0dw%b<9}iq>G;HG7h1&_57C;SlM%VHpDD+c#w@>;tCs~b^G%`o zeY2BHS*cczO%}{4vW5ocb|w9X_xJ{(Ld83#v8(w;hf$=^@DA!+T7l7Sq;C1SHw+)# z%z6XAKn&6Ls>s%rMA0Teh?WbINlFt0h5bz?6v|J<+vInGbv@vkJLR@`MwUDc zVSYFT=5*?wMljJol?lv7kf{?UC4%{V548yaIwcnhWycY0*iKu38@~+497)?QA@8`$ zZ;ZC#D}fs%ARg)%`<$&N?`H{UZ=0wt1Jwl(-BqVKXTp$0DOH(?S3*5|TATLuXW+b% z?{k))8QAs5SzCQ;Zh3m;z0}`-JCNGG<@D1F?+5V@bdZ=sYWYC9@lnG&*3s$v;LanO`B5hT<2?@DXZIOai zZJ|)xq!Msm>da0`%yvpONttF#CQ9&-X)(hqEKf{=7XOy{~L~jXL-3maN6cyO+Os)6C+0xl`J@z11sM%f)IW4_MS)_~-0yT0@T= zJLA!a7C4jckBR#Mo{BG?x1-KB!y1oqr3Ot#ZBWPF7+=)Cy*^rIWXg!Q=G{EUCzAHZ z%LJqw*)6T-S zW97}-km^mnSH|Uk6vvY#>)uj@wM~pJkxH;>NgPhxR3Z;N8~M4NZZWdf7_UWOkkz>ftO|d(QOj4osSBv`_my27$vn-Q!tM+s8UglYln)hl@nk+n zwJ-yK7bmtU5pOnAr=z^7aLVu-r!fBL#n`YY*jqNTK;}{+hHZp+JxI*PW{@8u-+g)? zK}n~_wT5UP``CQ*pg1{_W9siI2`X0vZ8|d)?Q$Mp$RSS)6hdxIR;X4r>mbLbQ0TaE zTmdq5X8nr%C)UmhF>qu4u2%s5m1%kYyoD%bnPf%K<21>P8U>FZ&tX$)V^vl{qFKca zF6JaiWNI#-E8s)<86ox&Y3v**KbcI5Q4D<)M!gc{cZ2fn3Oe@B{34B8_tv>b~QdWv^br6?y!o)G#%v z-%h3qCP5WOeTwq?K^pjo1{vynH0K*pO7AJP4eKisfBagmQ%HCnSmQK;$Q~On@neoq zE?7GgOp;{s33F0|Z`sk#_Aai6mg0=F* zNxX@h0r_1&CClfuTJR?7oZP0{{V1KA?tz|d^_Ju9-QDfSt@T^E8Pq2d9uNz~Tx|4r zi4}7*vT|~=GUiq!GPq;ku^+fP?)XH8)2X~e|r?ABRj-%mq5DVF^d#f*EKO=4ff zaG%J4%9~!zdvr$Br?=>B66!AS*fiuZo;aTRnlA*#X~?r!G5k3Mlm^N4uIa=m@PWw# zWIRH2v|i9KF6`kj@S2A5gVm{;l8|BrI0Xsp87G%*;MkOMJuRd2)kcLq)ex#v&7#vh z#z<%S3DR2lvv|bjh%4}@ojf-rPnt8pF-U&Tcw=ye+4Nk2Mr6LmP??pGWKwfNO4Jmw zW{I{38mG*e(X@t^{cKjzY5l84!}H+PhwjuK2S1@PapkyWeJOkhpuzy81;w^K z!cLnS$8LO`9!)YvC!v`dMv{p7xgmQ`+=UY4O-h)Dzslj5^1BPd>C=+y-3j97gd_3d z_=4hhN;adMc@w$w$ZlnpDQjVKp|tt671ILW4$T#$*7{eq47~eQEY~-V37r#-f*@}qB@%5(=1|*)~xm-rerM{`2PQQTnZxEJ&f461b4t7<_t3nV z8=Jk~H#MOsCWS>b9>fV)eZlhP2sx_qHssZ&_wSvB5=C^*OHalAdXAgx8b^VSn~V_~ z$XDT=7|pIKw0jrL5Kq?)kavm2H_d4(#Dr97Cb*Y>z|JLhM~1g9?Jw*1for$k>=()N zj?8V@*O!*N?DX7OEB#-7`Tg9(_?Fs;GEXYcSZls<>!XOAy;R`8B#0 zuSRcI7Zyn$La)Hc~Ue>v?@~(3mH%Ae9Mg&! zuTaL@h<(*2qT@i(Ewsr~Ra)vSThpBSoBPx*n?+{eszvcey*bq)DQ~D)5cujIxfR2A zB?Wcd^x5l6s9Vq7M{ot)1zHhXXiZN73#w<9eWy{||MKw+epwm#W6b z5$rj49}a6?h-$W^Ct>XqHD`LF=%IFK82dN=3B)D8DkT&*d7-+OpoC?Pq|zCa%D^1J%mfghnnJ%sJHYNIyI)EV#=LB|lE zNPJ8ONEuIl97t7xx9H@@5AGpNZ~Ya)@APYQqm;S?p`jSv61uXm?Aq0;s?F=5g>x@-Md?r2dZm^&qlA z$3=J##E(z=WlqlUO{?PUsi*2}&R57Y19@m*%a58vs)nSbnC}Lsz{X z^psTH&YkR+(Q!1$;AVqu5`=YzCcH8K3ujC)D%Qm7%!%4r{<4{6ep_*Go~67vTbagI z#*0l(zuE2em(3{iTMFjnl&o=)?DSf^$&Dke_lhk{6QSTj6o7fxpia4$;Zav$iVqY_=#r~?2 zQ6~%)PG^My%n{RP3ToK)Uqe{qyGAkJFB#4ZDHJ#;6X4j_zm_REJ1`Pk$5u)%eD=p* zOC{{<2rfCq*FN|c{D4gGFE*e2y+8)mgLyo`S8=kqXVugx)P`eU!#bXYb;uc8RX_u# z5suoKJp60wpLb~V+}V5?mn-GZ<``9X5_eOd0VTMkl0B*QDOJhZCq)SmUl)Y66v9G@ zMv(bk^h^VoLuPC#k4rrQsz!gqk#uAo65aH>?!fZh;vsirLx&+3CtrP3MH!z=tI$QoZW z2O!q=EA8W^?{Hww={4LuWtqsi4Zedlpm%f)RMFJk0>J8q{qqF*Ak*pwwBVey@&x-D zmz5gs;pZ>LTht}#1gU^Qmu0GVMD52k(hd(eQrNb!*AZuu62>79+jfC^92EK}@6lsNSyR6O$fG@=Fk{=OU!Ok@im1a!!J9|X zH^fS88@pn{E`WjZ9kCLGQB0~`5XPP;4BGw>xqOU{p1nXFJ$4L)sh6hVVr9-Jv2C|r zI0e3YnR*F8%ARit)2FR@2L2fjxq0g zsC8K9*cT|?FB!O+Lii*S2P<0z*3J@rIiW=gha4H7RV`e6!jLE9$w>5ktn1X>GkKkq~7wb zKp*7)3zP<1GKTUu8?Uz3nwYyT*s|+A-i92zJ*UCzsn51;PxiR{ewQbi`Xsq3Y(S|v zy%iz7K2+g#rlvX*Q&MPIMft#|5LXm?EGnzyw5Wn~xT%xaKgJ%X`w6x`>}@mlk2BQH zJF(}ell%4oJ^jr~^f#vQe0;GuBy{AZK$yO$QnLZ}4@0=ZqBX)l+Q^J_r7|DORVwp9zLJK0L#%!hDXfrJuz!qZ+zD0|Qf~pzi4(AWV!VVi zoT3P*%n~#B>X~Owj*epZvu6*0H)&eDP>z2-_82-#Cy^TB;8;+C8;8|_>^*1`1I%7M zAUcO9C1DqEw+BBb8mxlYrWMyVdc#*c=a!vSE4${O-ZOu|k5dAO`Evx8G z#EQP{z3HZ2a_+aNN8y%yt2MtRZ1wxC#Er&`hCrY` z-MH45l9G((FFR3+{lxbD%>2d7FpgM+B`iVd218DOx018u@SC@7yS<+Fux|!aqdTaF0SmN08G(C_nAx9p(srTD&d#QK!_I&#d zL(d5OreW;4Ni;Wn+k43OH$at#tcf!+Z8ZxYS$U z^gvFh=Ir0!^UXJ~4+@C`SeRW$w-qCrLNS2_3Q-%y+KZI={3*V5#*F$vpdo`^yDp%H z!5_x{flh45Ux@8STdGeE?iS7kDsWP$6(%I)d2)p+UR)DF@|427#9W>fWrbKDuMj!Pp=3Em zZNimfAJBVGk#V|c2Cz=Lw@)(0p1KW}1F#mYPNz-K>HZwO0w;2fRC^2DDJ2R;af-Vj zS))mYPsIvF3H5_srP1j$Dt+wwNrErOX3Oy<*o{W}I)A|J!cLY#Jtw#sOq zY3$&JwOSE3cVs=fZV+Y~U^;KVjh*T=7Af zi0pj(h*!CdY7Wz!>YZkC*0M!q^}KWMbs&`NO~ej2a`0R7rX6TM>P?y7Q7$G~V&tOemlD zljIZp%T+RR>BkN14KaCiaR`o`Mxq&Gu}k6iXh=ra)8R-g60l@EWEqphdeWgRm=E>J zIHg+ckW=0T*`Csrgi@uF%d_Psm(^%;1{;iewNb5>idAeg1k(Pc}{DoR=Ei!$bKpZ(M(pY6uvsxrlo24?VM#MH!`QXW0q-Kp! zsDVYyb)1%5NDHkKO^>%Mn|y9i9%)6c;;oTL8wym|7V#z~dXtlq*d>;{w)FJ&Jc}i- zJw3fG&qD3YDJaN6{}|qx1N%_R&OtgHnCP%6yZxAUj!?|uCgdhNvl5j@^*Xs-!p@;A z!gz(os7ony0w49d-Ygb^S_US>8~gzAcCjYKo*& z(+OlUOf_03j5p|P=G?aQaC?D6CjJ7^JV?yOtgvncYusN2*|LrAZ~?YD!{y9&E05|> z`yD;X*2p!e@u=5c}w}(8a753aER)$3g+qSACFYZ-HZ25v@FcXFL0Dr*!j|GJv*U(=~9CzKAs~Yh%E|LUBRbfQLbb_vvuM7 zCIOGf;Ftm1HUxQ8Ld$(TwjDy-dj+u2L)SmFQKG^lJRvENWngL{Vova}NbrcO(q2~g z2wx0gVh z$JT;<*KSurX&gfXuKAUtl+uwpp`WEXl!WqHu;*Ip?PztnC_bQfqJYMS-oNUn2-Z2M zM-;JGoS2C=bDkJg)d{pxLc*6>$H#U8LqRlRoyqtiV^Xp>UIk@=)t4MewkBHXuk!=y0UjEbZ{l3F0(#|tD$&V(kmM8xL`L>z$&Dhmoeo6Qj$4RWoNAIIm(cx;@* zvFg=YA&11-9KK8^H`tW%90AED01zuQ44-uqtFR}?-_m0^cDffkl@9@tB*84PWO=mr zq_l6FnFeJkxyj^Ga+FEAuA)`#AzjYgXwIFtpst-5)wL(k81c>YzS>a#f4zU80H16i(z5IFYpwPu~67&cc%I&utui^9PXoTcE3%pQF|1&#R>V zil49Ccvt7#d)JraLubGqiZ^Nv)OC4%ZKa;kf1)-wjD1b~nY>8nTuGhc*ge_uWNMbp zd*hXHbneWyQ!9$|mYtdt&6>$=ZT$D~6M+4A|D1~yb@Bmfta(5J8u>hwI^|C)y(|RVcBhKq($1s5mC&bGc-zRlvzkFQ?y#HL~<-R9J+oNA=gAb$It=C{eY zH_fo$#@q7h93~n#yCOGt#n}PsZ$NVz2%j1lc#8V=^yqt6uvXNnV{^#}o47RiB=zqT zC#ZivHSja+1aZn^v51QCe6W-9Z_=Svn5f<;4`BA^O!~;VmEZ@8i_+y}ZFuqe&qveV z0Ot&mx)g6shM9Qlr`Eiccl6D;VK4`5yF~XN>^J;f#&5t4LQDoD|0_h`4Ea*VV}^qVp(q(j+_)|RtYC* z^K^bx5nCf0u0LGc`N;k@dtq04Zc|uYzWc?EwcD4?ac4;t4vAossX2Z&fI9p@&D40XVH%rN>%V#|(B zXLiW1vA{v1VFn4lkGMq5e0TJNrW*${Nxq18olMTdNusljT>nlimd@AgZP9Uxf<8<* z8_{|%o0Xz_<+gbOIhYHcx|{`G z7=09wI;{}g0S@vLWB_|fsQ5M``9@(pI5B!NwgUG{azKv}s&(OI=V23C( zC(M+N08v_Dk0rg_Rl1aJJ7yT`JTGJhsvH1T7{{P>*gQ&oF!CV_$PVg>9C~ ztbKeS<{O7!X%Z%haRuko-NjXNM)V9cy;EQU#&<7B1h5e^z6B1P9RE1 zZ_Dqz*+<^-Q)lkp(98^@CATFlzb!MNeAn+b;Ri+rXRdEdN@`p`6W!OWYxZru9)E|$ z@cnYK7vhu@U5`0|QgKz@ACGP)A$zYgCCNwQ+4lO4?bfuwlwokaL?c7->>#5=1J)I! zjqGZ=aUgRF3z4_c0qoMOMS6Vk|6BR%F;+EoCuf+Bjgxs5d&6j6E!y62YSbKN?Sxih zX6&b~Lj!4P1BbezSNsL3HEc_6bY$gr-Zy&kBz0eB=Y7=49UnKAoLSJcwKbXg=8Ck? zc(*MlS!*}7|9LZ=7JBh-V@TGOmo$Xu?rZsJC5xFe$$!xE6PgdM8sGY=b0+>o#iBBs zt!z=nOE2B<)^!CXyWhC}CF;8?CQR%#dvQ;8MrVO_^hfO7qBVEToqv8^2>?$(u)l?0 zea1xjvs1`8x-T6ud>jx5*j5umO))7%jtZMqHB@f9;lMe({kswabxGoOEk(oY-2OMW z=Oxy!tkQU-nA1_%9$B=4GL6QC!E0J2b%eb5`|L%B+sii%)TxDT9X-afpk5|~b!Sh` zg*UMopq#WDz@F^-*kASDhT#jVa??9kty|TZzGhzKU|qUaW{j&%TyV{{;#H4sEX<%^ zWoSb+!JM|DRJmLyAPr@8MMF2$&e_(Hne2|#WOjAH2~j58m{gLQkhkIbBn9bIHTB)GoCd#~N8o^`kli9vWGp#7 zfOiltUXBniN^B8_+RGQH6%uli!UAFFpL&{C(fu*9-AH0QI6pPzOn7jpxF{rps0$mKTq0K{>;0sT~>5Jdv~L@Woda zv>#oP1LAe5rAe8qhkGlMc=}+H*dY>VVEdALWs0vp-bqoP{Caz3=ITe*<1dYbOXlVq zLv!~&@Ybs2nYj*v#CdWwZ;gEe+vzdLgN|`~Bs6zBVo6saF0`;WKt~;=z8n4KOKYMKaFteJyiG;CoY#`3LAu3ese%V^JkIAIy?yjmEEQj7 z(Ng-PO1q;nkDb(WIxJ3(g*R6SC zbMev@%f&>TTHkS5h}=h4`DJr$Dtr@=VjJO0xsvmC;({7ppZwt~&n16-$dZ zKe49n`oSVDXxFAFd)}cQhlngSXEvlndaJx@t4l18qs_D+PM)!EhysXHHnZn$#$$mK ziHQU7DJw=4Q-*DcCIK=N+JahYZ(D9;+jE=qlB)VvZp>@izjn~q5wD0-s?_OaZJG5$ zW#*)s1^L-)!-r1^^`car??11e>pC%BT6BM{hhB81i!>YkL+o}#8Aw>s6!*%MV)-Sl5x6Vo}rzk2$0q;uZ9 zf3-cPpjNMZbQ`IlI$CQ(s^?{@f4~p$`)fe+tErl%qOjJQu9RkT#heDY_|SktbeQ-{ z29>9p#fN)qPxw7!HSJ{k9qJDr1MD)Aod8X6bBEmnTf>Thldnwl+_JG|u8;T}Y6bU0 zso2>P7;m%|hq=;ROD6smJEv^&VC|#CrANA*D<9tZ#vHswbJt;OF6Hjq?%(vx&h7z* z1HEy?#IN=aDGOOM(hc9vb7aq))`Z?;qQrZ=Q~*y73Xt}l*N5&|e=^$b$|2ftuk`1?~6FRfYBI`|4EM zw&^1SV|Q){g*Mzd)_ZVSlSbVzw58cIriF@aFR_9b_}HKOy-jo0GkFq3y_I zfG=FB_(7#6SluBR^m}!9xMDPe-j&=y9a$xzKS;D6yqMq z9|96zChh8i*hNW0d&I;f+%qqxEQo2Ny4se$;*q;IRRyN5?krwD+H1tBT$H9T@bQ5? z@7>1TlA^(n3~(G;wZhG#E3VNzSd{J(y!^HY`LADL+*uV@x53?sk@9e z9orY`c%ZfyJ;U$VqxY61se$xeDVv34&>8x@(5BVL`*^2V(LAzlhD;o#Y;5|yPUBrp zWH?Xpi=16Zvkw`I^1wAxpY>0K)aKB7#bEF!gd^VyTA|G>l8cbdJa?B+48GDx=kE83 zb8R}pO5Ncz3vpZ`Pu?Nhnp%lU6Fe(w&D zd2adGGX!zxQ^Z{FO74H)zlC}N{$mOY48)v&Jp9L()?@qTevc`UA^jeB_&uzd@@vq# z$=){^vFDD~9ed5Nt>kNUR|Yo!7pQ|+=x=9mNpC|8r8u0%`I+d+@IV^JugxL?O*a)V>Q%}XBVFT48KV3n`L2~dtq@LnVCu?^Ux~S?5RSQu>7u- zOOC;<+j#e~?(MF*yYVjU65O*cv}diliXib*`*>Y%?V;CqZ-Cq8b$~Tg{{qeY7x+9K z?!(r(k5ktC{S0-y_`@# zydDJVg4Am2$gxMULTy3VB?UPIVH>!5%+m$WP|4%yw2?@kQg^dw{OZ2CGP+C2<~y7H zHBVf6zUSH%L3C_+xdX%aIGdrAFKg;OHdf3hd2Tzj;Y;8dqS}!}5o#i|&x^UPsMJ>; zqr|oB)|IPnUFPcUMa7k~r6)$0?C-HJX>aeOVRIY1uUYO#m6bp|G!-bClhNOvd!wY* zKXpwv@#pFB@o5sM5Z!wyudOs;29xX;AICB^CAxQ0fqyYrKXUixs#OD#O>S1j{cBsV z94jeZe&m*Wn`ckCI48^#+fQ_@Sy5SfS6y%6@Uem6)7NYpZ&47R(A(|Q`k-92LwW9q z`+F1bPvUjb@fKVqu-+k6a^|@v_3wyR^UXpn2Xy~NX=M{%vsJ2+S#s~YUGcrgcCZ8> zC=?L~>=KSyOtAS{DeI1~9kX-clzp)$8Ml#32#=hB({XS4E^zW|3NFS=jkG9~#=Z8J;jvs#u! z%7x;Wi_QW?wn$@BJ~SrN=4IwN+bh5(nM3Sw%>5%zfuF3cytdMTI@b52bRV9rF;H23 zZPlfZr3OhZst<2(#Eymd#MWIn&slvXrc~OC|DOjxpHAmKjV}-%NP%wntnU{37}d?XTNG1*y- z-ecTThbThc+p>n6HwGteYS|ehhsoS(C;N@lAa6Yd&rg?;z@CdvP62uI<8@nJANCt| zVf|RBxW&px@2FOzu=5BzQ>T0W6=LLK@iA9(*9bq0cHckLynnnR7c>hzTFSP@%ODM2R88SCP>w$i=^{kX(845>1&@LLl1Lpk@R0^& z5c$|ex%mCI4fXjye8XL7U{?gqW@NCaC3bs}vUx|h^ZxJ6O!p3)!89h>AI?o`OL*VU zaYe>TZ+cS9$P-Cf8Y8q=*5+_>=$g=QXzK}HZd*+#Ozw|s{-1aaq|KkP0NXj$Z)r?- z#ZfrVn}s&f@bMu>c*FHAlNZ|Sa)sGUVHVdB2pgR>cHznaW4Gp-&6%uBiOe9*!TzVb z@h{kZ47azhtLi({Yil2A=49t&vDGpj@)JZ_Sh*%J0oWoLYfWci8TC$vppNwy$d6g1 zXDil(Hv#v(FraS&O1ZbAWO_&5+<;}-+8OW47p`il+56ng=sjDi=qwQr+sQn+t+cnY zNTlL`W3H|W!}fLH*QBm@^sOsayl|wge9NP26$WAU_ij++D;{G04Quvq zV`B8C4Tr0Z0p{-q2E_KT-BDu~4`A3nN!R8Z`er->nYF#UgM2hV5HMDl^A78$6DJeJVMNk;Su0@uhuD`f|HeT2O9i>bt~u zc9!e(<(-bZs&#^DpS@ROJvP*|qsJkaEfve?JWr?zauR9a+r`!oaWkMWlnaMsNfN~zrVa{s7 zp`kWTKCKS)CSZrpO~N-~ZZ{=UmJlbgzma@Xkjgc9Dx0KmiHGL~bBHaJUK!svMY4fU zL9xMs!OUDno>?0aIixbhzkW)dy1-=ycD6iv(CrnLR;G|CXNuj%dTsF9K6)^!%bldJ zhw_byIvl0b5_Li@Mod!jaU4H@b|B8S%Yi;(g#JfD);5XlQkk5xT%h^D zQ-_;-i;?;AP728afuS@;vxq6r5fww41K0I}Zz!XNhS}TI9)l2>HE<19;w0{d`V|*5 zyB77PNYkKAX@-1y$Ck`REPFS8(K;4L787Yw1Nn+bxp2=!ac9^s$09Cgy5T>I+(rpa z+n6jduq6q-TV(O;n5R-*0#HyOd3c8L7>)OTSQlw1q^^l{=|aW)+ZXni_!91!Kud_P z^X_FsyNhxdN=dDQ4d|C&S1nq_Yvj5-PGSVSRoNUq_!_yY`qHpMfa-(`i8J^vct^V8 zbqpp4J?*(+EDHF*AZ25;F$elrd{<#-QK-A7%&035c)ebwpQ#dyE#8Kbf{=x8s~Z>| zsIwJ~UOPPfSfC_F#LKgI!_J0ITV4NPf1S8f+0Sf!5{7LZUW@?8v?5$dM|CXx4 zzMYM;ExUSMs?xq-Sznb~q~_qujO7Iq-?FQFnhve*l>QD3G99%e<*pW=no^)J$eVZ2 zzN85uZAEPa1k~kBNzsl> zH~2@JfR)8(M!@555nGx0`sZK!#|I~u{{q@Qt)Qnd%OHMZ@+$1WYd){SC;vY8(loSt z?!%0CeX7WNNq@Q7Og2BZJjLe3I*Q%!a>d^I#TtsW94dP`1N9XD1P{Y^hU$Kv zgk|DQ76j3Pm&C&YE*3TRHWmd}o*eLPTs5ezXRAd;<*gn^*dbQB$|}lS$|->|@u=V` zN2$|UGtu0Bc-$wllp6a*3avs?5Y$@&1$tvad1s(7^Ip){C*ar!h=rHt2;{rdqg6WILigVr=y0lsX4Tox3MhgCjmii|32m_4sKpw; zD`Es!&nByPQ7;AHGbQ)Uf!r!4-4*D`18t5X6t!YyV;>XCKYU;5SE}h)mQawz$>MRj z+UjN1RU;vlqPU?T#8? zN+WaVVzvOjar989!BW*>_Er6k9eC2b~``$j$+;r@D1rUvA5Sr&%Bb)YUh@I&(ANAN$pxe*@ps$`p_1R*?j5x#g<2VNov#b z`C6M)>c|%e@*UE&@4@PKdHnCo{e^$Tt+wU!dNmS9FW{eCQ1!=jfN z-J94Yer+-O9sP%TVs|@VFz9Wx^GQa7>!sZphvK?C`Q&xy^2Y$rn7HofYCW5F&of8K zGl_iXI?}Jrw_N^jJ&fogwk69065Q(FIg9u*7D|W=N=9Vf2W5mOBb3pZG4+4qvxL}4 z2N+8iF#k6H{T)e!$qmlMrRCKfwdY46{i3gY>SDaWbP~7XG z%f)-JclnFsH{uP+5vOQKDymASJlYh!nFEmCKIBzWFHUlt;_qC=!o_5&5^}JOC~=v^ z8Zj?hz>1J-Ax18{I`FUu84K9?yu>13N|KAwC5oaeTx7-3XdsZLuN&RTwb0IagY*d& zNAo%;BOqyk(XeGQdMMdycX-vcy~d_c(^^k&XK7ooP$knd3!eD8|M-}DtY|rZL~E=j&>hhXd=E25Heg zS~z9H+ZM%jNOg;$>`AX1n@jQ^wXAYd2`_i9T5@cn1exrv)@r{D8tvGe+mhrK`tNUu zWCs^dQ=stM>09UX=*Sf2}??9K;>b_G^py9Qjczwg}*ALb9)Q#C`m_44ag<|i) ze=}F=KZ(C5GN=CSD10=FYC)O>ygx>GUROarD#*x4i_K789VbZLu=UBgQ~Ii*K(L`m zFIJPeQ){T)sXZ@ln|U<+el%5TcWcL<hH+c@H8p~8z`7UKHpFnb|2VpH%o){OA0H8%ajE@2YNJ$ z++4cFG{WXqt!}cS6t9`b!uJL3YBSGV?Zyt01i$d$)FETX$_kmGvbQKW*<`~jTUC5I zXWNisV8_k-AVG`LSNcKc3T9dJ)OctB2^w+uZct!CZ(m)h<%mJY~Q??>WfZ` z+d308W~Q}|P4nLPu)p(mtSss9%J1WeSoEqb_l(Xwx3{L{suxyzXVxyW)NxdzqRQUV z(((EN2DWA0c0)y%>twdjpji9pmh!g4FRZxot)q2ZQ>Ck44278?GSmA1qZl%l5rpUV z0C^vfcb*=NuG3>2m6_W5*AOEnc1^`Tu}B#upFG9Si2@+^w0bLsLmKQ^WtYFY*DVav za7gHe4fn70O0?Lx=D=WSPgS7^-Qr2Okmh5Xm#TgzVr2{SWl9ATu^;`O{2HIm-o3rW z$&nRQG^%ic%%ebSXxe&Rtyac-r@srWfxP2}hE;XV4yDR3v1syGd;}zsQ9J(yz80=4 zn30Mz6a+$DK4Y=;&EyM?E7=krSMO=`^bIT@otarXE_H_Offk>YOxqltoU(V`yfHk~ zZ1L-Po)x!FZGI?-7mHXTsi>;hS94cwxyEA_Q9`J~$VGP9lFeGaCm2%urI$V3Yc_5io$BxNHWnMWJPEr*Ro}CseEigM&n-Atp)QeF)qJ?8 z_0eOf=Qu+xj>e5`7Ot@Z@-$qd$n4RS*WOv*{mI+Pp}ou9&}wzfWT!DFxNs^VXj-HC@S{rt5-%W_SV%;a@i*({40p&KymBw^XoUf zdbCAoa4T0!bNP7^4#T-*OMTm}?t%<#{zQi>Xy1)E8R;z6KjPzRIaGTrM^XLwW2^##ya8*{wdsh zA&C_bJNpE18~!QjrjK`IprTinjIx;d-|kNlH&JK%O>w5Nnz^rPx&e8 zdQm!LEN26IiJ}zo3TkFH2X(PrG9xkO<%Szep){weU~aH7lcyA!j9w?WaO-TKVme~c z23j2E3hC^vc&3*n73AuqYVBil_hWsU(%uqxyH6$JgI~`1qx*n84CfNW-!V^$UiWY` z&^Fsh#@19>#QA6?(8FK*sUTW3)^dt=D;&rDo%vBH5<)roQ8Wbi4P4P{tBNH_1#*;P zF_|PaUPC5HT_a)woN&#~l6g|UV~0j|MTQ>Q*PO_cGS)3C_jH$On*}Bwn7s57{cWO{ z%9hHY`U)|4G}7mjz}Ya8FdN3$O3RZOm%+QKkj0e;t6S`2yHt|;o{_?bpPTLOG*lHT zW|y>imzq)R!rr7R(hH}0-Stl4k6uCyJvJ^aYILEmmJb%&v46n1*AowrbDN@fByHve z6VJ+gp?WJd>uBM_&(1zbPTJW{PWts}@FRswCrF<3!h$*BIWXk#Ei8-YvZi#wSis8c zG^{{qI*z0)zUyGWGwG3GTa`tQ?oMN6q2gbiZQemM%BjH*Cw8NF;>2J&Ymbe~3L9PM zI!+CF>~maXR%U?to#+liTCGX-t8rQul8a~?jc4yrcVFMM2~y_bQzb1$c0|mR5N#O-nb(Nuy(AQ*~z-J;iW_MNsYX~4~|@O z&5`{FuDa>~_(9`UuWw6k+y&)R<@`nZTk!qola==Am?$U`jQ)7i@GiANtfXwDN~fzD zDJvgEpGPq#s3Kkl_s(5adfVWtGrPj!U1wGe-d2ijecsW%Jrdd0<#cv!i$u0}JFw#) zJ@?mhQ{K|H z?#}-KuLdXTEyl?DNY9l6F4w>n-I4XpMoaxf@Xa@|4%d=(dyiHRKX#~9W=C-Gc3In@ z$A+tq>|59ABIQ!%{3qBt$OEa^r%5HqJ|4F2TBC~2aUJZhv+-zrE+?q4RJct%#0PTS zrlr&B7x?TPiM_&tZB2{`W$^!DO#0hj7p0C#tD(k(cXSP;(-^-eWeZ15dNA-cE_h2e zHRFsh|{Cy(Fw4jb4RI`+{ffp3gZbt*M3)AOuM3=!Y?DoTj z8fchYw=rqfxqfmXgQc{5OzC;gh6YOr5!JHod9~yE0zE#U%BW`G3JNEYuhv zie!+eE8*!tQ6!?#aq^T|^4Noo-80}kwXk$fl zKn#B13fly|OGmKYpO?xWW~vmWpMsXPw~afd$HitYrj^+I+Nwt4y}94mfl7ZXPJ&=yluR4U5Ar~5r=tvV5Dlle2`x~P!6`F+T~PM99*O@ z{g}(ZWs>T!FLFdYzQt4PXpH5;d6wTi(O7NqQNo^I*j~`S9twz@)O5O`fjV2^*oook z$NhL9JqfOH*MK|ERnw5*ki(bFphM?gLEH@Wv!_T*-ZaixV~njs~GFWRmE4M*g@Li{#-uAiP!af z^C8KX(0t0;2aZa!}}=h##`)Jsq^urUX@jE zK9jy)xvbC@(VBS-7Gv;WcqAYLK;i2wu}1XZ9kWXyG0T(&+Skd-`K6}b>jKqH#iATJ zQ^agFSGJkV&1D85pCxA_{>qyF9D9vkPUaL*m3w4`_QF~(B&LMeYgCFA@hQl2nUe~W zB2~+44a)^e(5fK*ED(X}C$IuCV3L!&)$TAguBe)OO@?}^*`VC|F};+^6JJp3pPu#g zV!Cib;TuSScn?bQawH2Td?Kkpi;@jR^Z%gT2JdPXX?JL&J_MSb;t$nOrx2k%rzDNTsm57Y&rbWnl&$7)ncq2D>b*9b{FWtPD?|H))raj_b+R-X-gW-V3*E@ zS7gz}EtA`;M;_eW(6IZ#k?QS}En<4sHjRb2$Z)q$2W!SFHJZxtn&5Q1n*o>>&9*2u z@BHWZB^r;+!AlKyK>83vl66DKxg<h7cCUM|3Lm@nxx zv`hw9<}BBv=D2wpyIiSf@-%e(OD-$C{@TdRpFhxFvhMyhk!Pm7n=8yR_qb#9bf|W$ zT11n?dJfzr;45L$lkvt=4Y)-1`ElRDc=nJ+`iX zij;!6CzL^@GN{5@qjeGhu1`wuK-g6a*GD37(4?`dyDUEQtt_MH4a~{Z>7Rc^k%tN8 zUb(_2pZi20qbp@{g6hpdhi}p^qxpH!9%m_@A#B+v#PN63`rK>tR7|FVcOu)UdKVld zc7lW0Zk3q$l`f=Khjc*4&yUq|&}yk#j`%f6OZgKf%!u0PvoZI2QW~=qd|~w}t?VQl zLY|Tf_&4&&pzdk$d=+gQoG+z^FH~W43HQDYBi1L*m#I)V zDNN60pl}lWMC2ut_Oi>aF>{R}*XZ7e%23f=Sh~E~rU{!=0y@XJ#FSoaf@-DiBx|K? zX}$n&qB{TEE2V@MvQTR0@x{xePVcDaYoYnCgVz6{UFkJaScU?=D@)+~ZZhgml^w$4 zg|A0UjKv<0g_IPms|4qa;vq;l1 z`soKpo|rv#<3FDm9ev`TH=de(Vq`YB`u4H0+tvhwYi=7GyM1+#_(EzeQ7gR`iNxYn zs!Oa=?A;W+(hKX>y+M3_$F>VcBax#Qwr#&~BoaAtVY|wMe#4_u`_N|}ydU-RpV3O< z@shMaNdl7@PlU-6(JSzwv&zC3yE_7%8|$^&hArJC%}!xg$L%{0zk4DQx&HmD-~M2@ z$rjXeos)NgH$|pmmBwolIs5i?cI@dX;A;z{-txP!NX)Hp%Z*F-<#P-D7j+nqDcOvNJ_>a)}N+-){@TV*sG7|HpQ?ip}L7bIUCEC|1BujScO^+@z8Ie_6g`HRUY~KvG>>l;ti1q z?6%4{CJFeQFC}(}+2H4t4-DGl7Fcl4uuI>kVrFOPt~lPqcgOqF z*a4eQMe0e4_H%TaNMtsifO7Z5z%J{zh5El<3Eqk2C0yNJ=B9cfgy%oYWYXV;^oyu$ zbO7Iw%(T3TXw%b0YUg-b{34!32Y)5#Y1L&k7O4(=b!l`#Lc%OAx+gQ2fgNs0p>`Gd z^1hs297hyWHAts2E6BW#B@6b^u$ZGh`Au9TjUwi^Pfw@7UV|2|W1$~^*Rl8;&Rdvb z0av6Dq;CE*DW%YZJU)Enk0&1aOD`>4C-v^r;F(lqnaLVgR1Mgdq8rh@3(tps8GY%p ziw2C>T&Xgfky15xe39h~Qxq&&Zf@G)ZdhFBT4WEB zYJF8Crf_M7IHNi4pJl)U)seWj3)~_!65$}tn54iE@Rdyig`8-Kpy*Xqu-lJ~#7hL1 z*y{R+`s-{gL&el}<3GRYrRBOrrRq^#yL0-nz_Wa{k*~3;WZHt7k#L!tVCw<}66`?S zFQS!etfAg=b8CIMUFKf8yAgbz$c|*P!hUK^`B2CHivAR|cM$GVG-RSRe5XsKY;ju| zJQ=V%2X&}zajIyzG2IpC-Vv#qsx>4QCIap}E-6T`ZSue~(&~n+y4LIFpm5uT)mt+e8F9zygV_$YnKBSR5AO6r+)TKBGP( ztylYE0oO(Inek{obCDQ7qY1b479;;d`U#RQido{5*(9tiz!s}`WX|%Fg)IDlCKjW) zF&Q}vyMl`1B;_SjC|Wz&ylkAr+9L5|HbCKna_6ehn+dO25PVmCE_vl>9v)bs3ikMa z7NIU#lH<^~!1u_~S5Cr9w(Q20HAW8ot#6K?dz5myLhHNSVSoSPH%nYl*3?%-+k)tw zf%KyIGKD)sJyEf^ZxE1p&~vCL4L(92bsy|=%$E8k@TCH{jD($mZ;diM(?z@Yn<2jk zyYd`)KSv>h|A53IOsfQQ{7)99XH(Q0G{WatWgG|D;@k z%eWqsa|`Tl1?lb*6jDKlM5@6{R0;r|N&37ds502OTy&t=pU62+(LSN#|LN(Cm!CK( z&O!Sm8V&q5N~m;4wl;3lU-@lR#UmhSKeOQ(2}xfZLhX)uJ*bijZ6@W1!EPC3N|^A! zrPzt*)yAA4u{D@wR=og@eE|*wwxY4X9#Ifq5?fT_M;{ev;b_?Wmk8JeenlfsABWl< zKz$;`@Q*1vu2zU$gJ6%82t~;^xU{6M9&rSupai&)iqruMqxg;+A==9rg-(s zWvbrkE#-|{m)KDvIJmoLpw4<|+ewqN)~jWCZSC#7&5@q!-A}Jm z7(`h&9FeJIq9w@k8(Z#eDiRwTR@VkLkA!HHE(nDHegW<&H$#rb;e&()?VGuGD_|o_ltfD+-|lxr9n* zKEH8ID|Q$04NF~Yst!J3svYq+Z_`QF^j5Cxbb*XD*bOoJ34esfBK`pP%onEeVd*nyiiEC6&DvK43AjCfhra4K(x0 z(U#`2wM@21F1B@SZEo4xVUroSRLqAahx?HW-#MyYO-lxqGO5@P+76n$>FDcQi4EZD zt*;+#`rOpGs^*S6YF0IxFtGOQ;bt1va`^0;2t2B}t@b5bDNJ6PiQHpt@(%Oh4##_2 z#CB9rvoc~bMON0_@%iU>pz*1>Hf=fw$BLj)=Q9owb9fj{f~Etn90KPOxkzl%x0Vr) zWTRd`E67OoeRHd@8}J&$_K4+?FJ=AriNC#OKR?{D-U%l z^OYjFXT3xxxB;$(>8 ziqpuUkv-aCzFjf^iQ<9Dwc0e!&&)>lpL0!`z^9)YJ)(~VF5TP2Pc;U)jV~5~5dn{A zp<%>$K4_GSi17k`j-HGo2jN+w{2Lx+V`h4aLy%#3KB0gEgg9^R)N1LHPiN&Hy#6{E z@SavM3&0{)*F9GTTbRVm=@Murh9Z~%bSk9wsq@;qs`4nFKpfV+OeiD zOpPmR!jPvScZX|MlDz%O@%Hv;0t5WKCbFf|ZtvUzd9tIRpkphf*#z(Ib#P8ALPiiL z*IJ}Q31U%tr7+hO@#&xu5 zI6gw$E%qgV6{vnEBtlqn4Lb?nf-mJ7)utu;2L|>pF>4H2*^KNB;rhlSuWjE3=dTaX zWHEqDkY`@%2~9Pa%?(o_&r)-iASaubIaT-U#?5CBgu@5UZr=E8-BczI-h{gOS=v`L z9jT`v%m->kAwb>AOb~yNQ1T337Q-V#)QI7&2Fs04-?z7Ywfw2mtDA7~FTxjgq4jIj z6?`ct^Vi{*Hlb~i%K`!gFB3Zz=sR%CIOU7%JEoY!?x<-*`_Xi;#F;CUszuxGEvrNu zRlD75W9dv5K6*>4=09VcB=hA3sLIligpOfI&f<^5Z!T6ii!GBSY;OL6R!_>)7jts1<-u={il=gr9(P-K~|2Ozu;A2DB zqtTQ!S`8I0x!O|$t`u=p?y$+$9L)Dk-#R{i>k6N)w9Rg*^Qw8WM`c1LJzL?bFsMC7 zQ5Kykv^>tymlhcOE)ze`>&k~4d}5KO zs>7`-vznxAgIH5!(Ls4^E7s)c*)lUF3p+7DYlP>-i{)b^PzdnIj=lSL&LiB@nU@aM zW8m~-kKebAx-Hu>$o_br(IOZie>b)PZYm#`7O6k@61qAK^E>zN-GKqL$LO}*_vj<1 zWBC+&Nxe`U&2=}Xc6ZY8z#j%Xy83tSTy@)ot8ntx>7AcqtnQYYF5)$Cv3OudUCZ93 zZsHL#?uVhCwD@Q|AA}dHU5NYs7&gGCu&dDWu$ke(UV$y_0xh4GDpbseWu-rVpKB3M ztgw&Yz82F03zeY(e)|mpwr~Z+`*tuY)90FQnLw!;>GQ?Q|d0?RuQ1HfYh-ltPu3iR4?Zo?h9@ql+nv3EnN!Sty zQ?s1-@KfSL+<}KKy^4okBhPa+3=KZi6Qz7{<+Q6`7;l80r|4$yFW2WfCF zr&1ILk&!9KpF3H|;%RE4M(o9&-ii%Hlzv&A5v2c>9MhgrNk!%t8P~9&Nq1V(-!Exc zeBv%N@lrIgg7{~w!LO3)r>ji+eo@MpkunYZ-i)<)N-IMtMZ5izs zWNaoHi9`R7(d|fH0SViWe}HmHSM<0W9HJk+h{zlrlNQxe*`rH~9dmhb8Tdtcu%_8Q zwo6SV=stU~dx@c{NO5sVyLZU^C8U?sSD=0&pkm|MK$jNgb<+gI#Cyc#d6g;W4Yq=r zBV}L6GAWVzL&H?!xj*ZBT&^BHCKizS?oc?>KZawO$+4p0@aUMLc;q;B2KvXu>%Vw~ z4rLMZ_4kO^-&9*NkFj$Z-0af~tEyIIWZs+2$zcU$C$;7;qRipO>tz_ML|%b8QUQ^E-qw>f8DgIR@<=URP)%2%}aBI znYkh%Q)Tw)oi#S0z*gtJoy|W_TuH$SHjlUp`)e!|jB>G6B2+R-8~{;3uD@kl^Qy|4UcZ*ToWYiu)UIF* zN!i-8JXG1~QRgntsdNf$)Kc{(U+>FAc-Z3#B0+|q*2&zWkIXBIN z37q!PpNvoZWCRs!7}Rx5t;XV>a-DDbds9=lPy2M`J;lb>raJWl1E|=d-0v?(MHvHh zjzZ#Ey=6~T{kGnsqTX%wReQFqc1aW*dWyY5kI6TjO$_`U8YxYeo+d>+{22zk2mH(D zi16Q1o3h_z%b7V6_8VDd8l7-j#Pwf4bt1mEODbR<5sE#`KmR(Zi7ajC%Ru<50A>`A=oEb;f3H&u#6!W)_H6=#9s zE%-LE@RK-$u_NkpF_F8(0jWM0@W+xYes&f=s|5VwI*BUFKzwGPYs5DI#jCWZ9~1`i z^Mk?%h~G-`)~(~p$O0E^{t_JbUN|nDw488qP%$)Ik>kari#c7uuMA8PvlA5M{pRgF zKqCh7K5=I2WmkhqtcvzD2;>K(7eL_+CvLp)mUVnF_R)>x+c1Ei#L(Eea0jdzNgW@B zJmF>i4&X|SNyx|&n^bFBrB)Tso`|EcUBYiJM%mAUD0?8W2V9`GFC_zw@XADs;NrmpKB zI%fB=EMk#CZxGq*+;Ww-u|VY#R`B?AHF3_S4@@3u?>M^5Uux|Z2Pfgb#dbeG$u)q~DR5F98m$VH;S3Dp!?%Frw49@zE??egVJSO zpJx#fH=E61QfT23yRnb5M8rKJhty*Q1EQ>?a}X}51rbrDAlTo=MM^gD3><%4BIbY= z3`Zk#c;I@GHIKLh`-sUWmP?!hFo4!q56AmOd^|)y3FU~CSO$r1i2VZ6Ogzh0iN;Rj z7-->$DN0B4tYTsnj{^_fP1 zbjMzu92%OM8XB5}x9rGNFgSIjwe{#E`FV0?W^!s~299rnci}LkmycqV;QweRf|#Ay zE3xGZ1bUZTVpj14`8J?tGf_3G%3~3mTQ)Q_Y-lk{tUfi;aC7pG2)S7}El*>UTA(_V z#naHV*%Gr_V$#T2xeBdOqBcviv3^OhFyC9C=j0Xm8yxPg^8EbrF1NkLYvyr{u7E*Y zpi&F6MI514Az_MqHl`?Bs3vVIbhbBy!c$>KO~?S`FvQB=0%= z17+FjAD;Um)=K|y?inm{E5d$+=k{Kd&la(lzzr33XYHM&x3%DGEv>Mn9z0Dng=dhF zJrjmsH#eXZ{R}C7lGY2yLEVIKT}(3}L9bGBGL!XeH?8;gkL;mk(cpjkANu1R5-q)- zo=vCcX0D`bB|fP#YnsKRXVLp<`C^i{AIMekc#2%27yC%eCms|yWiohQdbl!49`T^Q zSX#gbJv=E@OO7AKWc0_NTy&Ej-6#%?FfDMA0z^Z?+Gqa7=2bJLGMPn~ua;}&asf}8 zr7qlBQ`q8Dwo0T~IRd@OCXaN>!<+kQ?_o?XpDE(gTchL;y_+MosIgq0kXi7*7E>;V z#n1IyEk=z-Z>S#fn`MPoCX2}_RT%`CR;R<-QL89*>*D*Xhi9IJA}0J;a!fi_M$%$T zZ=ecsb3qpIyewE6l$VS*+6*;gWuCqY9aju=SpkR4pptQfOxjYmO2V~TFRBduOnu#S zt!KF2stpYU%rdW&#mVJH^#Sl6oZp*Tvl4@n5G{fv5pS#j?#kgZnRybmSef4x3>IjW z8mU$);)t?~WPZO}U}`QiI&@Zzs-)dr(XXK!x!Kvd**t-Dtw<~_4h>Qv@R8x6#f4^Bs{gqH?P;j{l1Ets0 zV}HP$aGj<^pYX-<5E3P_AFFEIwraaXQrr>HI2C+4KQ||rrBRlNP5eh!shRW{dA{1) zXd`|F`4?XACP6MuZvrLNJPvU+##53q_Bi+gp1C9Pj% zla8W72knm7?=@6cBd~*vQv3m|i+(lv3dRk96sHd+iEh{#(5lJL;}9p{F3~4F#S^n(s0>&C|o6jd-FeUxPjw6$-GKnoEvfgL&YdSrRd?gsGpnh_R~? z1egb~)GGIw-9F}4saZfMuhf|AYG1S6-t1G`O`1x%5dR5FoR_1J$rL$xVpb@Z=UCyh zRJ-JISGC2r!oka>eCYMqmsmSve})`ID)@<5P|8&knoROV$qsw^L_EbsP8tj@}s{IVWTxZqKmi_hX~Z4#Y3%XC@UZl^+s)@+7+7GmtpV3C;_ z(HwCSE`uKvjlv`x?3gg5rU%8gVy;{-%r7qZCoT}=nw^CLjU(J1cAzU#K3;2Rh!_f| zmx+A-5)qACUZQduR4iUysJI?{BILk#n8%juUE!e$&(dm>zH*=>vQ8&1E2`{cC+OWi_ z@RY6$<4)$4xzbrxTI!9y%F4cD=^kA3pqM#JiMA5k${8q zL$3M;j69b=!Z+-35_t--VHD{G-3<-}=59h-qNkKmZ8<*4(Mi3$et! z99P9&o;vq9n@1c+u~TU5L_jIjS)h+|(j=uEW}P);>i1$p0}pU*H8yYX@m$iVT|`T1{- zk>`YPA9j-XSIA>dO^h6!$!}>~QHg^vAn_qg3art;C--*vR_^4{83py@rKP=WwUs1R))opM>tyRp#1IFPn(SLTkpMtx zt(@2d{+ios?fx}g?Ie+JT>OGYPExHzhS(goz>twxK2jW~03numuzc^b z(b1yrp2~HF`1OYm&XV8$%WHc2_`#c8>;zmvu>m{9u@u-iH=xX;-kY8k5kCh3HvAhd zVFrI=chukfoB;GEunSJJ+v_QLD4hQX?GU7|FI87j(Zm#wIg6J{;AT$$YFhY~M z9EZCdgTvaJNO#kCYg^k5T4k|4PjLj}7DP&M@A8``Jj(`KRnbb@#*%`NnXmQLw{;qf zYWRclqae@TUV*1q-73v$sZ_zwwrV&E*I-*IM<77;w^8hnXwj|Os*y^RLZ(H-RTPf2 zm$D@CSotl~Fa*RY{6m@`gOi~nJ76WFONnr_?nE3Lk1uFp1JbA^8`qu4qAX0C)b8r6 zzPxjA%xQJYgF`jpiAvQnvb&YaFL(Nfw(j0K^@|H#Hm>d1Q1kX4heEbgBx6MNBWMra2H#uCSLD$_yVWgpd$8Ni zy?^f9`{)(@@sBayGtZE@$8f*SkU1A*Zy(Z5jhXXk2gomJi`es2pMOXKby_Vs$Cs11^brw1%q3j-LdBGl^*|!Q$remf%Nv{u3_^>C3f8Rg1RJP zZ(C)|b62(%>dKsQS{GlM$D|oMA|bxm;cu9@qPOja4K?0@O`(bnBTW)szR|9TJUz}} zxNZHUuVelq?F<=P)lyM5lBLr-w8x5H1H{S|qodPc%aK@I@W_!*!O2gKfVZsETehsU zSYqKp%j4h*Vmtbv-gOteLvNEgMvjdCkF)mxY~slN$343%$?CoLZp)S|TbAVBd#||R z0tVB2@4YwELP-M>2nhs23Z#U8lC0f% zGdr)&d!ILiSrLqnbWj@_20FtI)Q}NM0Ux+u=POIFSLS+R$u``+lh?N4cuU`1)6>?j zy$bG&)p0SNOv8I1R>bGx+rh%5@)WJMU`E4=N9U&nC-%3uP$bkGtWy}Jv8m&FdXnLD z<&g96PR1jYCZp8WjkWPev4+jxQJL1zhO1iEPSwH-%tN*CHi^(Q9nq9NN6QM8E5njoRO8Un z9S4zp2K~meh+i%pq2r>O+K#|w{ih_(B+^JZ0+mT3vx&v(OmA{ymRavBjtf*7`CQ|) zX+|!QE0gn$K8GvaEZ_+zLkU&Umz6uA#O^d%^vHccb_njlFv@2Q#tip`2u6uyL3>qc|fPf!SIi}QMkYR#khcDItMrvmNhP0j%rzN+=pHQUZ##?8YxTqJM zQpuMECnR=SIcxzT;#+c3be7Dx>}>Eie}DJw_geG2v)qlj4wcdpRA#4%^lY5TjI(62 z&Fa)Np+1)Ob$5anp`9NX_5q{p>5)~7w68mSKIx1zwHKt+r5VgFYmy_o#wqiqWoUeC z=!L6HDy!a=$t z@{UXvu@KCqVz&oC74twiUu;yRn-r=Ef0(|O>N* zK!oiay>Qgrs5N6&{MR*OR)nsNUb9l{ZP3i@r%otuXaJmzj(fzQSsI_8q;~803^`;w zu2it-G@;mOE=)CZc_mN;s5Lt5_t3_O%>eepXE1cm0``-S948E0FfqB9j=A8qkl%b^ zev3o~ZxMKj0E0yWFq&*nQkGZ;-T59>YGZ~mNiSo_cx;})sLu&|_f#Ne0rKv>&Z#}* z=iY`a3zt_VBy~=NTvAVS1PVx8s>{Xh$@^`raNyIQmA}SX}ncL z0SrEjeT8{P#hR?)*wRfQ&%Q&kCd7&;xTNxGtdWpbB!Kg} z(}wfH*n5x@+MX@4bskriq#KQUW z+onzXo4s^GZr;RF2Xv$JawnA9sr$!aSMVI>a;nd5d_4os-P!^H2N{VjHlEXrK!-rPPOXOn}d3tNXFN2 zd1@9Z?xF^Wj(=F;^&IaG55bLl!5HG?^Ku_EoEdLIIacm<}O<#-jw9 z)TjVTSEdaBvA9IKK)ZYCKcUd3Y#RsMlXKwSrm=FuqvRr$G7>8XDHlq??AU42LvH#i z2zi!`0-KPh-R{#n9}E&RRYt2=nDH^qMCA#p`7gm=^xjCscVm;GzCv-GaJ(xFj02|^ z1taT(775ks+u@{*7HAVpD2>bVD_l~KLH&x>lbMv1>CwKbGPq?fg+Dv4v=`rP&1&#w zb!%{U&iXQml}lbfrcs9FDi-6y1K47!*3LU@`?LN4{AGv+@S?%a;j4EE zEb(5g-ES2kTVIAVFkGuE#27e9aw7B)YD^}L<>z>_Z34N?t23u3s0Btb};;B!e^`I-`iPGLl}R#LQe|L4O0i2?Hvy!1yLWbW z?dtJ*dvGo(1mLW=8@w5^mIi^w4`oDG}MPjnEFTQ?k+&l?M?Vf&iq-xG3?7 zAOOWyliI2Kgsm656P1CM+>6I~d;ue!9e03G800GZ?0?C0vC3MnCEKIL#P`Q?7b6_3 z$MI*dBxw60yB=kxP|1x_@K=>hj4#@6aJTmG|lx#xTQIA6FV<*BK=e z-J)2N`YdQzgPT@cQN8L%JVvF_YR*>(O zVH=bZ@;~NGeOf+<6|3NVjuQvL7-lo&llsKg45_<>oCIEA%_ocSrbV`>}I)4vKF`?aEtpsn`Nk z3O-wA(dhNjO(zaxA54jA%MorNfn}gIO~k&&#zHyA4`)?G;qBkh8emA{51okxK{kgi z;=(_%%$WiSmmzUxxm;OJXf#R%>KAv4b<7F|n;qQKIL1yJil<>DnD#+72 z3|f&nBT<8jD@7WkQz+^YzC4ToRJyxHvAt@XJs75IT{-^d;pDy&0qlz z6|-5KilOca>VmSGeQT#!%v09xt0^m}_D$@9ZU%V;y0Be+Db2pm z^+|Khs*8g$C&`sy?MV=GaaE0(UJC-*zY1zCh72taKzYU}IruE_R`+GAah^(1jpdY+ zpOC-d{lq(DlQw-!24ANX1{|SB7$-hNJ)$7pC6I1ubjEfhsf#tLcmS@~%gvj+Q&PG& zH;>tb{@;``|Ecw*ohN_l@BiuK*s}Fc&nK^7d~e6vhK98WiJJcZ6ItJF7pEE_}KkASg8>xyFK$PWzC^)|Y7p*8;&D9N9K3h7&*vfe!2mjQ6C>FI@P^#Q0Q2OXdDMPj;OJ zyz^c9yuR}L)Mh?MY^p0svef&@<#VtVa$9H(-ua`+C01)v12SM(>nTlAjem;#_4JrW zo_M-PX-kkfmfrdFWXzal`1(9pkmo12P&8JM_YlXJ97^(ppQ@6seR9%Gi=F5hO9D2^ zWQ{y&T-tMVeqQD32f8OL$(MQD&$1;VPOPOgcg^?brc8bYuyL1YIgS693$kZ zuEAf49L5E>3;#^Vyas>87ZDP45@nC>GD9P&g_SW2N^SahgF3BUWUZ+#)h&H#TV>(a z_xG67gXtzABhe@{IenI;TczL!QYzlF)SKnh3Y`w7Q6T0LrJGTkv>kN>Tfpv%QxQyJ z?fjE#w=h@?gOj!gARUuwI;0~r@1oMopf@v=gXeHon$ptJ&AUI?T8QB8bfwj`76H>9 zC)7H#l9ufekuvbTbjvbJiqj-AxEc7*aA=}#$MbVmzP!1V;EDz9P6Hf&%i5Fk*Ft(! zag@xl3|?li8IQpA`Gle?Yw%}c1|g$*-Gq-U;I2cR;+;8IxI79`2R}g&U`hc7DJ5nE zi?XLw#S>{+hD;U7y)(Pq$T0fNne@ku^ekhh3jF(yoHF=vzCt z)#@WZ9G{dSM;``z4*q42yGD)aRv(2QrpqaNK|Xky`8!TRxmX@E0`uN!9xjeTnD>A> zX^%R@7|tNHQjeL45j!$m=Hhf4SEA$&yv|ifxVH3Svn#_PzKUIQI`(QT8Pg7SWpr0( zDwJ7OU1{A1r)5~QpYT)`1$ZuVLRp-?X46zhLtTZ@SXtZPn7XM(A6GUZ^NlyKocX52 zs>78FU+J&cxN~i`T(_pa|CNQ6w^vRU7&YkpY&toM@DkD(35E1Gvex~EB$0?+5G8pn z^a&E^b^A)xSlsH!*E5*`s z-D3h%&nznfDVaWJ!-_F2OKYswqKWxaPAx7d-SF(rg$2L1e0tjAr`DHk$rCW# z22)RZO?RsJZ>8PoDx9m7m0+1gA6~_<^{=ci5KAGq3X)n@)w-1_RRNw>A@JEkx6^iO zAzX(Hs#e`HvQk|+T8CM&yw%H=tzNrg1*2_eZvd4>qn;Ci2|HV_o;`g66-Xa{@L@^o zhBH%8j|l`0Ipys7Rtfninp-S+mS98sm`~gB!}@M=G*9HEC z6J8fdWAiSBG`<(cqNRHY1;hR>I$jPZ%?}%YxQ}@6GaQNqa!~5FSQ2IAAQ8*NKmV6l zEfaIk@#GwiQt%K*B2!as7_eG(dRCT}yjN?2{`FXGR#v)tU_7H9XNv{ji46jQLH0Gm zilSqs1CW+Zf{%2U^hVtkUaM%;B?Oe}`Us@@Cb;9e0?ild<5LvnxvSQ1tM30~Z-qXi zExTW1;{3_Nwvq~=&EXVF ztwuFhnvhX5ZF@)W1ItQmDU`lyNKu$`$D(~^Cl3)W#s@KinA|9SbKI=`=y0k=4hYAe zQF0Wt|4|3hV0uTMW%iWPsotCeNYrVTE$9X1J+aS+QH}9kcc2O?sa+TDM43+xstVF$HBvw|sxRFN2PS?i;)YzQPvY z>j%%cpp zEJ+dih^;o*q?dpIy;Wjy@U2yLi6u$Y_-azM+SD4KCef2+6$q?Zp5LDdeGFRht-jg0 zY2CJgV?u*c$T%^u&^ISHt;dFUq4(G0Df*!w!O%dNO7-1}!WbHfFXX3Df$-SMi8&fg z&V76tJo%nEqsE3 z3`Zcg(Ka{*-7luGi_CJkTjBNOZ$JKsFDE`C=e`zNg{^rF>wG)x3z7$kSK)Q8(ed-B zhAfdB6v{C%gR_|{%cs7ux23lKwIzWm=|W7e69-*o3z|I1ZA;6`x}DHdSsvPhTXg!& zEuS6R|MT%yzTl`_EAaFlnm+GPhr_A}9bue!n~s%}Cu1Ll@Er;rN-5Nke^EDOJPMXt8~us7dUD$b z@x^iwr_GCB6AXvFm+un?A=KXtZ8?n{-%Rpw;IBZztM9>#^mwL^9ds!zN~z zNyOP6%oArL1Bp6>)u2lRmuzvN_dMBRNm({Im0HV_jPr0V&QWurH>LSTf*I$%_G6_E zpMv}oPiu6lkCImae{+1624u?uj&I0C>VmkeMn{CKI4Aflr5?0S@rKDK7N1 zBSj!C&m(6H`Sy&*APrW^7efo_MAia5KB|=lBS>I8_RmT?`7fEzad8G3e8xphycqgk z>5k9IgUW1sR+FU`d}BA@*9YiPfr0#nq0@(lP8NvD3#f6?UjG!18yBt#kIZ^_gO8p) zEBFWlH=&Np*He2Ai(Yeg78Dc7Kb*&h1`S9gi?ZfUaWV+ zd@DCcUCw$pw3qxXayev|>+!>v4)Ja*$}jNVz`G-0w8EAoD{^Z_O6H1T2A-Ubvj|)l z&BC^fgE5JL-BC2F zwOEt$#B6tGWzvd)s}hOPYO&6I35br~1B5TmU_cLVqRgQeLwBxt-7`y;UR+y@V|8B~ zoO*IzcIna+UAum0XW;w<^c)T3Nn$Tt1%#hL6~`uoLt%34Z*N1f^fg&UEFfMVVA8vQ zc>S}_X!!^ECJ|nzqcTLz^p5pMJkoCw4!tpc7!37CAB z<(JT}SoW*rRlMS z+>4H8FBJzZzQYoyoLYhIJZ&i#q>vvn#a!&3A(>3PMaTR>z($9*QaylHsNn1w zVEE*fSw4<4)X6wO`$rteU#l2T#c&WR1_-nDa1nxH zs4syt;*}2_eP>1&fH9UPcWr8E-QJhWW5yOQxM$LsRpZLdauc^cYuBN>s(1b8nFSmI zS$tCYE`ySn6ClJh9{PFr=C4n5vLr?&-rKNkVw%5q`iRo6a`^IXh0BZCe~f#wHXhQ3k1H>j_J#b$_lDAe!nj%-mGTg2i`{Z zEwmIblk>=boEc};s88~o6)Vm|Sylfrt+U93j0tcIbTBwN$t;KB8u~Y5Le`>l3+WkZ z#c8hemQ4MyLc8{tIghR^r01i_>Mh4&hP4~5TeIO9!l8K#E7ojex<3@9SrNsf^lAQr znVEQ+IZr##&NzX^N`wQSnTl-oViRr_N@6j}y@0$_I(V5ejp8NmaNI699Jt1q#El?+ zQ0P}CcWp+TlgAriW$!$6clB*>PtNFhWH9C^%^e06eo_4Mn=Pw)D2~F)8@ElMSOwcu z+#XQ$zDWN4nZ4w|^Rpp0+~M>Yc>nl@;vcv^=E2{HhA>Y=7{Yc77^tBxIoQ61_fPkY zJNnM-UF2Z*6oE2UpjL^zMI9McbE_Pd%Ec`&h!mhYbQJ%yK!b0LEtg+r;zd`_BnEAr7HSI}Lo+E!delPjk^HZlj54Yda z-aDqJr%%75_qDEllLCQB`?|3CzRnHzJ~wqlFO^qj(R+u`Q~uxx8$k}vzKu*p5qG8FxbAUQNyhe65B9${D;^;8s{6 zDU(1w`Fzyqt6s%=;P5~3)qL=&J#^$%>I@j_@f7O$X@{`}DR4t`n9Wch6Z>lwGs|qY zvY8d&12SRv`&$c2w!gRIwbwA2vur|kMo*E0`21RX(bD@TPC2u(n1a+o_a6Kw(@NzQ zWDcM5(BhOatXPI|88WFjNB9gHMSQSMG_0kdJ3GBK%ZPo!9X#9eSyyA%Fd!?5A;nrvjUQL z{n^gOzOlg$t%J%75J8!98S+z6Omq(>nx&o5CFfBnYjoWMl#6tn4N=Q@p8@IfLHgSF zO-VNvOf2~mcxuJ=4J*p0RQu&J9j~DAyB!Oj-cUNWbKx|BG0E&mH44O#>Uj||{V5X; zPORw5(f*~ktFhN)H_2qH%j(i5Zfl%)+?V{yZOKJ$HB*yP<_VJyX%|BNdmYm5jj|vA z8{yFICSHeL`nSfsiN$Z;oW`E+)aEQx*vbUUt0(8(NYteJe2V<$=>_j19Xc};`nW~O{!pwi8HA@}0qpf-C_`of+w?DHy6Rp#np>;~`+&BhbbqjU=aA$So;X?TY z=_(7K$Bv+D=yx-#M0-Rx_)p@6 zu)LLzm~iIEHSrU>$?EW2w??l7S;aW<*}!c>lN_-O_|(s6Io1UAxsP`_QLM;+?IfpBA+R6v0_1W@b%qFH_5NtC|z4cTUe&CS=*C z7=(JO-ry^=caDE9F1OCa(O@ceeE)v;u+}FjSU!ir{ zq73RhR?Js7F?HGP@;Cwu-48!WHeo4s6aC9>S2zbAqifut(efWc4eb?kbbsSfA!8qP z3WzOeYLv$1xi6fbzHe-NYVWSGWap_<-+%DIxuybLYMhe%6nv1{Ixn|uNsAZzCpzhy zN$ou}#@6up7rGIZl7;LCaOu*etEWz37x2m}XUP_D|5@YUDc>q5Tukp})F)G}I z-y~RU730Zdo_k7u`iX_Rxayon4Y87$jI#oG!p6`=og%UFGt3U@u+w)ooGqNizBd4 zL-As11pmzdjDUH@X*}#GD3TqN=DO;CX^7909+VXoJaAc^mts#*A96qD=Q?YAsI^Tf>-^(e(IkoDfYl_BTn6^@U&5Xl%{q7vqeF?fGTu z1F~FK=hdrqE}sN{UT;Gq2!wD1nzY1tnlu7KB!qLTVu*$GxI?&|RB)IY2W~2~K6r#4 zC9&{qBiuXhPLsj=b|JwJz!38=y?aFdGVcaJ6?U@fm)YOdPbUK zdGWH!kJf;zFv{ua!F}D`efAJqWO@nEB8PLiV&S-^QM~{n@!;qI8L_9r%Q^NxL23)gc zU<1YW^s`|+9_C4N)b(b@<7D1d`f9|N1CI?~8|F)9b{Kp2e_~1+X7xYrsd*8;bk!ta zI6?EJ1@dKzPUkD5_!16_uf!B)>mPF_qKd|b#Zdka@fvl8UmwXbrt$P{?9W1_6yVk< z{ILvhv*>RSMSlz3p5&y&L@#JHGikttE{Usk2ymWME#&G2`Q!6V zaaFTQ85~Adfv0I->5)HbZ^@PfiKeKkuP6OzX)D(*R3is4LPKzMd4@+AI!7%O>Htate{afaLfOzy?s z!z)A6>4%M1UbsN#$&u%%9y~J2d$>uT;4N3l`EP1%v9E|!v23;YjaaMt#WHdVID|j0 zm6B|Cb7Eq%8(fuX=sg1+8$wO@yRZ*sh4^o{Ex>lX{r1(j-@ftQV`6j=uds z33Y!0?(2HG4{@}tjX?df>5&3d+h!mo>f;QD8?|Qc#|(b#b6k_^Gtfhx`58J|A8}<5 zDy;uUp8YPo{dE#BQEcFoA3;w`41N`g$pkc+`=a8+__3?1B<1n?bzQ!z z{`BJt57hz%>}7C>mmdX|s--RH&ZTvHARvE3JsV#P^FRIx-CG3mF&#^yW5fuYbj}7u zqze&w6`N^BNq(X-=AE_?&2(3vW&{V9}4yga5x1o_o9nKH<8}eYwp4ney@qKKVP` z22G-xr6(r;7y2prOJTyNM9@h*Sd`+9(lVpPGB!3MY5$Mb;k3pP+Z2cH%$>P^q*Q*) zR=;X&!>j^bM4!_-NFOH7eSa}_UshWzE?yga#7d{~w zemmn#M5!W@N2pZDt58NC3-=ZpivRjYN&x)WpW*g+dPo3Jt%`oL#9_j}nqqTCNPq}E zjBf}6`N#H%H!&*sJ5utB8Q;KV-p`69-&1%sUIqCUi~YAhX?)_}L^>W%E4nO6(fo;` z9?P<}Izk^NBw%hwyDjt*K`6{*ouSZTDbj<7Eb;-AL7F@GE7UuPSKN_!Z@7EQ$m+Bx zU`e3Y1{%_)E|Y{h;wM5bp7zA%nxfSg=8d~&Q2~W3wVb4__ZdN)6 z3c1S{&R@m>{AIJ}E$0uQyuGpwPt8R=O3F7p4PM*2YuDDb>o#v*2VRRbbw+K0P#zzA z2205Ma4*#h4B1J;$`|*NdC$P7`93m|pythhEZi2xnU5n6QvQx5?C-$8H$x;C_JN*> zil7RhpX&N7;uQV%?g+m$;vs<;26>RErR}g=#ZGUjIBQ3_#jZA;nG@Ec>c4_+^6XDK zHPWJI6xJ`17JYYA&~#XviokCpwJD+vN-DwwX){M`;UTboltmg%3tSw+^V5jYB8`Hvf=lJ-}atO!KzFTYU=x z#m>B>rb!XYD9@N|k=#g8ZkA7CTHY}q>7Kz~nRd9>0;6JxH>#kK51Yx31cV#5PDs0% zVoEO>e!`1}9w`-D{PqTI6&gG0$x`xr@CxG}kT%x{+Oom0S{X?b<4wlUL+nipE1T$z zHj<3V5e0PP;2#BCVwjys%ca0%i z_#zks*U^$+iR81R9&Z0iTcR-0X22#&yai43#zi1OeUQ7LNsrAS7iBrzHot* zbXHFs8=3InU`)y26?_)lk66ry)ckQMAAcsOGnAXk$D7$GKbuNs*Sn+6l>T~CgJq;N zyp`#K>S&;iR?K(^^;rStp=ON#rJH3Cy5PlRN2Fb&Hp95!396^%oOust)}x-5X4KQN zx5SxH(VLbTkL|N^W$W zUt`*1)e51>ky6l-jxxfMTb7irb?BM=gy|*FHvN-C$WbQb#F6iClU$I*c{Aom62M-X zF}Vp&K&&>X#VGx&@8rrx3AS5jozd2Z;A#;PC{Y#8>k$w2_Kcjx#(9s!>@3~G$h_K{C-r9# zm_QHA_)2mzIOsHzXOa^t%CQQe&Z!#6H|KbD&ph*t)37*g?&r4RhNdA*Rl4NPa)izb!TVxO+%RIGV&S#4Pte2d}U?;CLJ;X}e;EyDJPu@e#wq zZ5<9un#CiLPj7{F8WB-gZPlC#+n)U!HthTJrrd=3MOB(a2}r$CZ2DasA6G?QVRo}+ zBC*w#YDw{@kC`|oJ+WnVldHM9P!-_l6mm;^z-36#@-kZbS~BA5m)5uKb7TK@6pjtf zTu7R*hq7lL8e6`0YMoLTuM2%20B>s)p*I*O2L4aT6N-g)lhLX-`I`!JCRMr+Tv&%l zEQPv8t`V5+I#b%%Dg;TNl@!B5`z6*u?H3-^&qoi}V+_4#SXL$NC&6ta1d%sRU(jl& zTQ)FQW@;1RX8O0^?4)-P9nv=sHF2O{;XXMt;~T?i?R-8*FNl?K$OrX@4WBOLapi2j zp0oa}{#(o(tK)KYvAEp~gigbcJIK$Mlb2VLpYI^w0wVJ-afZ#a-m|7KYJju3&B>Eo&H~KBh$A)ZTMtN3==1I!kwr^J#@_oqKtwfgS$X%4kLppd}i^J zSmz6m{JpH2Tt`d^-9xW5qd}%26 zJCa2o7D!@WBndiPeyL=<^t0C^Cf7+*lA6gYufGoX%|Sibr4G8jBMVI?&`<8tCo8lX zOr=$X)?zDP!+JtTm=18=qz?TpUhx{wWuo;e9G7?&j*En%+%9LxDGe_~Lo@t#KZEM{ zMp+p+4+Xt|fGw2qJ|wS@A(ZfKR$U^ii220pgPV_UTCr&=SEG_Lr-uf>_O-{?u3S4+ zk;>}>3#oirJSK}g$KFNds1(MuBHl6p35$smc+BV+Zz$kG9g+rUMNV6J;X)tCRJ2DT z413Nj8oC*`;)(tM)1D>& zefQnuzn`1B7)u(vts9U9xuG?a?()^{dUesFcW!Uj+w=(0aQF2Exxu9Fo!z~g8f^B8 z*;S(Gg1rAEpDyG zEMZFY4!O*(6ECd{cv_2H!Hxwv`E#3+m2p9%t2W2(s_4z=HUwRos&rRFk&kZNXZfN|jPQuyiw+^>t}T( zw3@3L+dYjZS}N8|u8@E>@=7xHU<^U^<6ci;x(H$vsQWc4xXJ=fvs^ktTq|TqLqb1w zSZ@1=WjC$>0FdjtX0Ftchrv`{VnJJa7xw)s`046>^2QbSPwgVN!CzqPoHHwGCA;wX z0=v{2Gz9_SENvAIFyl#{noi}a+<4VPAT^E%xgO&HVI{f zDc8KcyL$Y2fF0!lo4!M`{k@tRafU@3%q{m!;L5pmE3y`8^u(Lo`gP}~b{|>MrUsWo z7wRhk*sFAYXIT5h_nYnnvCq$AFIPD(3dWbAJO`0cD`Q;01}u8Oq_P~SK5tM~Y!Az3 z8eU_3V^@Ep*Y0w^m@5WW%ru!@h8A!3*k4ar#ZE8(w zPDfFS45jN-{blvshZg5LEqg8B=yOe=+DxiZL~_aG%4v1!8i|Qh>zcl7WAWlA*A$j# zp0WV5rN~6iB($4M4FPjTg4zfzCHbndy4)$-t19Ov+E=7Yjl#y2OQnf{B3ENYd`i4j zuqL4-MVm48wy|C7lM_~yi;coQv~OzRzEM#7CS!Qt4BPiN+cRN%9!H>8O6t5P1kn+mqrR$8oy}4SBo0rSJ>WK_78Dnxnj95Vi)%KzukX5L-$ceLq3YTyksQkv z@C714u12raCe`HlI|`iwjZHq5BakR1R*Om}6-o`>a(_ZYt~1dFif__wk$u|87v{`8zoz)8XUy{I z>SZmSBiOd?2Ub;9u6m$5v;f;yzPQ=rXZODLd+HjaC5`i|$mHto-56&-}JERUnxOIrd=qXVi5=eNCBykoO2a8)FaP z#O-wM{9EYy@OQ$UosWdP_-y!b=q_{*G&a2d5H<}{FwlPlyYDXI_5qxxjT(Ol-v-Ya z=*Qk+-g|xGU3iGLmG+TyS;&W~AIhB%S7${BglN2la7zh1l7u&u5E_07RSD}KS$ltf zCVq8)f3R|_PXbD0N-nNzJh05Ye%ngt%sYDBrpk^Pg_|GoSbJtI$y)Nrf^;Bo6nAH2 zPb_l+fi|Nfzw1B}yR28eX72po4FPu8NGqY3(`Yb+ht2GPUK~ z-dKz8ADGs(syQK{c~uj7U9++^X~Pcu!x*ZEFmZ_S5anZ0buN-5jK<~*uCNUx4BeZjc2H?hTd7|*dZ#WLoeFsf}8Y3PpreACE4?S=@cwq#(!X<3k#}br~j(B&j9~Y^k3e;KYTCb5LLE%Y>bdYe=JW7zE6l zDXAQ0q}z^+R%-9Ydy}W!GiU12>A^tjoP~2*14t>=W~ik`?yyn{w#{2KuPxZo8lRh> zWOLb4IX=ZZudHx&Z&qO3#@g=9y(MX>*>&mNox`dqZ{E@IO^e&|0;zdTS;h4Vd$Lxd zSIXEjEe~N&d<qmewDMjqEOHI09zAU^#LK5`ic`IC)FCcuPKku&uj9@HR_X+ zgkqnRvSV8Ye_`}7u0i{+e7HtBjMoODj*ciE8Bv^%$_SBA3MWKjUq?`l&OV#cy$S1+ zDY&@0XmOXdrL9iaxS~CcpML4C{_l^sk3IQQ{~cHEYZZGMH$1b()HJrkky;cd0`Dg@ zEUl|uF~)uSzUB>MlNkpM$udGlFjp-fTR*0D=SvF~zp=jw8fe5l6P`V_Yf1+E zSuErkY7apFhp1&7r)o~9Ku|PaX95&uC2GlOIV>+6QTJ7%1yGEX7ZH5voM;qwrZ{2oho^J} zg@yW(7Ow=9q6IQG^v}^`WoN3#F0V3aGYhKS8a6q~HO(O2P7yzvz3NAt2erNWC|Ozuo| zW0%qTl#wU#UkDN1%h@^UqR!;$ z=pxHXyMuJJWz^XeVgm4cZg-rux4@oi77ERNEKi(jOHA@j+&@0KJUzkTP)IBWIq@PV zsiH4Gy|%bCDIwb_73Li5Y+Tu#kl3=mt>b6`i^UP^wb*%=+vOH%3__t%Edo`+`RSz( zPUt4TT?8H5DI z4sRuIZV)%p3(vEwQ|F zTxWS=u|H72k&Cf4riz5Pwn}ee_2lfl&f;XJ#o@L1@-+sHbq4Bu?rvOIo;fDhEQR28!lAvhwPzFN~8-oBK5!PgWPo4>zDUot8X=;0kx5tq?q1?mvpIXsz zY-w5f#wX{jeP(G!!px_4yL$r`w}uDKCbujqE}m8EO01fgM&8SC@gxeir^KsfxhLPh zynbB8x<{u>eQJ9{`+Yy`c?cwZzLLe@$wlGXgmd^aL$bp*&{KUq|z79=seYWjsbzuu=~JphC6L z)!}rx*f3z2SSF!_f?14$I1;~Ts8t5>Xy!c&cD%YWqrCt9ZL8lM)BNu0Z6EZPXRLf} z$NYOU(*!E9$l}gP*mT>S_tmZo0AXNl?R|IMwka{&Z4rr80){WWeD2HS)!WXH|9D|? zYkhs|0xjbDR8J zY;I^5*WWz1lwL13kE$ih{$J@uB^2S+Ll-a{qsac);$d%&BHNx+9Eg`}rO1}n_(MNZ z6*`wm;r~i}K`KT3*U42Hs?c~JHZ3v%N@mHS{jG$1f9z0}2aUTPm2`aT`~zlG8}6{Z z7lp@W#gnnD5|tw%;Jp0hsoQhQ)o^%mIl&|>MyXE9 z;g~Y&ynMBsA4B2!Rgvd76XBdKFOD<9Q|^eracgB z)$I8Cp4PTwU+>Vg1_SMyZC@U3`J1S5^#hY9Kd`DnWOg{s!iLqSCr>%OszGRWI>7t= z*PmM{b)_V`BrBe~zGwHqb1NjS6rW4B{JCq8{xMJ<%UH`}q%jFGb7QEU0CY=5^e6}) zNJWJ)LAq%P^<>f0aVq~%WmE|n-YJua{DnM%W>Y|mv zjENIxL@NLgQ%#;^0J?sSfu{TiXV-`)peCnIwZ^Mc#79W-vGEiTCpx8Os}(|{Bc-4< z9l>@ME;!nqUYKA~R5^`@nHZS<0^r~5Od3IwaQK{1$U@iu$4rEDyaN3N8rdw20Otq? zc99%G1@LrZ9F#yi;&mkLGlzZ55WRL^XUd zrrMh8)$@gXjhevP?y8&j(y9GL0&&Le9qqSgiUk>44jgL)k0ffzv&&yBv$Rf_l>rXI zcaP6|tJc~vZ^xMI);zaFW~K9T{>7*v_*6Y4as?8#LVfMH9ms2JId}eIly#))7 zjU(#`jO^^WYff%;HkF^DTsZTg%(fgOQ=pbWYjyA%v|D#l{riyKjE-WC(3?K&ksO|e z&((0Vu_vB0IN9qf{$8>^HqP)I_{&!qXNRHDo7`yF9{RUI2|VPTpqG44W{%`+FNJz* z5;cb955|y&QfTI}`gUIA2@E7k#Wgd z4j}8mLx8JIc9M|DlGK(0HxHaAD|zmM7Jp=oSTc&%tUsXD8bvHpmDGaKG~>UIqWO7! zeC$}7W;Uc5Sp6=OpgT4W63tI@klTOx1rv}5A>lhx>+}DZaE>-Pjw0NeDkE#*0*?U? z3=t1vWaMN#iJ_omYxopyC>K1s8~cqgq*1}E8@i!WdNk-9*;xd#32N}p!s0SJvP~#) zud6e4LVt&=Qe}4Jq{-8=GS%fh2$K_GmS&cE$9YPZwx^o&$K@FcwFw1o<%F5@=Z~Az z-WI4xwIkt~ma?hi-5pw+pgL9%D-agSavhpDnM7me6EQ-6QLT&0{Ijm9ESlHsjnx<& z7N}!seJSIoI62nh2?f5ETpLU2NYNFSM@P* zJb&erOXfXToX?fZq_&h|AF2kk7IbA=JVptt3u;n67Af|sC~g;slzJsq>$SSY&EauK z8>K`+j2P_13|KaGjvzPtF+=DImVNdtoqs@V#J*x4qq@W(JdshUoQzTLQC=6QQ#gJ4 z|Btut0BoyB8rJT6Pm(QLvaD*^lGSC)-LfS2-n*UNoVdkFNbijhLV6$xp(G&$2!s^U z$N@uFJ3AAbVN>JH zSG~)j2DhtiE`3}khGfR+T{gAvMmW;<5EBuXVO6QD83<-qtL-RF|7WmdH=@CdX!uI_ z9iqX8Ps#^c*n7G71M0r;1DXLTp2b9j5HA)MymuayobhExIN|m9@E_e{JMLIT_50M zv2w}iX`7?#7Ve$C{E6C(Fq2M|T0E|NY`ca%3EJZeE1J?LZl9KoP4_dJ%W`y*$c*hv z*sacvoH?uYIW6w0p7h3|o|=RrPkVH%&Y<(A?cAxeX(V}b_fPM5Xhn6D-Wijg(pv*h zCt0>^sp%?=^|-L?C}L-bR|*dcEQ}ql5@HF_(A>oPe#E|e5_`;BIJM}1nqxymNA>TV_JOBQvq3chb zxMKcf>iH|aPo*Be;`=1($Q9owTqS=R_3{*1y51c21`4^ejf6qh!G){*5f1oRg&k1~OWYB(cz}9X+Fb)`=>1@w#-LycL7Ddxuh$;Y^!R+Hp*mC8<% ztLf_2)e|x^C#-HAzP`=nYFj@%w=rF%N^i`~u1i%aQ|rJi&IknzM+sf7p%T{Pg!QN| zEnts>y-4TbqLJcTg)V%U4f=WhPldapW&34v_JSrM+ZdmnsMRKB#~ZT~H0*Jx8h5Ot zy%gU_He4^goKZchx`onFVMDdW@lNty$ciceFI z(%i}%BWbQDX$}h1Jf1|}2Ub0MKh;Fz9*~E3Qvy(egV91qX>&zdY%cV)9|1>sYepytya4|wb&uI+a+?QWP&z4or#cWI=AL_ z;HZurxjF4s33$e>Suw%wp0J{Z|E6y-Ycz(LC!>u?G4_HeCQ5RXswa%u2ySN0&YI5b zoUWRrq?)dr?9Lh|>~K$5URk+(yvH*he@}38V`Bjv4wq480R*+wMD%d`G8Jv(fW-W+EELn^B9LM&pCQ zR&g%5!lf8AmmN3mH?hAA9FH&`OlNQRJ;xXZ4?ALe`vcWV#+_ThN3RWujNYe};`yR4 zaE%xIhH;0K1#$wjMNVwR!tthqu|>06(__=i94U2$SsHphoY|1s+L5^S#v9tKnSIdzj;g zEaOZEYbR{$%xXV&@y(E3rq$ zw%;bo#O+q&rK}8CNYi>10c&Kl9W}ASLN32?7XKy%iQqydvKL)I3_eqcGTfb6o9#w% z#NQg`$PKD6CXf9!FRa)xqkf*vYsl8s|FV86i|#%!cgjB%{iH8LrAWG47hVtNSh|;QX;}a6J)O!Yj{ge-|NeNdNY7{oBi3Z&HwiaMhu-!{Ak!INd!ebs6r*FXzve z8_0*r4CM09!f+~K;6`P|Iqx*PZV7Mzj7VKq> z-yYBeZ>PFKE!bhx=vtM{Wtiy9HcKnK>l0e)O44I>zULXd9f}?9s!Z-eeCe`0F)=@_>+YHB9?7hZ)JI3_G&*ah zWnw2-onT;}Nlb7KO9r3!4lAhI3}ek1ox^u6s=jeycDPItXNptIozp#Do6u4+)hUrY zduK#z{We5PHtMHh)K5d_3C^(;_Koo&*vF0qTK3C}M~+Yy>H+rGlMk#ueR?(JdNpznkbdw>{5%GYmzU6Zf%Lu~@$*DfA2n)U zNbip&XEoT~71a-dSt(@wh@Ru|GkriqAB;-|~Lqcl>5N_2O6Qk*4Ds?>yS_oVC1diJnPIS^{qbLaO<1Z~vQ zG>$?q0Qjg|WbsjLXPB)r^( z+G`!1k9a8+2)y{@LKw`v3x4ZUf|ZGBnRYPUr-a|0JPFUp!y}>|_yA1p1U-L4`5#94 zca!`wK0nHe1Jl_ZHuuBuJ6x_$0j4Wcv>6HP?Fhp=o$U4x9uP}~lBfs&M(TeS(S8Kc zj{W=axsimixv3*Krv@LwYS`Q1tS)xR2T!3Yh~$zdK15}sAxC{h*M*kd*M(ZB9lcYi z9f59i@+8HaVxI?jr$8n91kZQy3H3DG9*8MTdJx=xio9DSc$Yej-r+ky+`W*~Z~8V- zmG6SEQ~3RO!7}Ot>Kn{&TNrSJ0dE-4gaK+a`yBi1O`wo{>qd|Ul2@~Dfr9HnKKsln zPzX|2p~vKv>|5+}cz$X@tJ*JVJ^H1==SrA{fomrDfaex!d+$`>)i^xHcn@CKc;by7 zhi2e2ss%V~;9eMv9=sCr_*Ml0?gX_ufjeh+pg;5B7x;vUo3Cu4^OcB9QQUOp9Xwr$ zTwan6EUc5)f+#6twrS*PI+ZYNlBq=#FI3g4g-NjuCYw$z3>zh%L=tG2L|v1q&eRYa zPiw%w$)DH6>L#1)o@br<sG-;SPQ!c#R;!HdGlkB z-Fy;Qo_p@bbLV(l7+^uGzrBGr?FMhLsbKGoq^{k9XQ3B@{__Tx0)NU@g2I&;M~%M+ z(1OSC9Vm^RbI}|yTqaAWi4oDL7B**w6Nj#on=?%-!lYp;ol(iSY?gF6nsQ_F3v;!^ z{@wpO5FuQMb}xVQD@2T}_Ba!~-UO#-RHECRnBXRM18A;=6)*;utKc`6xqITA7f)BF z=6hppc2aqY_HevGlb|>>&KL>K8=di+=A~O3dSIwwW4wp0(&KV zTulcm-yw2%QO&##FFAzPcr_wKm`DTa^$7|3*o1^<>YW)W35_G_)r!VZ4QTMDCNz#} zR4bc6RH8o4>5S7SK8oJekL1(Ug-eu;qv{jWQ92@f-Tu2^8&!q$E*bH6&7Ix{RY{6d zCGklv(Iz>o@W2&jFIFCcTAAGeI-RMBMyuYU5IIeqmNK`=Qr=n2#3+j-o(@x%OcSm~ z%#XHIcudxcF78EURZLR2Oe(X+trjL)?8@>3Skk zV=Qs`JL1%Q}ih06j(6i{g?+QmIU@(ko(B$_PaS*cMh& zr#l$8T-OzrTs|(_JFz;MDwXNxg;{m^l5m-b{ho@943pt|0f@ls;CI*_P2n0M^s*lN z_(IK#sS7w6!FpOwrKx06QA$;|Q&uifgiF;iMr~r!Yp=z{dgHzdSH{ZOc$1+L+}@Ku zx->y)bH%3!#d3w*o!m34FegbQu8GvCBClg?WhN$inoIB+mvgxm7_I0-1q@dL zC)D7P>u18H=i_s=#yJfgJOqsz~~H7FL$mltso# zA)@JKR2K$~R6TcN#iDY%@S>U_DyoWin~cr}m&PD=xZc)VA>#h6U?$=h` z6jlf(CA!8RO1C~RWyZh2Q%&#B>p}H(`hSN@P<@L6>*x@J3K8e8MX1D;#=k-?tbxE1 znk=B5)e-Lcj=Y+=@r7ZLQZ)6MbY1!%V^pt#S9Ge|wVeiwHd-o{2?!2uMmexqoj-N(l~LXSZkBUu82}Z(W1({yoBoRf<`TZa&4OAUkprCGuD9= zXlSX0GC(F>?D`WCeJ;r^lSvzDOG|4Tq%xU333Ro;I4sT}PMiDl+BN@~lNufuH{yBh zUkBka^LWsNWA_vhlSrY+k&0#3Ey;FSl&qn;w6wYb{jev4u8!wN#KncD&iT)pwLi~I z6C2`&y@>Qw2elf`$LAt65-j|=NGtUZSj&8cV9x|$-SmFwWfBnV*$`M2f~`TY=Yp_W z_zhs_90WsD@~|pu1rQS03w}Qj%cPdWY2=J%Uofv4(K3Ua(L5wzcvvY)S3_Wjf_aM( zY$Aaj4wlh?@{T32Bf;~XGL()x8#)>+qXMOCBCunAmWQ=aAHjO&T}0nY!SkXl$^a(_ zUqP@x2g@Bz>0zCaL9myD1()OVXVWrn6Hk-~y8F4Sz2WONG6_DtsHk-VD~)iC{(odn;Hshu?to9*S#UzkzEb zb`4+g1sn+=3y=VMX(;s=6J=!ve;8_0@7OuuXxyK z_9UzW_j0`AVc7`ZG$`SC#ly4+wwloQYOvf21e-`;ulaxDVYvu4o#cHzm>1()OVS}; z@i4nz3m1@dh*vz!37>(BnEiwY6nuv7<0jO{9b6yhVcpah&`VF|`gjnw2Em@?`Zy1( zfr)^o77_jhU{&xbASAFC$oU|KO+w{X(jO510UnkKpMcYtV_d)IVRa~7KBkX9TO{ZA z2sVzSJ0M_qSQg6LNMHy3EDuBP;CPbvA^*=jtQ4iIA+SS1d_@S>Mqr17$(N8ApTZs!_UD0y`G0M>7=*>lh{J2LYHHj)!f+Fx(GLU7PFmS$>{{Ff;L(jJWpP3jmvUk$Ny)sLbMnKVzyEN= zh(%+|%@N-Dn-0&u3$0{hFO2kMu@9lyo_bfQP93{?BuGwuKjP=!OKrK2eem&@)+ ziXAQNJ15ASrCl58?2c8nHLE6NXHQyHQ@g4o8$OFrH8&&V6)R_tFSRzWKS_-`F|Xo* zrjEs3>)FpYh2P80Thy|Nomsh~nSGagv!ru9&~FUC2i%O_fZHn2o1)sAI_X z?3iS3jgUg!LV1NZAs)mJWf>5({q|7a?8#e3kJ>spJA3lhQKPp^&OSG}t*xi0t!*+R zZra$Bm)EngscF+>@;!OpyvaTD=K1}XexP^Ka^`n59+NLUz?}zP`hht^%SG`V43Kjl z|9{vWu$cE*Z|N604qpz(YBKr{7OyckUO(27A0I~PY_`n!$Xjo{xCU%yo5~iBafOAi zK}#Z&CjlHk2A*g0Nd3^t2Np4}@bw#T7OMz^ltKT2d}EF?CdQd#H037gbV<3Nt+|M? z)7xU4*$9T;<(iDy&Y0d_b}rZ)C<4bALS?LB_Hk?dK0jt~&1v?>)2D&#G~DW&4Y%G6 zm->i*(+reeLqk4&kOHV#_QNvtKX{rg0Z(rPkF)&!wNdN>n1bdo?d5!uy5um0Hvv@! zeUM%}`4eZo*{N4VR97@HumAoP*X9-MeM}m2LJ&o45<>kRd%W_{?Qhch^1&9G1MI#b z%R4~Udm7Ulrl%*3+uY$Ekr6A_M@y~7y1IepoQlFd*A2h9+spez4)udvoCkj!wQXvi zLUkRYdhEnYcZOPiR*kJ1-RBpXv$tpOqdy%GOF$GPG?Y%x1HY-yWq;80R71&lxBS#z zp2V!FuIo;%Z!Evzo#hT1vwW?Ru!~Y9YA-`>K5)y8J#d}=lqJchQu7J+&y(y&%%ee zOT|`qt$WP4Ded#-&FYLvt4PUh^g1<$z6u1|1g(;sP4nx9FElCKc}4L#Jq@XqITOj1 zveGPX`JT!`yaT7V=mRwg8ua3`&tFKq9&8O2uCp!(?h6?PQ z`Q(O1du4mRqs6fz$qJSy)?}NKYP)lCy6cim-r5AP%$l^q(UO2;05-0FN>a1p;H0vp z-HlqIXt61g{h7&XnVMJLRbn)jbd~2#ZOLLlM51Z2NT_Y>URpNk;EEdVZVq)8(HKrv z`aw^ZecmlCaYEw3xcF9V0eCFbh6O;tB^(G zfc!xaMW~~5)W__70~;JRIAbFVTv-L4y!5Qh%#4i8+Y-DcX~yW~^$pjL$&i{oiF4A1 z%`GjR-I{hnVNB9`^YgtK6>yn1HMyuTCDqHmBTvgMvsKJ)N=j;)U12NBO_LYio;SJH z>8zcccN_5ufclUe(TROS<4$bi7(sEwB3`G31UZo5t4{E=BgI#)i222sov6)7*Jp=I zveH*cO4}EgV0T)M{94Pl#3s|1sn$DNwH^(SS_|{?j7c7Aa(s-~*f6)wmfAeM&^>-w zgX4awjLaQ~S0AA^!oKkE7Kq3b+A{q-n<1h^4uuJxDrr2TvOB70)j6`-RyDfDG!)0y zN5;!FW^1Z7v(!`OP21iAzNQwtvu_q9H_j|=SUt(3c4X?O$z^Jtx+KqC9+M1JoGfZU z<$sHKkc;c*GZ-AX$X z19p84)<142v$5yaDdOIGORrf8$NTp2HZkyHgfANJ9V!EXWbx%e;-T?lML7GfsJzTa zfK_hSu)EYI>a*)Ia#X&trVMzqB`3zLdWh&LpRr2?24QW$R?(23FRcAFozr0o(YqH! zlkwc4K&t>WeIWfGsr_EfuzAg+^M|#}pWiZXezWlY`OTw#tq`3Y);xcH^SpV@n7&<5 zK<$Rd0_PXIDA>!wW1O$Va%v0c5(>#VA=wo}v#SB(oid0PS;;Xnxm6*vt5BuH;f-}; z;>_vHtKuYm?)=Haw8E%pxiGC@=l(-YWG#nq!G{qpGehay(ZisPIZtlRa(CW@!7Fe4 zxB|)QIJ=#aL|QWpktO+7k6jU8&{jmRmPHH2CJQBxvnyRCF-iH>wB{Tm!8roqd<$C@ z0%7R&Ig1lGaQ%S_N{iYG;_IsOOCk*!R$&Cg*sO7CdL*zF4Nt3XEOjaEadKcZi-plL zLT3p*0X8zv354i@vmpZ|IXf-dhdJugCQ*_nf0 zXspTXPA*+5y%)a8>>>I#8Xm3?4+oaO9j8kM^PTaYx)f`nCrzn0?TpW^OSTqyQkf=G zQueqK3wEmGL_e(P2X2Q=h?nOHFHOWkWN2<;+AWIvhvX@^fNC^%bIxUW3+AATeh=DF zS&L9vPh71mn}x7ovnJMIry?S(8S#;&s4SbpP}o)klef%4jM;ISvZ8?8%CC`Tqq4pi zev8WTT%nf?!9hInT&DMcXNTgf(qO&}IdB`{czhqnO-@YPdeqncO!}Jf^1Y4cIk*vb zy4vde(#Uw!=_Cwov&CvaB<@9s=RA~$=;8P!2y~2luYT21c$djJu#>QJuSWj= zi5w7g(`Vq5%=qBBKDjzO{vI;_cF+K7K$X86;2CBgwznj^60X1+33Ci=9XYSca73cd zbRacMa>P(IpWcwtI3?GRZikj(75RT8H~%l%)#(48*~y$FIt|5$Y?MP`^D^Y4 zLC@4u z*++lF*YX8oq~FJgw+TxHa)AZSvQ>gHg6jm=3%1}D2O`(PEsO9-QVe(o1D;L)%kSyw zW!+__BaZBB#}RW`S6RO&pA$jM!AIc&^wxYNAv@cC#8lSx`$IzqgmRUFogX zUe=bK<#J_Zx0Tt2PJ20eLjSVc%I&@1guV;?%@*M&S5}rQ@Fwt^T6MWRi1#jby0~4q zLtsFw&@qAqf^C9_1+NRfL#?dFTQX7#t#gQXnpErn1&4y6G{B=FjvF-nm&gu<9d|ZY zA>}1MNbkjYQD4CeB%nfB&=0keM@M-9c3gyG1N3u~2t^9+ESQwuZ}|&wbQNsJ;UGUq zXc}A&B?3YRaV_B(6u@a3C1aG~(xgncR;d7LRdh;vno6r+;?(h@rY>SdDw!E>t=mUO+v zWtPXf>e8VjLMCQ}0O3NScZxGQ8Yop-j4nRY7$E}HQe}Wdl{HfzpfRZ((MbQMj^wFO zre~(Ba9(AMJ3xx>RXGUf%EYv!p)yUFmUN#Nmq{{4CH6Q6WMf_dsOpMf)oopgJjIGS-Ff-k$TD z=pTr0dMR29$6y5Zi#^|xq>s<`jnZ=kI!)%iYAqT#IjYVmtqg~>~-J{{QVZN<~Jv&)@A7dI~p8dN7FRh2JUCu zC0!GHCW+q==60?h?wZh2swwl2yK8nS+@o=P!tC3mwFlPQ5Q^Fny#jz%)5Olx;f3&A z!)W%cd@yBXgYdp{b)zr-Dy|q=F91Fkug|&kIEW}(hI=(4lOdmdYjnf8a}6WG6n3dt zJi6}Ox%!d#e&G^!2RI-cDd29RqBXMSDwdd6dtNf|qT3&RelwoC%^T0Zgv|pk$PEUx z49J4|b^$v>yh3<5;14vq5L#WCv;h(~ZV(6FLVCqOzn}$m8_#|Nq}#Ru={M&#*41r1 z_YHet+cx&XH)l82%_?7Z_^k^!t-A2m;pJuJOOL#DVbx9O_p)+$GfMw8m;P&#{wJKC z;EKErr8%;!ynNXaJ}>@_@Q}MvK^l>sJCHUvp_!gABrP1B!ox$AxQ(ZV)29RX{&D*T zqYn4&8V{V^smsv8e0kN~<;_>16z&V`I0ts1`5otWeg~R*@QPJ|!FovXeq0#d|M3)I zb40mIemR=yeD-{CxY=%%Rzdjlfh&+l-^u>aER_LCM5*2z>wARy6soV0o@8?Vg;pls zzUzk~joQPVt&zEdk^-{NYqwmsmH%yOO5A3t&3EA72qlZ#OC_t)vn1i!`t%HKVz%*@ z7zKPP#lik`g*t%UGU@$}hGFB~h0~i;ZFO@SjN+L1WUD91n3q>*WiMzv+SWU*sf_F@ zou;pDxg>&>I^bFgX%G$-uS{e0BozdLSL6AzFNTTea@C|B(#A!Fi)8tR^t6@<-D9M> zgqRqIUL}$iB+XLiwp>@;vTS%#U1NE*t#)Qj$=tE|65zQ)m8r2bB~e5qS~HUJa=`J_ zB5h)Pv^>@*i;I${m35b!(}&L~8QHDV&1lbeGJ-ilMK zqi0>Yf%@9VNjwXikP;ZMuO^G+zE&Xyk6yBabh&YTBdc!Np5`s{lxA8}t!9lpKC(Wx zxM7T|aaCKEqi$BU!>&5gSi*jErQx&P_f2w4xjU~!ty9b7)6kMr?U}T?p>$?rvgqb) zH@xB6=P3z4PxZOr6jBP}E*sk(hnkGwaLbn&PQyLHqoAr?CLC>ui((C~(1Wr}YS68*%h?Yf$;^uaG2sgKt}F8XA(c5M$KsoxVS@Wq zIT_bM)s?BEgS2sHWuy9WTZ%*gZ>x_$3QymaYEAz`*vrnk9eJLDELTBftkaN=&(Jcn zewv-uI=i%V?y$5ui5{~wW6bpp^~*ZC3l|siVe>ch@c(lj&_+R#88r z(iAO{is%hj>1=dA8SfFaUR}!fm!Fp#MxxlO%KY9fp(6I5{}T-WZ25ySm2wRnIBq#-d97PHvJ)u;SW+T2%$eYFbc0ti@3JdWBzkZIz?~(wYK23Dj4v$ zKg@~{UgQdDuwUQ*LhHCTw$O+FunxkmxmFha7YYfm{84VvL0(}U#YSTD4XveIBS$_S zq_bRl;hKl_5DE+&^FJ61PBfB7T&q@NyQT^XCtsV6(_3?`wZ59dGxfi3Q%P_RzZMPX z8mEHESJ8)j&DT5$TwOZ?3;rkLKU!cSQ33{QOw6_Q=9oeHQ?Kya+jXEa1^#$lm|$Hv z{i;?l`M=Y!uCZ~){{elgcgi(4^nas$fp7mHyF&YYVB}wuMs|(7QC)+6=F7R}>HX^3 z8l3lsJ4_!Bu>Lk&F#GEI+qG&6m(}d%UtP2N@|x6#RsR!}kG=DMY0CoJN+L#%p@Vmv z7ee1$Z)T`)H&`cu0!- zurCmt>>i-y@JtpgqHF1~+?~7ryP%UB*FDzLb7FmCtZQss$33C9 zsH|C_3%*Ug$k}%e#NZupKVnw;uvx{$v$41P*~P`PhNbV)BzO$*+#UCL?6V8rQN+D2 zLa)=(hRrGoyyd?U&6mEXccLlkckB~iZl=*la(Jw!JN$yLKbc$dCKQ5Prd*R$oOu7J zDO?=|yzMBc4b^m_`2Q89e{;V0y=76o6<0_tbx19G>OllgcD9t(Nu zXOwHhjZ5>3u3xngAz?l^^0++KsyL@ih(|aOA6x0Ylu~$65KE%1UCt7T_|w9}#Y7Zo^u54!ITS}d$& zpHf=m9(gNVsnIJZsZFZz?Xm8LOjli@D^_DvhVP8SPxbj(;u-8`@-Pr3jS@rF6CG=c z${bhaG}?^OaptIu2~|nxCwH%(K7;E0CTg2Ve2N^bpGjq+l)StXn zyXhXXKY{HEf_a0UsEIEIdqRS2^UZoo^hF1kmG>r1vSOckLNm2OoGP#gjv#&gD})XE zj)49zgl6~@f=jR^fr5BRBDdHv(l3<;jY9JNBYKmPJ$C~hPhuqDqNMDPA~`U!t2Uz% zS4Z!KKMUWxjO|B|lLKeNLB=VUYv1()O;f-fYP%~gVEPf~va5$`cQ#<@5yx42#0_}n z?N-jf&k^naC%)2!4Obz7{plV=Ln`9`1<_B}N&|yw$i*e;(yVH=HBE<02B%brngD)8 zoys>CH$_d2y&C+{E8OK*i=3BN^kwGY0N!%&t1*X~_l zGro31uHoe2t2ucf_lqw%SMYd`hVuo_{E6J%$w`WdNy;(dyF3xtFI>22785BV&fg`t z>?C0%{6$s zZxx*bX=c1s8S%1ADwE!DL*L&&OVrrxUoZ#AU>m->id#?wKs2b|!#+wa^0AX4MDO2b z_rp$s5!1i~LtsOTHzcTo*8}8?M5a}wq=e~GZHl7Fm3FenXcIn33+Zf!(r$=0 z8nVjmi4~c8y?PwyTQXHh!QaKjXl^-yNbw+UbACEY>CIG+?|y ze~eBu5AVGrIxB8Cy*bYO``$PcO8X030>@F_U~GhOzPl*znKL|{0yNg%MRa1fICezm zi2$6MF20V;jR_&}e0nXV5dMnbhXskC6u}=O@Fau>_a%$qcqktK^B6zDbIAW{2%aus z1e#-MzTDvm&fiO>??ChUeF%OM!OIc+9GR1sp}x9XWJL8<^v(0AqXcGr8#tJd8MSdi zoLO=H?Sw4l$<=X*O4cVb#>ITBkbke&ejFYBJ!?mMFQc-|y%eFy!mrazTk|xWIO8+tzX60!j0>?{nz% zzev)M19))f?I=kX`|g&`3qN*}G`%QItN#U(hFHnN)(c&C+|k9p^JB-BEggjJ<7_yb z?cc-QI~=SZ_T5Q1ZY^j|PH8Q)*$P`zlA8;xYtxbw($f=?)7ZbH)_V*FPkm}ity`~m z*QPi!Gab$h>=aON8@&jw71s8}35RRhr;dT2m?P}V;4fT#Z=)9m(-419aP7nFY48)h z5O{av_lVH7C~+`mJi-xqZ1-;P7xrbGe=B;wo_o*535V-hF{nnbQ+A`_P0FZdSJHR+ zpTMod;7gBatkHK}I=YzZsAOLNxx06Vq`_^2%TbXO|JaRQ6CCfbkyJ6_74fI0vZZ2k z7DNzL%zn+Dk4FDM22it0XWSJY8>b7qa}MV3b#yblT{xB8-5n$?z1R!>0bO#gsqao_ zvhLe^n9;#!?)wMdzhDe$ulwmFDnhtnXnYKC0PwLcDHLCl4y3ZHXM^R;H+@Kn@abk( z&jQO4&YS4jaJTSI9_IjAqrpB@w-~uB7$5r1{m%DKsAI;*Bl} z_WX=F5o`}P{LD8B{KlMM&)&V4w08pixo{nsA8jg&8{gt!=+D{8^S_;^Tj*CNAO0|h z-3%xCaa#Wj`g6Dnr?shUsO>dwmz@6m(lM0QdD;)v?4q21vS0J_QxE*B@Q}d5Wc%j` zK1AQSf(-)f&FrM$ApibJ{{2|;K2PxSfcJkD9!2n+E9B?iw+@lNgU&?xKSlE6alt{3 z3J@)zFcuKazdzIO{b=$&PjEi?{#oJY!S^}-34Hzq z>7PsPNCgGJ6}Xy7_BOCb$U#?>P4Z{Q=q)?(CCb=jl}VGA371)9nR+YwQ)%*qc#_lKZr1@27S0X z9z1VX2;O?9|vjFvj=JS!v|{9R}GxQ%||~WS(?V2 zC$es!U3nT(9ZjLCB$F{<=#u;C{(bBYIGXr9?(t)NIuIP676+~FcAk)D&@P&xYour`@m~EKnbb|Iv>CC=P zby^&!TVunp{fHJ3o=rJ_adPZq&^?lFVcXcB*fzT5(lNU9quyOqH!S(+BeEAFpc7FZ zE1rLm>g!TjNZ4@=z8%Yjz~)2hkl!Xckv*K59r5uenvJvL-6}Bcr*b3vhCDIhsTbyM zh-1y*bM2;uFH_IZUm1sGoSCpSL7HmxeeD6~b?Or%E6>ynd{HeWlPoicY`!o9Q;G>2+(f=Tl`uEloiIF$W z-tt&tL_POdm4M zVM-d3renx7N2#!oG$V$L6>^A@gru1{WSXPFm?Om~&3eA9?Ig`Zf;2u&S_q!o`83y& zG=~IXJk6evG#iFYbCgQw(~LuD6g+=_A!&{X^7M)&QS-JZ3r7fDcmeS0&1kr-$ zfcUO^f$W7@t_f@Qo}G5+%l%h{npf&!fY8kKcp-fygJ(zmGo#C(evI1NFXtps)A1v4!KTDiMx24hOgP z!NK0iz~UA~4mqvtJs$nI!BdwEBGn38;$ybbah}+ik3WW|q7z*sOPnH@>f01%PR?m7 zvkKWs9M4PHeRK{Tjb?2e7d&Kr5W?^N!4QaB$^f@Zmakg5Y}v|H%fb7`&g_n9#d%X7 zT2fN8=Bat}o?Kn+oqX$9g*8rYHz~9-31%{Q@W|nP`;H##bz$bZ+7d<08=jiK^HKTpyIcRk?^7o#n4cWjX+B<2P8X@THDwhW9UttiL?a?69q zkF#aC5AX5)$~;KqGaiW)qy_K(whQ|j^ZiQwf_*(gW1kbZ_c=4^X#cr z)6xsKw~yJ3!Q}0un>?K?=vyDkpwm`qAm?U*{{t7Dc0< z+MBz%!JQK%E;>+0{S~8)=GA1{GzQtuidw0zB`rW&pkkK`K#EM+5%%s}~?wF63w&{;yjWoL*fup)GS*o+)SMy*)1PVBW^p-Fnm9lqN~MLRUC?$%u8gC)7?Y zeib}%{Vi)&)J$z~tCVpOjG?+YyL;2H$q%};B~9bAM(tcOOr~p2?Z<1qOB$D1>AX>@ zNX$%}zc{1OqkpfnZ5S%dsN`bJHn0yOnSBCVt6!m?^oipkBf67HYZyht`?sZJ46csh z&L0nqn{pZmNsxDOj9O;2XO@o2Y2P!yxMJabhlW66CpI}4p zE&>|^W`Z1wK|K)7KfZ7R8wF+nFGVBR8Uza?ZIH^Yr?w*cN<#deaE&lT1XI_5wIA2B z9I1(udS-gaki6lEC5|f7KqpL~-x#%)w&kKRYSqNcsA=gXj;N}2ct~z;4iguKx?p-} z3_n0uG_~Hq4Nz`=u^`4cknW9^wWfgla=8cW8c_VM0a9qN6b$Gwc846q8cdJdOUJnb z8wFJb42hmhwhAPyj}bGxI1@`n;5}$fK*GTGG}#`gC))$drSdQeZxEC}%>Ek$1Q}qL zkhVl?6w$kgrx5~;pq5Bs4L=N3w!m+ph*1(x;;Fz9{7Vj}y>jdfi*pgowTK>g-1L%R z4^0|5%wCca=X^Ri?>##$UF19|mZp-#`SyXIZSwm|3_3_&3 zk?k2HR*y}qfJr(V{a{C@E~7R*nKo;qd)nNoBUT@=vQL5(%A{d;fRnL_3@ZSCcTQP% z)C?x1)EhFbs;Q$~HL2>XuB{WUPnsy8{EOJ*w3AjL86873=zw++uzdGmU&#&?6(Xuo zGayw$WpVRz8b_){YTX=XXKwb`A|#_5GLVc$+Jjh^s){VSZ~E{}-QI%PdpeoKk`bAx zA&_JyLOL8(4Qm$8kyu1GT1)bJzc(jGnv`3q<5)yLyJGG$TZX~R)|`0IeToy))K@7) zzx@a`N*$s*lbo*v_LNA2h*Y5}5B6CXN~l@`UP)g)wkj!#QAEk|;u4Ep4tbz&&|>-` z;8lo-TkQshY92o|{_$v8xHhFY@lL)^u&;r&ywdP$tcBCJA3|c~6BgTb)#GRI{faX20c$oSN>DL`b-JF#w;nQ!mgE&!#pUZU=j$ zvWFNis5N-shU_@0U3~@)b_ci({MP$rRMZzLS%h9IKWi0yImsQ)$7o1qQK+pthe6yWWPcYY#P_md1S{s4FGkMua~$7=9NJN#;hL;Zb&&+ri* zb{G80e;m!P0`5fA?htZbyc7t_gHpY;LlQ0t?}{+U4t?<@yDMBeC0r^EpAr!PutP3E z2fGuV@t?S6-y7`Cp?z<(vPa>Y{zLcPkT|f^`wtUB17=75--t3^o66GYM?6-vI7L zy^?}nf#CNuq&*j~cQak6f7;0T8a`qfplkEHG7hhWyk@%C3%)V+^0s`e zNKHnQsk$!R1Eg?2v+wt@aItTFfx0fs?6E5)k_L?|CR!gOxrN#1+XiQH>zk?UKjA-+ z+%*dp;QBM4(Hwj!yOa8r>}O2GJQJz~`v{#8=ph!t`Pd6Ce%UV%I@v*se0-W4ZAk#9 z?d9XW(u=g&4$eBt$9rfb1gUXmB3^tWq2HREJF(0LV7%`ZQl`rP1N=xh7L~c2-#`1C z;2G3@>GWnlgT^@}c&PX9+45WaUrMg%)HM7oEAFi9}o@gOXd-s?Zk?7=$-A^0f&`yw%dJsO0?(QEzq zTng1J2$Kp0{@V~k zei?HfuY5xI9N`yKl~ z!kqL?{u3mYYepZ8>GhuwMI)Fi0AuH~2mD!RYNkMy?>wLGFuU7-qyGi8*7`>f6q0SDe@c$W)ZDCAb z|6q3^*l`3?^|cAR(|-?|-_eNa>mTe<|8X=|Q$kH&8?*oP@4|bU%x6K^FZ3|f&k=4)p1bYj?a)Na>(G&cs%yak@IhgJsJ%K$zV0nZ4C6gb7U5CmzM#?A%!bTz3T?AGb zgf%1BdEvJRRuqIyL9`qsv=oP=8{xl`z)JhUxV$C7@%lX7DNqpl%7%cI_a7r9Z$+@a zXV|&^5B+%UT*FS`+K%k$y^Z<@j)8_PE|8*$MT?ty`$hII>^U$+n<#w@&wfUFskWZtK<9tuE?|>-1!uAozN-SH^9WJ<$IL&)b@x2Du5<1(^WIUamrE=wYHEuZlMfUO4&+?Uu zUw`OXE*-%y95PscpcCvPQ?V zt=vHt!0Y_}JXOdsPaixQXz=#2Tyt}2L-|St_!>sK*pbN8IMh+t9Y=wj<16(J`-W1d zQ^Lh#Srd4vatIuKZR5rCJ|VTMc^t`K5fs@ENTUb_-;b|>If8z44B0k(_Qn?p{foG~ zC*YF7`LItOlutwQJuVDmaK5hNgv+ymfr${}tXp?cxgmLnt*HwSlJD z_o#O{ddr9A@x4#%=Lg3FC2S2I8hlJwTuxL!9$NxTen9N87&9e+-T4HN@LWz|hv^+g z9rZ|wuM8fk7hD++AVeRG$S?%(=r0gf?PTB67&tW1-~d?FA5WmYgaI_9y-pg^0$4nM zBbD*(F%lfTZ=QiiLh?uUwUwo>u>zS}Pm|2~T-No}qy5Sb%oAKzzP+NwBxn0koHGl= z%ak~4+YWjm$y?Ho=k5T{?>@Vin^->0^gRt%3j%4c(68@fvK=LRJ?1-4c1;80}3jbPo?ao{H7aX7vpI40m0BRDSo z1h&C5gK@YAj4wR*@i+?3V;twu%*SDP@C5Z`Nd9o5bN7ub*3IV|ehTN~@(iPY5b!Yv zL;APK0r0&1%xX}{&8`ov2k~w$UFi6;py7vu5@RNR$o^?H=#iR~{EYlP`@wpUFNpwx zkbFE}Y+SyeXzOL)=koT6w=Y!XygtWo3J~(EWpiJV0bp(j-lSxEke+_=E912H>z7UW}{q+SRlmhw!5lVkV zUx15veSyfN0r|p06bANjoGGX>V3~yTVWnX=kx5sO`~7r=iV&3{Ad{{v_fbPm8q2=P z>lc@k`--4QLLGp;`zQ-EeFDj#fwRZ5rSPNrtLP4axsAgS&>c8"bt0}@AlIHaMn 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 diff --git a/docs/build/_static/css/fonts/lato-bold.woff2 b/docs/build/_static/css/fonts/lato-bold.woff2 deleted file mode 100644 index bb195043cfc07fa52741c6144d7378b5ba8be4c5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 184912 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

x{o9f|7gEmo2*wv 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 z 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≶M9Zv|5`G?V+t`dH%WEMXqpk;_3Hk#c)5bow}^>GHdOg=@5pYx=49b13Ly zrJynzDRebu8rnRSaDCBo@|9g53n?-Toj%;)7@=UY|Noy}Ma{<^CTZW`I9PGat{6t2 zaDw4J3oUfqrNwG{*q4kXjQO#)d%E?I`6unq0@g?R`EPa45Y|xpiRX?D^@^QqfPjrp z`1!tA9;wNGs_VH%HtUBo8*1_;v~g)avtfdTTKYQ+w|_T@R1|@!z4MWbhw@XQ#{r8n zFBZwGL~*S&Epds65DN=S9LDmC%OD``N?Ja3mq@-KYHmwkg<5GJXlu`C1U~hF;}GUt zEV_svDDRB0pxY;h0iVB6!+t9MoPjoUN2{tnNvmp71!_;3|F6OefCDX3EgVYSHa&Y~ zU}M_~aPglu-?Am;VW9ar%IVbGkq@`{Tq5wAt!;iU^4x0?c1udN{X&%ux4V&|KJ4W8 z^-G%6%-Mk6r|NGgPt?6Gz6|&!zRxhaV4(F`GZ8rK4j__!PX?Q7^;*CQ1mh5%DvR6C z?e!IxGMT8~xw^^9NiPO6=pQ@SRODn~Fsq8jD|VmScW#=CFmzog>dWa9ISWyD>bX6* zxnZ#2TwN0;af`pj^X|5h-UR+^#wtJ!B@tKiK!pf5VjK5!fZLt zzX!?qwZ#;g@k9fI%Zc#zkaZg@VAO57d!5O3Ue&0UhOx8iALeb!OI zRvYFgz{G^aMMxIXA9Q8%Ks(ns{Ng8LwsDMRXV9_!HbeTZg#-D*^A&&kWc>8s7s|rI z=ynSoO>Z_is~m>%blt}gX#It_>e2=$ntV|mjceXzzfgYM^uWLH4|qn@T1Vx$y+(mB zr_oTl_0pJ8ZR}4L)pN;gX0*r7gHMr7oprWF%6?*dA?da-61JtJNHWwP^#36TIN#Kl zHX65H`VqI9GB?_ee-?H!Yb?FpyYadu!+UaImNKBnpF_sZf6ay)B7}^R1hodXNP?eK z4UhCNG=>^Ra(w)t-DekO(;#W^pCZ0-I00f84I3?O?7O zB%x)J$UIIl{lRxlFHDbkes}4Xh27aeZ@lufb-e26$_f|NxU&YtVUJG#2x>BxrM_VU z1LCx!(BL?8gDF{Vq$J)xNc>yL)$=)7I*g|%)(&0-;j8CsUSvGa_^S6DVMpH zb8v0T>G{!ohHICj*>1fftNM+zZtws0KCZLv(IK>C_QT1EH@fD(8$2iPv~!>Y4cV!P zSZxtr!>L43HPE+4<>ftO;-5eywKK$aj&E__@NZF$Ub2O545&GURXRcHZf+@4Q*sxY zWp376swn?@b?YH5czxG41HZOjt)n5ymnfWVn}~l0v!W9f09Qb$zl@4>j!2BD$PIWy zG%tHq1co&qIS~ddbB3;u@9Dn~xdsYnr5s8^`W*i3m@VDEnOB&F?o#)Rs5v1eUah$w>#9 z(>0sd(bH1S1!0KMO_Fm9-(30B*tAvEi!I8bj@kN6Z10~`=5`eh*Oh@TSgc~GARo=W z<9@k$y19A1xpq3jbDRG4LD38!4XW&4?>FThiiaoIiVSTRo?|YzPPb-muv!>myEIOW zt#-bt4&U((ZdDWewL`sy(~|m2`BN@QF+Q{|G9ZCrd6ta$KC*E*TQ_G)_3NXw*H*CY zbEL^@$wN>XGaLNe4bu&0*GJMUg5zS=CN)LQyqHShcMq=mcw_4h9+%ozHC=V~`$%?N z`DWW#&TppMgR}4%!g!nK9J8-_y1Mk=F&oUrC@E68`W@5@I(HpHbiw(p1ld9~Keub^ z`qq-^lE(GMES@?`16xSt_yAA?b$A0;omip zd;&xiYAZP+=TTDO@|)ZHN*1!_{_wQ@i@zy5-UG{`HCbB7dqN5AgmRL@R~5 z-KAmZe7J3gow^U;9@e_R+QBj&j{H=={FCM3!&hwmwI9#NDh>OjBmRdo%0A!wRKaXY zbuUwpVCIg-{dzkrjjQ8pNL>HpYAi|XN#kSQd4ykQvE)e`+)FFE<}jMLyY|V|AnYCx zC+xXrSnN5`U5RSpm2-UeeXHm-H>h}SKrB6FW-egyq$71QyHCe-$COfBK3#rRZEW#G zF)vL$H8*V?-iF|5Y9#BVeO=G32P;?ztcA|&_azD#1Kjlo=2HHOV$EqYO?6Jy&P_Zjir zSdU~Vo!0G#WNhdh*fC9kX!bmpEigT3bCmsT^V+Og{llt8`p6Fh+R_24Vk8CUe^Wjh7e|u`=lR zCR5v7KdxbaP+|1~gU5n3ZBhfJ43hx3ubK?1htyj%2W@aOypyz5c}TfBm`#{%2?&l1 zZZmYR##n&F%-Qfx&sY;4a$xlRz#dZN+7h5ijee`#r1GmqH4-ylG$FAT_I;^i1HQ~2 zJG;n>lwSl@tAq%N=HRD}vJUEBW6Iqp&!ox26MMF1RE<$|1g>ZF_515YMLmDRzD*nN z^mG!YT)lBFM(;6*iW;P+uLea~R6%W zla;~AQz^3wrCk}9YR#oOvEY(#dm7uNdN(2T(O<;NYTQeo>VEBFU=lPQknB(Lf)A85 zj;zF-jU#8q%^)|r7$FVpjF|~4a_ap{o%zuB1wymd&9i%nd>ZTlZZkpUvFK;uOEifT zzuP{nXj0I)Z{e)f;F_(RtMhn1Qk@oONX^N0X-j$rYFiUaYRta zhs7&gd}`D`d3sP^M>uhaDRg@}EK~y{1`HC3a%H%v_W0Ux9aBW>c>X%ai@s1A3tk#H zf~(H=G5PWSa4)F>bw7UVjfuuF}szWvDi%FGNcf``VoAsr{>^YC= zxDx5wKj+;I5(2jpzB#BMK_GFD2#y^T5h{7Y-($R)ZI;v7w&rSu>o9~L!GWrT^))5l zlG?|bHe39tvt_N<5pA~S`m*Djmbp`XHmUkNW;vzctXK7f9J@?!Pc>VG)3N=s?Q=Mf z`c~_7?$^YrK7PLl`Ez!WhZQoR-FGaj@1u$u+TB@_R!QVIF0ilwc7WqhsU`Q1gY8ugrk?Ec!ur_1 zC~)NA{gs$vPweo2I@9@V*yDrpSTy4aZ2_{b%&~PfU-6^Hf=->RR7b!L!21o=yJhRV zzZ05#JH}&i&O&r5ie8D_&ixzz`J#P?p{}1 zv=uW_4ySGUXe6rE=P~UX*oO-+>YRizT!B$s>7{{d;nRd1xNu%PWZBliJm&x@VN)aC z*85lCh(&Tq+9_Oh4!*7PHHMd+oL_j6g2rJY5?7K6N={KKaV`C{WLPdq4B@eZY$?I>gMjY{35q9M-=AE$Vg^3hRH zUMeKud~}B1xQjqX*!LjV5BR(PVD&&w{s=pFTmk4>$2S28!Zfj&Dk>nx?@_5yj8gKVe(t*m`yQbo(4Lo+}Y;YoXO9=FMKS z0nDydZfjENPaM}L&X*Of!F2^TOg6KpZKe7m1^q7TV2Mmr~2jDhK zfd*xVG?pwB{&ILLF$yoVCiXbdh(1i1LKGIXE1P`dK_34tYLx_2@~Jz74ckbx^Of2i z+!A&)fSd(JNpgwA^Nsw>eM{|b)+(np-eo>Xg|ZbobaYAve`x~W5c)mrYYugE0HI%*m9=blCCU~)E^6utf- zQ~WN?lTJSACGf&MgqvaGA_*QhVHajuOnc$2(P$TvAVrTl;| zA&XK#2u10n^D}DhWGyLOi)(QQ0)iN=TrDSrs09SCdBX!xfEWS*LswM!Il(A5%E1zL zsTcs|@OGDQAAevRlUCAX_BEokjiR+pC0gWBP}X>tS(D|uJcVsO>@H})%-?6{2K%x9 zG}xcSD#Xh6&Km1+VTMRpxu~3|wDKPk59**S`PPVqaG@R$~r{NHkq1k z$1bA&KAK(b^vs9K{nj#kzp)0>gmqM@#H8AWYXaZ$u|Dsp3;+6TH}-H@SrZtd zIwq(d-CG8LdM$!ax{kT=m}xX3jY@1xrJac_Hxe`B>6|ZauWE5ncHT`s$zihPCYh`b zU`;lMWV>zbbf%FYAJDyBn1)W+U&IgJF4K34-*Juo(U|k5P}L{GfAOo&rv_YyYEDxv zRCo7AKKB>Q41)P}EN_*Opn6+qTPJvQ)oQ%SHNL{(H~ACk@w*rN!;k$*-THe|w?Xu{ z4f{5-Ip%hosBr3WCN`(%qPCwCvnCtoM|RGgzICnjvU$tE2{?>!1jkXED03>_GH`<3 z2%XItMM4X0bev%Hf@{2aKdZLFu}`Lbk@%hCPt<!8g2Y z%uUv_gM5^f-psHm_O!Qo_Facm{{naabgx)qV{7`ChODfRNJ@@<`zk42Fyt6p9ml_m z@q(C&0|xE`K%A$5!fX6|U{BCvD#5awUGvKHk|Kg!zIVNA$miHZzhK=KpG$krCLWEg z(Ryu!A|^R{y)Td65aydVh3?$Ed3_jIYdU9H!TH^^BT!;~=O;hDM5L#PV%Ry zM7!<+V*UmU+PfM_$aH}KuS)ywniTN7);P;w?AiNhdXUN@r0qi`dq)_oib|RRx@we> zY9IWbsL^|!xaELpywU;VnZC%=#|2ov1BlU7Pvy}JV#~~5ljKiw32Lm!u1R`5D3PwbbtY>YCj`YbI6+c0!*aYB)?e}JNA~3tc7rV-Fc)@Tj z?qio}(T1c0MVB6Z286C@M9#td4;n;4i{`*X)Uz^G+?Y=VJpQNh#QBGD^%3bC05|T*-z6;5$ zDyG9~y}YTbPi@KK6}8N$#XbUVt-yCRnN>B#%ZGQ>sco^>e@j%A&NKt|UW5)>Jw7xn zsyR#*xSZ>O`EiUN1qLi!0CWHIiBxPv5)~SB*ou9T5{DvvFnjoqmSn|z&*>7+*?PY7 zir@G}O8Pg}b-#z*pWw2)S}F9PkI2h8$e#_<(a!V3FvRQ4mKrFNq5CEJLey&7rtX>t z>WTWzh}y0Jt`V*wE)vlB#ykD^UbQ?W9UC3pxsh;xJ&2KTuj%OG>49vB;Y0s}QEg9C z<6(CA;jmCi%nzWzK#ev%XRffogMk<2VM{XJAMG;ZpvzISQ%Tsxpje1%5r!f77SEka z!f`)AvVu+acG<)Ztj)pwSz&z1oxors<~^ih!*?jqpu;wge=F>-B;@?(an8-117F*^ zTCpveGSi&qdt4QAX9ef+8^1`&aHb~SmWKT;Q#ZBrFZ)H5XQO)uR%wEy^iHf1P3xDY zZZ#Ox6SeETYv2!z=$t09zR=KFDU4L>iV(}nz9QtA&uX<|yAaiyX_`sQeOH8MGtQ89_P*V4iI40COTuNhUmWV=>hV*e!lSLGwvFDC=foz0f4hDdNmpynIX}0l-H@xH9`{LH>+lHL|y7OOC zSQf$QKYPi)YlwV(OW9hMe)(j$^y8g`eouPZQOe5wsC}G@x>bRCqJBL@ZPy^=8sQq^ zBKcK1E6lv^W!RrgAO?5-vbza?1Z^Ho*eDW~Jf7sxXqPDnJ3H9=$43l_T}V`NkVsiO zoQ>{sddijcRQ8W$?|4iZS)|H7jw*W4yX2h_BFYH1pNK-9q7svY9IEBLmE$N+s&^^s zrA~&NM7cy>la&h1{b#f39bdVECfNn91!?~}*Pud!4%;o`=PqzoGH0UoZxw~wPWxP) z*$Te%;5UAel8#Mvmu@2pe@l&9Rw~EH?!QK-kea~WzU<#>O8LT8%a!e<@M===n$no0 zzo~8V{yTwbqU|+Zb&RN6y{IQ@FP3ZIyGFRk(9LvK@$M3RDOgUy)a+%bW*j*&0mWps zxxcQ&39*;8khm3Tge3Idmiqpdg_a{#U2#tGYgP><=6ZuG?JY}3+z#w}L~MAP7cC`C zcNd~+s7RFXHnVu!W~<$On+qV0l*))-pS`9Hrbgt|P)u@cmq!N%2@kDp2GWFm3sh*( zVJr6KwlnTav2Dej4)J0&sh%CBigUDniJ875cI2%hmLA`VfwBow>@G|ao`jXqLXz4k zZ79Ph@sunXk>fG(Tp~@ZPXwvhXeyd<)RevLN)n1f>hBb0Eel3b$h6Lnf>dlcgJztw zWvA=cXYZwxdRd;JT^{y4QLh`Zg(};pE z7NY7(<1~ItGT*X$m**$|D0Tmzc)~MY@|w52kMss`13~g*!#o0Tz-bvU;|5s<_Sotx7DszbhT=&xZUo6fLqXJ+cg2e=u zsf8faBgtpBV)riR8k&TiAVVGmS6fmT#~Ix6NE^L)ln;q@oY;Xq%q5%7BE_10NRS~% zjTSwIP1Y6Kk~vIsiUWZ3obi3<1i$hNlni5P;w`4Gx5>!4l|vIG2hU}#j*9pJcSo0o zEaQK0+*A|eJVTkNk_l4b_3}8zL`6`X>QuxWvM)=Ra1l@TZkRF?q^%b%4ta0PbLyQk zSz%qioIF5blOMe213%(9Pni8+K42K_jQ&7|0X=dgfn^1v@V-J2#(8>J=Jo8-1BTj%<)yMte7GpKFa=0|2XQT1eDNQf@-I2n zsrzUPFW$6Ti|FycB=q^0j4lMfFZHekeFi1>k3`uJ}#L> z>3qMs1W-=FyNXTf9aKo(Pj*%!NZJPHOTAqVdk4lk$8|qpHBBPZ2ExOV?WYl|WgiDQ zN-=J_n8A{Y>(c>88xMZ5T&NMiKbNH2CphS(G z1CP%wKI}`_cP%k-t~Z;gn1&ckMpM*9J=8{nO&ZN_#?{%ASirlzq|y7V&+IRa1r*Zl zao!LXt{CU$)unS@;MM*}kCE*g=!Wb_mE0f4?5qCQj~>u~VUL|&+Vvf1c*gTcs%Zsp zujENg-=xf*1?CqwE5zb{88r=?FT6_g<^f+xJ^tyT-3tN*K4ks1cN*E{od@<0t$^8~ zJVW+S&-DNXqOrciLjDexphf9=c)pS}PD#V^|1_>#S~Bk>^l9BWU8xugc(<3uv~g;4 zsfj+Cs_!uIcM#W>pme?1JhYgkZyl98$V&CQNIJjX=cLD})JRlJB7@pbJ$o-mkfBD4 zo_cTXP`iAy5=l8EsVMO1+i9wYHfL zB*;L=RT0Q`_()%zVhdQGz-D`)YUACE&6x!#g{q${JNyE76Vx?3aRHl4-Ola0hz zmH?_e;}NCLH$Hgq#*@z(^tKJ}T&>Hp)qlt^t9L&KNu^sB8zOn!wehcE2(vJTWthUs zj6P!oJv`gJm~VYV8S{+~-gwTC-_&DX9K69KxoQ}D9j-sbMkNM=2ujyVMC!ye;$>(n zI)AF~lWXpu$tda2=;%(3=#Gu(&W%jBntBi;dLScV`k8pjw4d~#M)bfXK6nN&%I`C4 z1Cw#a*f0=iNX*TuF%EHr1s$p{OW^Yh)W2@D1eQN&X3haMOvV{w!$6=RF;O_cA&#)1 zLygM@o_&QZzj4OcFc4@+OcWM$toP6Qm69HfPIwECaD-bp!!umrCETB@HtC}8;FW3T z<50El3uv<&)BTh^0V)0u)l?!Q@H<5s*ZE{%Lp>@w^rM2M!KpY((R9a0%4z;5?UUM3U6k&IDehve?Z2PpD02I>nq2JkfT}6X@>_+FX$PQh%t85YKgtt=jE~*{`i(|J^b(6x_xWOrvA5hrHtc5QHZ<7x%QhwIXjjg z4I>c0y#`g8>@{UZ!ahR6UQWXLK%!DFQPC&dR=a|3G&Vuql+lYeU=hoFAZH~7tq*ft zsY(L5)Ajx|go5O)*Ns60?|c=blV3*tY~Zn$Jc#9YVx#`g4F(_p%+lhwobZuYz(xAX zpQggN0K9wAXdlD>Y|UkcVcrc-K~sAISqNs)0|fsZf|w+xt;}{;at_wMNd)|2Lpk z`eQP0WcZ&D`1OCW%vU~}KV`|#{h5({DJU!8)cvWUAJe98RzLOEANtWieaHP5KAjVOb|c;b7(a|Z z0iYN#zs&^V@U@^G(@nb90QRqWi%;Zp4L4y12J4o~uoGDenEx)gO+Y`b(bB`&ou?Bt zwjHJk=Bz56_h=wkHltRbRV&vEGe?-BZOQze+FXXx&aSLOL&Rl$_~_cpK6%>vv}da9 z^|584MN|OdyeVh(^o&XY=F|NIcJ6L!JGcJ);VA8g&~s;%J4x~gVRBdTwSVZ{lDmVC z$C2y&zArnHAFxe_$a}cRkb3S7nrfCS{x^87sRio~hVB6;&yD&v1Br8oh7HC}ZWD{g zS`GhT3;AfNvr*S7-UME0dN>y+H!Wet2d7y-q}~{AW{%d>nU?1E zuRogDJ9U=jGj`ief+Nq~_8&a-iMC!LY0veF7s6;%yYDpVbgzJLB(&P|#hd-&y+f0Qw@Op;e5V@~$ozDK*B-J@d&u>QCAUAq zgc9~gaeqW_Y)AKoA(te&`P^)n&NLe8M^i0jkr^#g7bah9&kH9$VGj#RrXXfwF4VJ2 z8II0P_kvb+b>h4hwvC!*|%we}5N0OG-`9r$^n6#Xn7wBh$?)qeQ>7`xXH^4%EDtel z&xvq0h-k6O(L9B%dPSMs6IUDG6PfEnqJAQ~ZS+$gZXxbuz60#pFg0?tK1{N!GJly{ zf!(~0kf6taL6#3wU{1?{FQ<+y^c13BOsSetg!MX^F^Q))OL^q#-8FcH!+CGYT=sP2 z#bMx>0CRg!3q7hiWsp04d}!wyd(ZY|&|>=tqq*aUcjeY35g2EQ9aJb>d9B2#j{Pf}_*T^vFWWOuT=s;frYkUHkLE@1mwn@s(6NqO?x(Q4Hf^vZ*5+%J zqJC=CRehRTR`Nw>ttCynClH%LTaut1-|2|Nv5H5!wULLY85#RU;A?zKU@^3GjN5s= zOF%7U3+##$$~)J;kvXL*NT_BN#?JI5xQp#hXlZ(WZ288%WuMy7xsxq>6dBv2f9?;H zUGZ#DRrINObkEPv3_Uo?r~95>L}s)29yOvKA#)`4h? zyDmqER|V*Zhj<9~-NlYe)o$VDa_mtd?s_mezkI&;q62}f>@WS@lHFh(!Z%pe6Lu z1Oz|Cmwqh_M$KRZJ|_@BEvYMgL4j+Ow|d$aDJtWLioZ88iwfc?_*)-jyn+en^hiGX zK_<%wfKqZXsWYU{AWZP6Ot6Iu(CLvj%p$G=i03Xo6f|tv>7|eQyfrU$3id2S%SQr& zXhFX0`WV5O5b|s5M@oTx(e1&{MyOcOD(ip@=fTwy)A=YQcAnsMEPZ9!T~rp`9-Pp- zy~Qfa&m^K}UjR1ji9tiYOilu3q3>CebW|7A=A(h_-B$3N5+w1DWQn-&RAy#Ke1dCI zGB6!t2iyQ*;M5_iIWudCf_cA@(nU?QJN~Mig=e^>^&hg#rHAac2{ku|FTd6aW@uMd zXM62yMk6axU8?5qU9=;ZPb>IxYQin;^n03HW3U@{q6shXCFhwo8k)meBjY!b?}b?H z_fCG>c=GN;=6J4H(TJ2w(tEzLxIG}jtJcuL@7cjb;=fnIe-F$4D~>R4IBV(nIRaDg zBkyjQW2%?hD<_@U!oJx@fw@1AeslscE zcTl`rQ$`jT20iDrEmXP1od^*qR=xRj6bP(Xm!{_`mmJy8naOEdkXiwR9xhA2CxU)O za`b&&mMPS6G*6E>tHA8VhEfIy(b5WTBvLveImBE{B(cpNjnJ68y1q!>!d1T{&I7Ng zC`@G5Qof{TN7{qlq5%%HgkG9};HSzrY6RoeQXy)PS^4!-g{k!-STjs-jmJ__3-{Qe z>gcZG+&yNc3UNy;IsqK$HH5`-6?icLs%0JO>HX1;1Q!kP2KwBKBaC7h3COCVE|R!t0A7VqBN+B9&tH?CwUlyFAaW1Npit$I zBma$cF@h-#OkY@SURtjfld0CT5j2=i==CVCA>Ecp>vJq5;whAiQcpGB6Yq6bn`%ZX zwheD@UZ(-GLrgUtMD<`~8TW%xV_0ka3fuybCE>kso98)2Bqwg1AB-9!5!OhFWpLNg zuk_R4BKo?Zn) ze`V`U)j}itmo$4vpUKqFI|m0v8J_J=hO>|>>w)-`6k+@!N;i^T1@r<@zYq7R_nAIg zv|3VdF7|Y)!nmqVfG8YhFX{yFs&UH!V(d`tD~IwFoRvVtm{+D>4RIptrr{Kx*L+k3 z=JR}{_NDjH2M0G#mcSloM1IU9+tA|94nnp_<*hy z^J_b<4#+p-!1xc_Eiu-rMA_D$dcd=)jfhI*C@|JsK@>)zk`4{>=oP0GiQ9m=Cn{18)`)l3`q*@+17i?W_( zzMkWZ=iYp_DWT-B&>Wh+n&+eVxdM+e6dvc0^XSg{`Cul)ZVSI{c|(gYS??DsN5OkF zsLkbe@0kGwrQAF$SL6JE)|xa6A!{?`Bgk**k)aOCvP8e@WVU z^hMSwF6F30nQlp_m15i}zvPJJl7>Km@v4=Q<13X(@hNBuZ73WRTM0s@k0K6fdbug8 z#GvGaeE*TQ{oX2ItQoFiE4t!xH@#p3y2Et4=uXh>Wf6q#I3@=DvZFH0O?95hrY0c3 z8`WV?9~d226mv!}r5U5pAzhfj3!U0fn6wg^UaCrJNFxySK`NE*@k~BIxG7^?Ec#Ca zqOw>uh#TOcP#d>c(c-jO z_?`g1YTO#ZpiFemntZ}n3zpWsP?v2vy*m+CFxUI{2S3$a;?r>gOnEM!UH@Ef@1(O= z-3ey$fgT5Ix`4UfZ^JC&Dww)Cb_R&oXM}itmZT>yl3|kc8bE?F;eduW5=;kX*RF_N zi`fj5;^kB%g0fe|l65*W-kC{WayChoX&zPUNGHancgQe_m*X{f&0Lul91goOD#1!c zuv8K+ry}vGGVSfjgJQkKTU^4vjmNtK%;&zumfq2LvYWL2g76w_&$UZ;#h}nn#)O?I*QZ%22s)VH5n?i4!vTi43Rla*F4;Bd_F&;ikI%A`h}n zE1eKaJINr!%c(%L0wck6#@MwgVwWNE~HF`MO z3N@^|VoWFntEF>#*aHMqvHi6);kBU0g>d@US~0*L*g6<2W0CT3*}2I74!Akq z_gfu?s2m8c96VMpq&U2Fk5Z>*IY$nF2oAV60a)*Ff&k3k*Msiz=+&&|(l6xzw(Sr{ zcK(taV5c7%2Ay5SH2c!|)KgRKM_H+eV#SmoxcQ1oXrlLc_WI%eR1rx7ghq=qxrZn4 z!p6;wQ}#Sj^cfgOWW>b)JDs1P)g}<%V(EeRywq zM$6y24|j810Q3jk3*(^jM=w;5%9Z}VAOLFK{iQ}->(KkC|AG2z0>G*7uB`p}d(WpY zPrZyz&fNup4`VZ${r!C(gY*Oc`OyElTk4-uHk-TTo!F){Z=(GMxZ#oO7xB6lx)SKx zh?bfN!4A;7(R&+>et=|7_Xsa^l%}UzRumcXzNfZII%-x2C7baQqK_cLjCl&q9U_|9 zV3uB6BBc%+kzox+AkKT5es<(RU8h60hKlN9x{49g4fUxO3b8iY5`Z!Z?$Hpp4sl(| zw-Vr~F+)(GK!JquL>~6YpwHCTb>h_&Tf2fL;M1i_GY!cvZLBrVXl*qt^|g-xTH;lX zJnyDhP&b+JW>FltmYnjuQI+RtIyq;CD`Ioul*xTI5Y9`)j;84ZqUJPnN}7 zfgg?^^ivs59NQow%tmH?m$ZnW74%EzC~gQ+{M4z?=_Wg+TYTeq;b7!wv5t0dJt~JT z(z$bvKtYAg;!rt4Xs2;J@*&v_Xo?+^I>ZcBEjQ&t#1s`8!zBz)+3;e5O1Vy1Te=pI z%7)Zy=)eZx1RRH>&<}5tJqVwL=fP7Azr=%|fmhk$c4hHxfv!{~UwP^qF-sx~O%%Dv zu{Eq4C$rAF(^h-;eTgv`Cvsu;9o_ww;Z3>9J#mATCX=$gxlWi)R5G zlez8mX}uR!r_fdMe>6AzUgcZ_`n5Yj?0$m2?^oJOjhCW4H%IrRthVTFhiNO0pX$5q z(mwjUEVaDXyC`2JV~*f`Wdcs5NG2+JN^8IjHn47UX+z|$BX22fBp`&jf#V+F$?UT- z5khPX`L3i@5cMPL4_1!RSnxF=+$pekCX!(Fh6|xPXX~U?ZM#sw|3zn7MuJuaW@Z*- zmd5bu6v;~)iXvlrT6qod2(3@13eG}73RcM`dM=Z?EB}VuvK)*X*4MhLkj-*bW=C5j z1ZC+|$egp3S?;XiYuQ>p7)dwp%XWyj@E92yEs)zlnTKFErMh9(`iQ^_ zIO?KB5D>>}KqXY+($VO(TTlB+#eK0h<;{x?g%gG`zJUs@gOV71Ru(POv@rc0@ zQVDux;^^FDOv5=5RvlS!lsiN8{ej_m!un079nvY=j?HKP-+gkC^YhL3T<2lAi{+G+ z%v+wat%~bQ7N56({eYx#{IwToj?^__IKFhgi!Oo6tmO?oL+{y*a$D59S(b914XQ3v zXoLC$^CA-7qi3OtCU{hMKRS}f@FuU2Icycqb5~GkGrAW%dYxDv+f8G5mXtU|^@c(A za`sEH9u#I%Y*Gl-5>91MAp7!YtQFu2HoZ}Qb80Y36vt})3+8b)`8%+OW2N^P<;FOq z`sx)OgL?h$ik1wFNg(8u3;>Sr4cymYCGb_03bWX>ao;fK7XLBIJ@--3RhG}1-bW~F z-MS+=PI7uCsc<8b46CPfCCsd!nwz)s^NC$9Yb45kJ0aoiwgG+DIeRzxBAfyA>+V>NK1cY2k9bx~NHJ zG&d9K{39L-t=6En0%{rX;MH8T0zwpoB`!X-n1B*>)Vf-K(CiJ&LwQpQ+j@5A@#i~P z9>c~Z{>brsH?&R)Hx}CHsFhmeAzHQ9%gMW<+}grjrIez` z^`k}e0?OaMe3;JJPS0-1GaIynrytX1LTlOtVqi4Fcvv;65X5|pZPw#}YF@!v8uT-D z6jAu=_lH>+gZ(I&$H=Jh9_P9-@~J7M27La@3~@a{+$L$K5ya6V>pA&$eP<%MFIU^% z$QZc~^F@eG0N)ixT1%cVVek}h9BLt^!geU)f6j-awXOPp!Ug9Ea98of>BCP?3GXf(@6%Yg_OQ3%74cBdDCO1)vVgt$~< zOG_r0NGOx3!^oCE2SV*dEs0W& zRJB%-{zjbd^x0!lo+5KM11dvVOEC1z?g=LdM@PdZglc^FMpJNN zbWUng`zb*JgJ*UQI+tP!$(8f^#|VwmvU9rDo^E>QDv1g-3ri=7Vehg@9U`8qOq%&? z8>q36MX5%HNH`y6#8~MP-ktGs=bY9**?OGbD!i=Qp0i4Qj-vK2~7!w zajp z?eNM((?MJXh#Q9yp0BZWVn|Gst7y+EBGwfbMtzN9XzE$W%wBIm8bN)nBOMSKJ#_Yv zH4(#Y)tV`~wXj7{d9h{T*D!m9%sYP)EPV?n<%nHSnjUb_Yd*mXZomv0ppGc3a6yD$edWlJ&OM%r_KI~)F2Tul;rQm@+V$x48v*ZJ4bSA1 zv+PsSmmx|Q^G0&N)chseM|Y}o>djafIzhVXnRpxYBu>+&S&A<*&Uj`KYXU+f$Cy99 zf`Fq1ZXey(BXqx!QA%l`ck&x+r!t*nHLqPo5Ny=jS0;Z%S7@T)s3fPdE|G@B4{L9+ zAE~}y!pjR=enI2m0F^8#?9{h@>dl>eIlzW6S~_^|Uhdy9u7`aNYz9oPKek??60oZ0 z9Ozv(-Z8=Ui@FOU&J=lNA`18md+O7HReQt5qU37a=_h)(amR_m7#|yslJJbKIqYsR zAthQmp&YlQ<9Z4!33xM~*qSgsF_@=fDb`c5EX_vdnmynu>&Tf;Tk7?@^npytgrU(zdAjq zvL6H?86r-5=&>O|Xi2c+l4ed?Ur!f<(8kMvjS1J*I~hM#zrYQMbxwC zIPD#6cy!Wax(Lj7V9V7lpX)xy#lS9Nea`^S0Kjx0MwXdYa5_ouuL5_vHfFvA;74cb zp}bAm3ks@@?3-*5J<1vCu;&}?rmq!(9-COB3g#y*0%hL{5yxd1R)6TBq4dncSyOXtVt%I`{$vvWx(d{Z}@MzZz*U!N(RA(XBoyY6Y`7M(q|K>>_ z;OhZKE(^Z(jL%z77k(~C#fja6cR-|N)~!Xe;a=tGN@jtRCzy-eS_n%yr(&fsYN;f$ zR?MyZYzc-~qkcs9#FgO^3CP;NqoB~1#e6mT-K`9l@%>Ma3w6Yu^Ctz z%0T8Tklh8cTR?CJ2ZmJL6Tl43gb_(ON`>>tsTfAI;@wU#WP_OtCDE`F2juMI!y=7R zKwRTwF>@lw+V>KEiCfGP>Aevj&Wu1_cgXb}7Md!0XE3~pj1nPlA|!m?L`ZnOiI5ob zrGJz;1UmXJ0t!^)e|)5JQBLwOa+*EmLXNItzd~y~LT3V6Y ziN3H@UnQ`K+#A+`OlJ>ea*zP}aUj#cTx;URu8GWLGxa~tRD*Rzf;uqsA z={QE(mZ;F0Y>S>guL!k)m5xy2_QZeh+mN_5{4Zr(_(ucQ!}ioIg58R#Xd1$H1api+4kg}Z7IhJ>}I!ls1Q{txnOX97;U6<*`@?;MAP3(IyE7)(?KE_;W zRy4zxzkZCa@>#U4j>!nH*M0RZ!@|1d;(@EiS&}TTBgGq^G2Dvx3;}OP4^95K_Uwg) zA6!rUW+Q6ar^zahMG-Koo=gD+cAzdoE-L0Z-(v+rIBH$IeE)ILP%G=oGF?m&l)_FE zB)-Af4j+e@$|+6~S_&-mNnyWR%w`x87H*q^ zu_@hr!^(Iy8FJw<^_f~5Ol7KtXn~%%iahO;45edt-{KJzRFYojKy$U{_$cojrzn12 z96XE+3ug(EaY-8Ft0yzooI6<*;2=d?sb(wZyoPS=32DVuFOwFg{DexsU32z4L9s%F z1n1qacq>6F{wXH&sX21iOT-w(C+0wR+>{|9mzK2yA(>XFD(#_Xb2F@;9b$E>+=R1v z-GWLPlxq>SS3L6UWt5g5Q`K#xMD+a`qLLlC4J-q!tHPGZ*@CI5F2z#HA4;IClfS&K za-!Cv@&%a@5F@eie@8;d$dQ(Q>_x~`KsHN_G*d-Ml?3Yvy$AGWWLK)DQs~*Uq!QAY z=n3`I=(Ncu z*ZFZZGza}`Rwp&eeN4-=L(9*rOQgGwCRc}hq8V3hL=!Jt2i4i(7*eHduRSdyQc%EF zVp=d}2uM$4I=~jVM1N{oP6PX)t#q!^E+c0sd{j7FJkVrKP1O$DpkZ$pxj7i*ty;)! zx)67(7La9UP^4|T+)hdrT|;b*7KjHf&^v*!c}+l1L)nTWgy3n;V>G#e!^sdibDJUg z>?W6vK{GQrDxty%#m6e`Ra@o+$?G?olyQ~hc9bRHftP(2bO=Y-xz5PCXi%-D&13kq zg)5*9r|Q@&Eg-by-UBr536I7Av;la~JAjn;yaQzRSN;V+18YqbXJ-j7T3SANC%~fs zCEL(eg^k^%04aJ8ko|KjMnHQt0hvJedq8Hd`!yg_D@s85TU#W0G*;D{fb-< zLk=Z$L)pfe$j0eRLs-H(z_ke+VYQ;qt}&wV_r)%?cl`7(W<5*L<}>i!woxokk$k2+ z76dQkfp|v$e_udEA9OO7BIK}DQNg#Jq%7cXW!!*xG?v7uD`<#)=15q2wjAo{@DSM{l z_cX)7FrAR&;kt%cNre1OaS?D+VOdZ{>n}NAX%4w(ANHsFK)DxP^w5vRW$Z1|5uD;~ z;qvHtx7|!{sr;trUEN}ZpbOA3^qj*9o!}twZ?SMHsA+7mgWe%>YUJ!LJzXuv66|_A zr=lzAZRmBk3(X-nZ5S(5RsfCt_hj{Z$spL86>8EUawoW++q|y@0RICkU5qy_iT84>|&h5lKN- zQQGp1C3rcJmy9D5Aq4M6Ot+0FA4gyNBocWE((_1#IYe5hj$mTu7x2#q78%ElZG_`CreF#Vg~gm9-#( zCx?6rMJb}BJS+EeyK}+!@EVRdocA-j9t80Sh*J)6jv4BP3m7^IHWt>QeGY1f7D7HKHIyO3X79dvqzm|n(ttPYP7-liUm&Bx&#$`a7C@srw;yegS zELxe|J>SELo(Z`!|C+~%^xP?dyK|>~IR8L^-q^|>xG%ywWGF#naCicVOrg@~3?_@sS*4&= ziAY1PxVd}GXT3{~n1B2`|Eu@J-z!j|@M1IXjlFeT9y_ow{NV2HPI31_p=fb;FYZop zx8knFwYa-`ad#+CoKoEFd!X$(=e_s-@y!o*v)Lp&$w($Md3N*LcJvdE4MH+{y5Mri zp(Ol?rKqMwpO1c#CSTJWjE&OeUrEq1hQ#7iA^0(6OW{58@?o6oL`{t-m{-&~W4+vo z4|=V0OzPtF=`ZkKTsIXrx=EQCf0Kd2OCPz^8~Jg&rOJ7jipJ+eR|Ma&0A+u$RMqMWanp&ji>A z8wfQ801&MpL7fktQL(Hse41<#@>R(Vsj{TgAajI03gw-o$9ZNKS6S6z{lrqa&v>oL za=q2dpR<}Ht{@`Aq*IAHKmO%G zuLt~EKLdk%)AC^A-)(FjFTZvqmOMr2Pjmh5OEQdL18_NPXEwSmKA-BHR*VxB-18Iu zpJtQx;9pv>{r;GFxsvcXBqSscqZkOQ%ufrtEe=e%b2u*gHjJORRoaIMA`_PJN<5Q} z?M)2oj&U0<9Xfnt@Wq}!bv_TwO0kQ z!dyU#ld}X$fccU8qM+xpCev|#X{OI;;Fv4n9~ui$(r&+dOb$aFJVKBE%0tEuH*H&I zWhizhV_*wTPMP;jf#oy{o*SA%{z2*p_hXZ8a0d9(yqcKAuOZ8`cug0sj|9`^hZyA< zPEkt+bMJ&d<1ohBij&CCgw({6(laF-@P>^B)ClXuUNxo^RXdEJ_G*coJ@tTM#?jDQ zs4SL+%uXr4waH0*)}SCPv5B>Ih!Y*E-SXT~2@aJ4iP$M1_fI5zCVg6OG~T>h5NFv2 z0lsqOjcJOLBu@VE1;};!soR6(#^r@tQzTqtr70r5A54ou9OeawopsIO?8o3m$zFRa zi%%AN%@IS|OwKMC6wNu-tl921~Q14(o`Emv`LvMeaQdMm;@c+%9fe4~OU3G1(a+xyC{c-2>)(f&<#& zat4w5B3IsPpF6SA!g>0!b4(-hk25>SdNxi5sVwawQpb%m&2xCJbRCm=V&3zfL^B-9;^P z7@6rb|B>%x`F7&K%__eO)J_M}IZUwi9%Hi=9MIn$BfN!vJ;{Cd?$>SFiTf?SQyJhJ zjc&>0a$H*s7$VQF07aRKxBaCp5A$GXYe~_T^gzFc=sZ zYJ3H*JljDOohbPyetOm)!70a6j3=HN@3(%cGLP2*-^6ob@UX)2S?lW9ALr5&Yd5nc zz&punsL6v3Rq%yYow6#|-e2aLTl0`0p$;X?(v$2B?;VQ=O2W>5%=iJdK}g8ca%2Cv zkq78@Oim)SI)LtK-tQD!1#JqxPp8uv>VS46)>tQ(!+0qN1d zgEeNOFd&OKMfolZ9Y+%T6@4R`z|Mn&9m>=}U`D{pVZ%RcJ%+OBSSY1%cPgFZxB8Ai z+;fJE5GBHDQH>>MXZyp0QWDy8^-ppNCX5GA&)MN<)*G2TXrtbnM7n1%jERh5rdjAZ zUQD(jBJXJ7cVW;drIJsS4P`K}d1Em#=<&f8gzHTu?Xm)5wrbtn@I|9d3i9V7*ci#a zv+O_hmG!N8X}}H0u|ZWCf@7QNkoEYEkvB_z5>9Bm20#TA2_F#7NuGz zs}zR4xV4@FU;{GT-|J>YWnQ6V3-EbMfIetXOzR>=*>D|1OzYXEJ2l`t%o$kg? z5p2XWl3MiIRJH-1E(&J(sYYyK>3GaV=`T>esA2KneyaC;z6#Jvndgm4dA~IGoS-@H!9exx#+&ReUGdYv;VzpUA+KsZLdSoO zFW7&?f!lK7LEU3>m2Gm-fnZ{iHvsDE|j$nKNOR zce5E4FBKHef*6y&yTu&e=RS0}Q{4f-8ihS8IeIlZvDx)ve0-OiXS7sCri?e+_GMRo zofcn5#RuhwhZjp5HkS@^eoWM=ZGp>x$0gG+r_javI)r>ISpNH$I=R==I~9`D2rm<^ zeYs-uABfD9^*O3hPF0sUN>I^3rr?&t1=kl$;kdgkD`Zay0D{M(RNwLifW6UhZ7p-zUHJoR(AH=GK%~I^35(ZHr*E*ZnC;F893g6NNTkkk6jZ~W z2AI@Q>^`@y!Z?|*dD45-Vt#HL#FRj#iKze8ui!oS=~xUPYat}-ZORxm%OwCUOB}1= zJW$;a>X(Nuk&tQ(_$&ksq{5pIp~h;F-^XO)4Mm)qS3Vv6JoC$-wMBlx%FQ2Tp=aOT z-P+;9xLMQc`-$uh6RWj_6kt53JatPlT1q!NrQ*ISj5%6o zEle6gN)~DeI(uIr?4M{n!WzjBiyLR0a)o^Wy7Yz5$BFgeQD$DbX?3<@^-!(J97L9G z2@0_*t~RT@@5mYBi=5O2HPMFOd9($mcQ$KAm`Qok!1rBufbL?32HYz@jO4zafQJby z+~t9*Rt>eqzd3)-DjWbk!$0ZHAxPTgA)u{SSq%aJFp&dj@m}tfS^~nC1c^ejvN$h3 z*IMKT@fS!>WoO{wu%Lpg1(XP)7*OM*h%2GfCv$De>*;@l*dL*5B=lYZy_qi~@JAQm zz41viH*7CVzz9aMv{Pi&UYE<44m9WJmi#CyE8Ze0V6&GXm30@(>4sNBhx1ALMwgNm zgPA}`MBtp?fFq*)*TvL)`i4{KjkvErMHfj?rMt`&;~d9^s`&%Ws#M?r;lSsB7 zAe<+0YRHz%bppGRvEb*pL)d;+YbAPYd_DzxuM+|jq3zMn&9TX z^E=d<*g9Bw-Z_}2t7_uL6o);`3CMj*Sx$J3l+;fAfoGb;5wWe9qh05A9|#t=ToN`d zpWgg~;YeF!m#iX|?i*}wiX!uS#DzAl^{VnbOkd7JpMhpa12nbGWn_JHXklsRBXnE; z`EyLy$wCMSfOS5cBHT1M7$^X_57dY2bd#VE@Tq-Rk1)APm^9`Cc{dXP5^`rSO_sr9 zd&(S&>{ZNYGj>m>d?qw~jI8WkXTLYd;#)AYc)q|n$Fz*mqSdLP4S_FW z8(cm%K|alp@wXnwJ`~j-9cJyjV!rHvNK{Y#k5akaZTo&(n{x2(MN!p0&Yll-G^t1} zrm{#X0`=Qp^`!E+efumW&p$U8|EIR^6frc~Q0)QZanCLDtKP!Bec0!%Os~1z!8@7_ zrWz?ZUus1JoFgI!QVaW13E01^mZ*_|x=y9Opb`?j2PSrEavR46Z(HtwPqz{%3P9ky z3Ss@tC;wI1&;J7F_U(_0hB{2m7485k@JQkiR=eTjXR=}7VuxA|U1X9?dOC6Y)t>L! zIO(}Y=y+FteW$WZl=`D^!ect7lQ3Uux^I?|QiT3S+r}ECZ-$J0bD#Ud8k`b^w4SFrkP0_v)YX0x(yTWyay- zO>EI#V=)yZa7L8mZ#}U4r^Nr8@Udx1m}XaXnD(@8nbpmZ+me5FU3h+)_f#byMY