Skip to content

Instantly share code, notes, and snippets.

@toshihikoyanase
Last active January 21, 2021 04:03
Show Gist options
  • Save toshihikoyanase/9bcb20582d09b40eebc1361cf2dccbe1 to your computer and use it in GitHub Desktop.
Save toshihikoyanase/9bcb20582d09b40eebc1361cf2dccbe1 to your computer and use it in GitHub Desktop.
Solving the multi-objective knapsack problem using Ax
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 5,
"id": "loose-department",
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"from ax import *\n",
"\n",
"import torch\n",
"import numpy as np\n",
"\n",
"from ax.metrics.noisy_function import NoisyFunctionMetric\n",
"from ax.plot.exp_utils import exp_to_df\n",
"from ax.runners.synthetic import SyntheticRunner\n",
"\n",
"# Plotting imports and initialization\n",
"from ax.utils.notebook.plotting import render, init_notebook_plotting\n",
"from ax.plot.contour import plot_contour\n",
"from ax.plot.pareto_utils import compute_pareto_frontier\n",
"from ax.plot.pareto_frontier import plot_pareto_frontier\n",
"from ax.modelbridge.factory import get_MOO_EHVI, get_MOO_PAREGO\n",
"\n",
"import numpy as np"
]
},
{
"cell_type": "markdown",
"id": "boring-banner",
"metadata": {},
"source": [
"Define the multi-objective knapsack problem.\n",
"See the references for further details:\n",
"- https://sop.tik.ee.ethz.ch/download/supplementary/testProblemSuite/\n",
"- https://tik-old.ee.ethz.ch/file//9470d680ed6190147908a1c2fb95b576/ZT1999.pdf"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "valuable-indonesia",
"metadata": {},
"outputs": [],
"source": [
"def create_knapsack(n_items, n_knapsack, feasible_rate, seed):\n",
" # Weights and profits are sampled randomly from [10, 100] based on the paper.\n",
" rng = np.random.RandomState(seed=seed)\n",
" weights = rng.randint(10, 101, size=(n_knapsack, n_items))\n",
" profits = rng.randint(10, 101, size=(n_knapsack, n_items))\n",
" constraints = (np.sum(weights, axis=1) * feasible_rate).astype(np.int)\n",
" return weights, profits, constraints"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "multiple-wonder",
"metadata": {},
"outputs": [],
"source": [
"# 20 items, 2 objectives, capacity is a half of the total weights\n",
"weights, profits, constraints = create_knapsack(20, 2, 0.5, 1)"
]
},
{
"cell_type": "markdown",
"id": "forward-visit",
"metadata": {},
"source": [
"Setup optimization based on the tutorial of [Multi-Objective Optimization Ax API](https://ax.dev/tutorials/multiobjective_optimization.html)."
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "looking-console",
"metadata": {},
"outputs": [],
"source": [
"parameters = [RangeParameter(f\"x{i}\", ParameterType.INT, lower=0, upper=1) for i in range(20)]"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "adult-nursery",
"metadata": {},
"outputs": [],
"source": [
"weight_constraint0 = {f\"x{i}\": w for i, w in enumerate(weights[0, :].tolist())}\n",
"weight_constraint1 = {f\"x{i}\": w for i, w in enumerate(weights[1, :].tolist())}"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "prime-viewer",
"metadata": {},
"outputs": [],
"source": [
"parameter_constraint0 = ParameterConstraint(weight_constraint0, constraints[0])\n",
"parameter_constraint1 = ParameterConstraint(weight_constraint1, constraints[1])"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "challenging-carnival",
"metadata": {},
"outputs": [],
"source": [
"search_space = SearchSpace(\n",
" parameters=parameters,\n",
" parameter_constraints=[parameter_constraint0, parameter_constraint1] \n",
")"
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "alpha-instruction",
"metadata": {},
"outputs": [],
"source": [
"class MetricA(NoisyFunctionMetric):\n",
" def f(self, x: np.ndarray) -> float:\n",
" return np.sum(x * profits[0, :])\n",
"\n",
"class MetricB(NoisyFunctionMetric):\n",
" def f(self, x: np.ndarray) -> float:\n",
" return np.sum(x * profits[1, :])\n",
"\n",
"metric_a = MetricA(\"a\", [f\"x{i}\" for i in range(20)], noise_sd=0.0, lower_is_better=False)\n",
"metric_b = MetricB(\"b\", [f\"x{i}\" for i in range(20)], noise_sd=0.0, lower_is_better=False)"
]
},
{
"cell_type": "code",
"execution_count": 13,
"id": "moved-seminar",
"metadata": {},
"outputs": [],
"source": [
"mo = MultiObjective(\n",
" metrics=[metric_a, metric_b]\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 14,
"id": "appointed-phone",
"metadata": {},
"outputs": [],
"source": [
"objective_thresholds = [\n",
" ObjectiveThreshold(metric=metric, bound=val, relative=False)\n",
" for metric, val in zip(mo.metrics, [0, 0])\n",
"]"
]
},
{
"cell_type": "code",
"execution_count": 15,
"id": "qualified-booth",
"metadata": {},
"outputs": [],
"source": [
"optimization_config = MultiObjectiveOptimizationConfig(\n",
" objective=mo,\n",
" objective_thresholds=objective_thresholds\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 16,
"id": "early-perfume",
"metadata": {},
"outputs": [],
"source": [
"N_INIT = 10\n",
"N_BATCH = 190"
]
},
{
"cell_type": "code",
"execution_count": 17,
"id": "certain-debut",
"metadata": {},
"outputs": [],
"source": [
"def build_experiment():\n",
" experiment = Experiment(\n",
" name=\"pareto_experiment\",\n",
" search_space=search_space,\n",
" optimization_config=optimization_config,\n",
" runner=SyntheticRunner(),\n",
" )\n",
" return experiment"
]
},
{
"cell_type": "code",
"execution_count": 18,
"id": "middle-helping",
"metadata": {},
"outputs": [],
"source": [
"## Initialize with Sobol samples\n",
"\n",
"def initialize_experiment(experiment):\n",
" sobol = Models.SOBOL(search_space=experiment.search_space)\n",
"\n",
" for _ in range(N_INIT):\n",
" experiment.new_trial(sobol.gen(1)).run()\n",
"\n",
" return experiment.fetch_data()"
]
},
{
"cell_type": "markdown",
"id": "beneficial-possibility",
"metadata": {},
"source": [
"Solve the knapsack problem using Sobol."
]
},
{
"cell_type": "code",
"execution_count": 19,
"id": "looking-arena",
"metadata": {},
"outputs": [],
"source": [
"sobol_experiment = build_experiment()\n",
"sobol_data = initialize_experiment(sobol_experiment)"
]
},
{
"cell_type": "code",
"execution_count": 20,
"id": "compressed-governor",
"metadata": {
"scrolled": true
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/yanase/pfn/code/knapsack/venv/lib/python3.8/site-packages/torch/cuda/__init__.py:52: UserWarning:\n",
"\n",
"CUDA initialization: Found no NVIDIA driver on your system. Please check that you have an NVIDIA GPU and installed a driver from http://www.nvidia.com/Download/index.aspx (Triggered internally at /pytorch/c10/cuda/CUDAFunctions.cpp:100.)\n",
"\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration: 0, HV: 290359.0\n",
"Iteration: 1, HV: 306243.0\n",
"Iteration: 2, HV: 306243.0\n",
"Iteration: 3, HV: 306243.0\n",
"Iteration: 4, HV: 313713.0\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[WARNING 01-21 11:48:35] ax.modelbridge.transforms.int_to_float: Unable to round {'x0': 2, 'x1': 1, 'x2': 2, 'x3': 1, 'x4': 1, 'x5': 0, 'x6': 1, 'x7': 1, 'x8': 1, 'x9': 1, 'x10': 1, 'x11': 1, 'x12': 1, 'x13': 0, 'x14': 1, 'x15': 0, 'x16': 2, 'x17': 0, 'x18': 1, 'x19': 0}to meet constraints of SearchSpace(parameters=[RangeParameter(name='x0', parameter_type=INT, range=[0, 1]), RangeParameter(name='x1', parameter_type=INT, range=[0, 1]), RangeParameter(name='x2', parameter_type=INT, range=[0, 1]), RangeParameter(name='x3', parameter_type=INT, range=[0, 1]), RangeParameter(name='x4', parameter_type=INT, range=[0, 1]), RangeParameter(name='x5', parameter_type=INT, range=[0, 1]), RangeParameter(name='x6', parameter_type=INT, range=[0, 1]), RangeParameter(name='x7', parameter_type=INT, range=[0, 1]), RangeParameter(name='x8', parameter_type=INT, range=[0, 1]), RangeParameter(name='x9', parameter_type=INT, range=[0, 1]), RangeParameter(name='x10', parameter_type=INT, range=[0, 1]), RangeParameter(name='x11', parameter_type=INT, range=[0, 1]), RangeParameter(name='x12', parameter_type=INT, range=[0, 1]), RangeParameter(name='x13', parameter_type=INT, range=[0, 1]), RangeParameter(name='x14', parameter_type=INT, range=[0, 1]), RangeParameter(name='x15', parameter_type=INT, range=[0, 1]), RangeParameter(name='x16', parameter_type=INT, range=[0, 1]), RangeParameter(name='x17', parameter_type=INT, range=[0, 1]), RangeParameter(name='x18', parameter_type=INT, range=[0, 1]), RangeParameter(name='x19', parameter_type=INT, range=[0, 1])], parameter_constraints=[ParameterConstraint(47*x0 + 22*x1 + 82*x2 + 19*x3 + 85*x4 + 15*x5 + 89*x6 + 74*x7 + 26*x8 + 11*x9 + 86*x10 + 81*x11 + 16*x12 + 35*x13 + 60*x14 + 30*x15 + 28*x16 + 94*x17 + 21*x18 + 38*x19 <= 479), ParameterConstraint(39*x0 + 24*x1 + 60*x2 + 78*x3 + 97*x4 + 97*x5 + 96*x6 + 23*x7 + 19*x8 + 17*x9 + 73*x10 + 71*x11 + 32*x12 + 67*x13 + 11*x14 + 10*x15 + 70*x16 + 91*x17 + 18*x18 + 98*x19 <= 545)])\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration: 5, HV: 313713.0\n",
"Iteration: 6, HV: 313713.0\n",
"Iteration: 7, HV: 313713.0\n",
"Iteration: 8, HV: 313713.0\n",
"Iteration: 9, HV: 313713.0\n",
"Iteration: 10, HV: 313713.0\n",
"Iteration: 11, HV: 313713.0\n",
"Iteration: 12, HV: 313713.0\n",
"Iteration: 13, HV: 313713.0\n",
"Iteration: 14, HV: 313713.0\n",
"Iteration: 15, HV: 313785.0\n",
"Iteration: 16, HV: 313785.0\n",
"Iteration: 17, HV: 313785.0\n",
"Iteration: 18, HV: 313785.0\n",
"Iteration: 19, HV: 313785.0\n",
"Iteration: 20, HV: 313785.0\n",
"Iteration: 21, HV: 313785.0\n",
"Iteration: 22, HV: 313785.0\n",
"Iteration: 23, HV: 313785.0\n",
"Iteration: 24, HV: 313785.0\n",
"Iteration: 25, HV: 338297.0\n",
"Iteration: 26, HV: 338297.0\n",
"Iteration: 27, HV: 338297.0\n",
"Iteration: 28, HV: 338297.0\n",
"Iteration: 29, HV: 338297.0\n",
"Iteration: 30, HV: 338297.0\n",
"Iteration: 31, HV: 338297.0\n",
"Iteration: 32, HV: 338297.0\n",
"Iteration: 33, HV: 345992.0\n",
"Iteration: 34, HV: 345992.0\n",
"Iteration: 35, HV: 345992.0\n",
"Iteration: 36, HV: 345992.0\n",
"Iteration: 37, HV: 345992.0\n",
"Iteration: 38, HV: 345992.0\n",
"Iteration: 39, HV: 345992.0\n",
"Iteration: 40, HV: 345992.0\n",
"Iteration: 41, HV: 345992.0\n",
"Iteration: 42, HV: 345992.0\n",
"Iteration: 43, HV: 345992.0\n",
"Iteration: 44, HV: 345992.0\n",
"Iteration: 45, HV: 345992.0\n",
"Iteration: 46, HV: 345992.0\n",
"Iteration: 47, HV: 345992.0\n",
"Iteration: 48, HV: 345992.0\n",
"Iteration: 49, HV: 345992.0\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[WARNING 01-21 11:49:35] ax.modelbridge.transforms.int_to_float: Unable to round {'x0': 0, 'x1': 1, 'x2': 0, 'x3': 0, 'x4': 1, 'x5': 1, 'x6': 1, 'x7': 0, 'x8': 1, 'x9': 0, 'x10': 1, 'x11': 1, 'x12': 1, 'x13': 1, 'x14': 0, 'x15': 0, 'x16': 2, 'x17': 1, 'x18': 1, 'x19': 2}to meet constraints of SearchSpace(parameters=[RangeParameter(name='x0', parameter_type=INT, range=[0, 1]), RangeParameter(name='x1', parameter_type=INT, range=[0, 1]), RangeParameter(name='x2', parameter_type=INT, range=[0, 1]), RangeParameter(name='x3', parameter_type=INT, range=[0, 1]), RangeParameter(name='x4', parameter_type=INT, range=[0, 1]), RangeParameter(name='x5', parameter_type=INT, range=[0, 1]), RangeParameter(name='x6', parameter_type=INT, range=[0, 1]), RangeParameter(name='x7', parameter_type=INT, range=[0, 1]), RangeParameter(name='x8', parameter_type=INT, range=[0, 1]), RangeParameter(name='x9', parameter_type=INT, range=[0, 1]), RangeParameter(name='x10', parameter_type=INT, range=[0, 1]), RangeParameter(name='x11', parameter_type=INT, range=[0, 1]), RangeParameter(name='x12', parameter_type=INT, range=[0, 1]), RangeParameter(name='x13', parameter_type=INT, range=[0, 1]), RangeParameter(name='x14', parameter_type=INT, range=[0, 1]), RangeParameter(name='x15', parameter_type=INT, range=[0, 1]), RangeParameter(name='x16', parameter_type=INT, range=[0, 1]), RangeParameter(name='x17', parameter_type=INT, range=[0, 1]), RangeParameter(name='x18', parameter_type=INT, range=[0, 1]), RangeParameter(name='x19', parameter_type=INT, range=[0, 1])], parameter_constraints=[ParameterConstraint(47*x0 + 22*x1 + 82*x2 + 19*x3 + 85*x4 + 15*x5 + 89*x6 + 74*x7 + 26*x8 + 11*x9 + 86*x10 + 81*x11 + 16*x12 + 35*x13 + 60*x14 + 30*x15 + 28*x16 + 94*x17 + 21*x18 + 38*x19 <= 479), ParameterConstraint(39*x0 + 24*x1 + 60*x2 + 78*x3 + 97*x4 + 97*x5 + 96*x6 + 23*x7 + 19*x8 + 17*x9 + 73*x10 + 71*x11 + 32*x12 + 67*x13 + 11*x14 + 10*x15 + 70*x16 + 91*x17 + 18*x18 + 98*x19 <= 545)])\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration: 50, HV: 345992.0\n",
"Iteration: 51, HV: 345992.0\n",
"Iteration: 52, HV: 345992.0\n",
"Iteration: 53, HV: 345992.0\n",
"Iteration: 54, HV: 381220.0\n",
"Iteration: 55, HV: 381220.0\n",
"Iteration: 56, HV: 381220.0\n",
"Iteration: 57, HV: 381220.0\n",
"Iteration: 58, HV: 381220.0\n",
"Iteration: 59, HV: 381220.0\n",
"Iteration: 60, HV: 381220.0\n",
"Iteration: 61, HV: 381220.0\n",
"Iteration: 62, HV: 381220.0\n",
"Iteration: 63, HV: 381220.0\n",
"Iteration: 64, HV: 381220.0\n",
"Iteration: 65, HV: 381220.0\n",
"Iteration: 66, HV: 381220.0\n",
"Iteration: 67, HV: 381220.0\n",
"Iteration: 68, HV: 381220.0\n",
"Iteration: 69, HV: 381220.0\n",
"Iteration: 70, HV: 381220.0\n",
"Iteration: 71, HV: 381220.0\n",
"Iteration: 72, HV: 381220.0\n",
"Iteration: 73, HV: 381220.0\n",
"Iteration: 74, HV: 381220.0\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[WARNING 01-21 11:50:32] ax.modelbridge.transforms.int_to_float: Unable to round {'x0': 1, 'x1': 1, 'x2': 1, 'x3': 1, 'x4': 0, 'x5': 1, 'x6': 2, 'x7': 2, 'x8': 1, 'x9': 2, 'x10': 1, 'x11': 2, 'x12': 1, 'x13': 2, 'x14': 0, 'x15': 0, 'x16': 0, 'x17': 1, 'x18': 0, 'x19': 1}to meet constraints of SearchSpace(parameters=[RangeParameter(name='x0', parameter_type=INT, range=[0, 1]), RangeParameter(name='x1', parameter_type=INT, range=[0, 1]), RangeParameter(name='x2', parameter_type=INT, range=[0, 1]), RangeParameter(name='x3', parameter_type=INT, range=[0, 1]), RangeParameter(name='x4', parameter_type=INT, range=[0, 1]), RangeParameter(name='x5', parameter_type=INT, range=[0, 1]), RangeParameter(name='x6', parameter_type=INT, range=[0, 1]), RangeParameter(name='x7', parameter_type=INT, range=[0, 1]), RangeParameter(name='x8', parameter_type=INT, range=[0, 1]), RangeParameter(name='x9', parameter_type=INT, range=[0, 1]), RangeParameter(name='x10', parameter_type=INT, range=[0, 1]), RangeParameter(name='x11', parameter_type=INT, range=[0, 1]), RangeParameter(name='x12', parameter_type=INT, range=[0, 1]), RangeParameter(name='x13', parameter_type=INT, range=[0, 1]), RangeParameter(name='x14', parameter_type=INT, range=[0, 1]), RangeParameter(name='x15', parameter_type=INT, range=[0, 1]), RangeParameter(name='x16', parameter_type=INT, range=[0, 1]), RangeParameter(name='x17', parameter_type=INT, range=[0, 1]), RangeParameter(name='x18', parameter_type=INT, range=[0, 1]), RangeParameter(name='x19', parameter_type=INT, range=[0, 1])], parameter_constraints=[ParameterConstraint(47*x0 + 22*x1 + 82*x2 + 19*x3 + 85*x4 + 15*x5 + 89*x6 + 74*x7 + 26*x8 + 11*x9 + 86*x10 + 81*x11 + 16*x12 + 35*x13 + 60*x14 + 30*x15 + 28*x16 + 94*x17 + 21*x18 + 38*x19 <= 479), ParameterConstraint(39*x0 + 24*x1 + 60*x2 + 78*x3 + 97*x4 + 97*x5 + 96*x6 + 23*x7 + 19*x8 + 17*x9 + 73*x10 + 71*x11 + 32*x12 + 67*x13 + 11*x14 + 10*x15 + 70*x16 + 91*x17 + 18*x18 + 98*x19 <= 545)])\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration: 75, HV: 381220.0\n",
"Iteration: 76, HV: 381220.0\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[WARNING 01-21 11:50:38] ax.modelbridge.transforms.int_to_float: Unable to round {'x0': 0, 'x1': 0, 'x2': 0, 'x3': 1, 'x4': 1, 'x5': 1, 'x6': 1, 'x7': 2, 'x8': 1, 'x9': 2, 'x10': 1, 'x11': 1, 'x12': 0, 'x13': 1, 'x14': 1, 'x15': 2, 'x16': 0, 'x17': 1, 'x18': 1, 'x19': 0}to meet constraints of SearchSpace(parameters=[RangeParameter(name='x0', parameter_type=INT, range=[0, 1]), RangeParameter(name='x1', parameter_type=INT, range=[0, 1]), RangeParameter(name='x2', parameter_type=INT, range=[0, 1]), RangeParameter(name='x3', parameter_type=INT, range=[0, 1]), RangeParameter(name='x4', parameter_type=INT, range=[0, 1]), RangeParameter(name='x5', parameter_type=INT, range=[0, 1]), RangeParameter(name='x6', parameter_type=INT, range=[0, 1]), RangeParameter(name='x7', parameter_type=INT, range=[0, 1]), RangeParameter(name='x8', parameter_type=INT, range=[0, 1]), RangeParameter(name='x9', parameter_type=INT, range=[0, 1]), RangeParameter(name='x10', parameter_type=INT, range=[0, 1]), RangeParameter(name='x11', parameter_type=INT, range=[0, 1]), RangeParameter(name='x12', parameter_type=INT, range=[0, 1]), RangeParameter(name='x13', parameter_type=INT, range=[0, 1]), RangeParameter(name='x14', parameter_type=INT, range=[0, 1]), RangeParameter(name='x15', parameter_type=INT, range=[0, 1]), RangeParameter(name='x16', parameter_type=INT, range=[0, 1]), RangeParameter(name='x17', parameter_type=INT, range=[0, 1]), RangeParameter(name='x18', parameter_type=INT, range=[0, 1]), RangeParameter(name='x19', parameter_type=INT, range=[0, 1])], parameter_constraints=[ParameterConstraint(47*x0 + 22*x1 + 82*x2 + 19*x3 + 85*x4 + 15*x5 + 89*x6 + 74*x7 + 26*x8 + 11*x9 + 86*x10 + 81*x11 + 16*x12 + 35*x13 + 60*x14 + 30*x15 + 28*x16 + 94*x17 + 21*x18 + 38*x19 <= 479), ParameterConstraint(39*x0 + 24*x1 + 60*x2 + 78*x3 + 97*x4 + 97*x5 + 96*x6 + 23*x7 + 19*x8 + 17*x9 + 73*x10 + 71*x11 + 32*x12 + 67*x13 + 11*x14 + 10*x15 + 70*x16 + 91*x17 + 18*x18 + 98*x19 <= 545)])\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration: 77, HV: 381220.0\n",
"Iteration: 78, HV: 381220.0\n",
"Iteration: 79, HV: 381220.0\n",
"Iteration: 80, HV: 381220.0\n",
"Iteration: 81, HV: 381220.0\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[WARNING 01-21 11:50:52] ax.modelbridge.transforms.int_to_float: Unable to round {'x0': 2, 'x1': 0, 'x2': 1, 'x3': 0, 'x4': 1, 'x5': 1, 'x6': 0, 'x7': 0, 'x8': 2, 'x9': -1, 'x10': 0, 'x11': 1, 'x12': 1, 'x13': 2, 'x14': 1, 'x15': 1, 'x16': 1, 'x17': 1, 'x18': 1, 'x19': 2}to meet constraints of SearchSpace(parameters=[RangeParameter(name='x0', parameter_type=INT, range=[0, 1]), RangeParameter(name='x1', parameter_type=INT, range=[0, 1]), RangeParameter(name='x2', parameter_type=INT, range=[0, 1]), RangeParameter(name='x3', parameter_type=INT, range=[0, 1]), RangeParameter(name='x4', parameter_type=INT, range=[0, 1]), RangeParameter(name='x5', parameter_type=INT, range=[0, 1]), RangeParameter(name='x6', parameter_type=INT, range=[0, 1]), RangeParameter(name='x7', parameter_type=INT, range=[0, 1]), RangeParameter(name='x8', parameter_type=INT, range=[0, 1]), RangeParameter(name='x9', parameter_type=INT, range=[0, 1]), RangeParameter(name='x10', parameter_type=INT, range=[0, 1]), RangeParameter(name='x11', parameter_type=INT, range=[0, 1]), RangeParameter(name='x12', parameter_type=INT, range=[0, 1]), RangeParameter(name='x13', parameter_type=INT, range=[0, 1]), RangeParameter(name='x14', parameter_type=INT, range=[0, 1]), RangeParameter(name='x15', parameter_type=INT, range=[0, 1]), RangeParameter(name='x16', parameter_type=INT, range=[0, 1]), RangeParameter(name='x17', parameter_type=INT, range=[0, 1]), RangeParameter(name='x18', parameter_type=INT, range=[0, 1]), RangeParameter(name='x19', parameter_type=INT, range=[0, 1])], parameter_constraints=[ParameterConstraint(47*x0 + 22*x1 + 82*x2 + 19*x3 + 85*x4 + 15*x5 + 89*x6 + 74*x7 + 26*x8 + 11*x9 + 86*x10 + 81*x11 + 16*x12 + 35*x13 + 60*x14 + 30*x15 + 28*x16 + 94*x17 + 21*x18 + 38*x19 <= 479), ParameterConstraint(39*x0 + 24*x1 + 60*x2 + 78*x3 + 97*x4 + 97*x5 + 96*x6 + 23*x7 + 19*x8 + 17*x9 + 73*x10 + 71*x11 + 32*x12 + 67*x13 + 11*x14 + 10*x15 + 70*x16 + 91*x17 + 18*x18 + 98*x19 <= 545)])\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration: 82, HV: 381220.0\n",
"Iteration: 83, HV: 381220.0\n",
"Iteration: 84, HV: 381220.0\n",
"Iteration: 85, HV: 381220.0\n",
"Iteration: 86, HV: 381220.0\n",
"Iteration: 87, HV: 381220.0\n",
"Iteration: 88, HV: 381220.0\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[WARNING 01-21 11:51:13] ax.modelbridge.transforms.int_to_float: Unable to round {'x0': 1, 'x1': 0, 'x2': 1, 'x3': 0, 'x4': 2, 'x5': 0, 'x6': 1, 'x7': 1, 'x8': 0, 'x9': 0, 'x10': 2, 'x11': 2, 'x12': 0, 'x13': 0, 'x14': 0, 'x15': 2, 'x16': 0, 'x17': 0, 'x18': 1, 'x19': 0}to meet constraints of SearchSpace(parameters=[RangeParameter(name='x0', parameter_type=INT, range=[0, 1]), RangeParameter(name='x1', parameter_type=INT, range=[0, 1]), RangeParameter(name='x2', parameter_type=INT, range=[0, 1]), RangeParameter(name='x3', parameter_type=INT, range=[0, 1]), RangeParameter(name='x4', parameter_type=INT, range=[0, 1]), RangeParameter(name='x5', parameter_type=INT, range=[0, 1]), RangeParameter(name='x6', parameter_type=INT, range=[0, 1]), RangeParameter(name='x7', parameter_type=INT, range=[0, 1]), RangeParameter(name='x8', parameter_type=INT, range=[0, 1]), RangeParameter(name='x9', parameter_type=INT, range=[0, 1]), RangeParameter(name='x10', parameter_type=INT, range=[0, 1]), RangeParameter(name='x11', parameter_type=INT, range=[0, 1]), RangeParameter(name='x12', parameter_type=INT, range=[0, 1]), RangeParameter(name='x13', parameter_type=INT, range=[0, 1]), RangeParameter(name='x14', parameter_type=INT, range=[0, 1]), RangeParameter(name='x15', parameter_type=INT, range=[0, 1]), RangeParameter(name='x16', parameter_type=INT, range=[0, 1]), RangeParameter(name='x17', parameter_type=INT, range=[0, 1]), RangeParameter(name='x18', parameter_type=INT, range=[0, 1]), RangeParameter(name='x19', parameter_type=INT, range=[0, 1])], parameter_constraints=[ParameterConstraint(47*x0 + 22*x1 + 82*x2 + 19*x3 + 85*x4 + 15*x5 + 89*x6 + 74*x7 + 26*x8 + 11*x9 + 86*x10 + 81*x11 + 16*x12 + 35*x13 + 60*x14 + 30*x15 + 28*x16 + 94*x17 + 21*x18 + 38*x19 <= 479), ParameterConstraint(39*x0 + 24*x1 + 60*x2 + 78*x3 + 97*x4 + 97*x5 + 96*x6 + 23*x7 + 19*x8 + 17*x9 + 73*x10 + 71*x11 + 32*x12 + 67*x13 + 11*x14 + 10*x15 + 70*x16 + 91*x17 + 18*x18 + 98*x19 <= 545)])\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration: 89, HV: 381220.0\n",
"Iteration: 90, HV: 381220.0\n",
"Iteration: 91, HV: 381220.0\n",
"Iteration: 92, HV: 381220.0\n",
"Iteration: 93, HV: 381220.0\n",
"Iteration: 94, HV: 381220.0\n",
"Iteration: 95, HV: 381220.0\n",
"Iteration: 96, HV: 381220.0\n",
"Iteration: 97, HV: 381220.0\n",
"Iteration: 98, HV: 381220.0\n",
"Iteration: 99, HV: 381220.0\n",
"Iteration: 100, HV: 381220.0\n",
"Iteration: 101, HV: 381220.0\n",
"Iteration: 102, HV: 381220.0\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[WARNING 01-21 11:51:59] ax.modelbridge.transforms.int_to_float: Unable to round {'x0': 1, 'x1': 2, 'x2': 0, 'x3': 0, 'x4': 1, 'x5': 0, 'x6': 1, 'x7': 0, 'x8': 1, 'x9': 2, 'x10': 2, 'x11': 1, 'x12': 1, 'x13': 1, 'x14': 0, 'x15': 0, 'x16': 0, 'x17': 1, 'x18': 1, 'x19': 1}to meet constraints of SearchSpace(parameters=[RangeParameter(name='x0', parameter_type=INT, range=[0, 1]), RangeParameter(name='x1', parameter_type=INT, range=[0, 1]), RangeParameter(name='x2', parameter_type=INT, range=[0, 1]), RangeParameter(name='x3', parameter_type=INT, range=[0, 1]), RangeParameter(name='x4', parameter_type=INT, range=[0, 1]), RangeParameter(name='x5', parameter_type=INT, range=[0, 1]), RangeParameter(name='x6', parameter_type=INT, range=[0, 1]), RangeParameter(name='x7', parameter_type=INT, range=[0, 1]), RangeParameter(name='x8', parameter_type=INT, range=[0, 1]), RangeParameter(name='x9', parameter_type=INT, range=[0, 1]), RangeParameter(name='x10', parameter_type=INT, range=[0, 1]), RangeParameter(name='x11', parameter_type=INT, range=[0, 1]), RangeParameter(name='x12', parameter_type=INT, range=[0, 1]), RangeParameter(name='x13', parameter_type=INT, range=[0, 1]), RangeParameter(name='x14', parameter_type=INT, range=[0, 1]), RangeParameter(name='x15', parameter_type=INT, range=[0, 1]), RangeParameter(name='x16', parameter_type=INT, range=[0, 1]), RangeParameter(name='x17', parameter_type=INT, range=[0, 1]), RangeParameter(name='x18', parameter_type=INT, range=[0, 1]), RangeParameter(name='x19', parameter_type=INT, range=[0, 1])], parameter_constraints=[ParameterConstraint(47*x0 + 22*x1 + 82*x2 + 19*x3 + 85*x4 + 15*x5 + 89*x6 + 74*x7 + 26*x8 + 11*x9 + 86*x10 + 81*x11 + 16*x12 + 35*x13 + 60*x14 + 30*x15 + 28*x16 + 94*x17 + 21*x18 + 38*x19 <= 479), ParameterConstraint(39*x0 + 24*x1 + 60*x2 + 78*x3 + 97*x4 + 97*x5 + 96*x6 + 23*x7 + 19*x8 + 17*x9 + 73*x10 + 71*x11 + 32*x12 + 67*x13 + 11*x14 + 10*x15 + 70*x16 + 91*x17 + 18*x18 + 98*x19 <= 545)])\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration: 103, HV: 381220.0\n",
"Iteration: 104, HV: 381220.0\n",
"Iteration: 105, HV: 382462.0\n",
"Iteration: 106, HV: 382462.0\n",
"Iteration: 107, HV: 382462.0\n",
"Iteration: 108, HV: 382462.0\n",
"Iteration: 109, HV: 382792.0\n",
"Iteration: 110, HV: 382792.0\n",
"Iteration: 111, HV: 382918.0\n",
"Iteration: 112, HV: 382918.0\n",
"Iteration: 113, HV: 382918.0\n",
"Iteration: 114, HV: 382918.0\n",
"Iteration: 115, HV: 382918.0\n",
"Iteration: 116, HV: 382918.0\n",
"Iteration: 117, HV: 382918.0\n",
"Iteration: 118, HV: 382918.0\n",
"Iteration: 119, HV: 402502.0\n",
"Iteration: 120, HV: 402502.0\n",
"Iteration: 121, HV: 402502.0\n",
"Iteration: 122, HV: 402502.0\n",
"Iteration: 123, HV: 402502.0\n",
"Iteration: 124, HV: 402502.0\n",
"Iteration: 125, HV: 402502.0\n",
"Iteration: 126, HV: 402502.0\n",
"Iteration: 127, HV: 402502.0\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[WARNING 01-21 11:53:34] ax.modelbridge.transforms.int_to_float: Unable to round {'x0': 0, 'x1': 1, 'x2': 0, 'x3': 1, 'x4': 0, 'x5': 1, 'x6': -1, 'x7': 2, 'x8': -1, 'x9': 0, 'x10': 1, 'x11': 0, 'x12': 0, 'x13': 0, 'x14': 1, 'x15': 1, 'x16': 1, 'x17': 1, 'x18': 2, 'x19': 1}to meet constraints of SearchSpace(parameters=[RangeParameter(name='x0', parameter_type=INT, range=[0, 1]), RangeParameter(name='x1', parameter_type=INT, range=[0, 1]), RangeParameter(name='x2', parameter_type=INT, range=[0, 1]), RangeParameter(name='x3', parameter_type=INT, range=[0, 1]), RangeParameter(name='x4', parameter_type=INT, range=[0, 1]), RangeParameter(name='x5', parameter_type=INT, range=[0, 1]), RangeParameter(name='x6', parameter_type=INT, range=[0, 1]), RangeParameter(name='x7', parameter_type=INT, range=[0, 1]), RangeParameter(name='x8', parameter_type=INT, range=[0, 1]), RangeParameter(name='x9', parameter_type=INT, range=[0, 1]), RangeParameter(name='x10', parameter_type=INT, range=[0, 1]), RangeParameter(name='x11', parameter_type=INT, range=[0, 1]), RangeParameter(name='x12', parameter_type=INT, range=[0, 1]), RangeParameter(name='x13', parameter_type=INT, range=[0, 1]), RangeParameter(name='x14', parameter_type=INT, range=[0, 1]), RangeParameter(name='x15', parameter_type=INT, range=[0, 1]), RangeParameter(name='x16', parameter_type=INT, range=[0, 1]), RangeParameter(name='x17', parameter_type=INT, range=[0, 1]), RangeParameter(name='x18', parameter_type=INT, range=[0, 1]), RangeParameter(name='x19', parameter_type=INT, range=[0, 1])], parameter_constraints=[ParameterConstraint(47*x0 + 22*x1 + 82*x2 + 19*x3 + 85*x4 + 15*x5 + 89*x6 + 74*x7 + 26*x8 + 11*x9 + 86*x10 + 81*x11 + 16*x12 + 35*x13 + 60*x14 + 30*x15 + 28*x16 + 94*x17 + 21*x18 + 38*x19 <= 479), ParameterConstraint(39*x0 + 24*x1 + 60*x2 + 78*x3 + 97*x4 + 97*x5 + 96*x6 + 23*x7 + 19*x8 + 17*x9 + 73*x10 + 71*x11 + 32*x12 + 67*x13 + 11*x14 + 10*x15 + 70*x16 + 91*x17 + 18*x18 + 98*x19 <= 545)])\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration: 128, HV: 402502.0\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[WARNING 01-21 11:53:35] ax.modelbridge.transforms.int_to_float: Unable to round {'x0': 0, 'x1': 1, 'x2': 0, 'x3': 1, 'x4': 0, 'x5': 1, 'x6': -1, 'x7': 2, 'x8': -1, 'x9': 0, 'x10': 1, 'x11': 0, 'x12': 0, 'x13': 0, 'x14': 1, 'x15': 1, 'x16': 1, 'x17': 1, 'x18': 2, 'x19': 1}to meet constraints of SearchSpace(parameters=[RangeParameter(name='x0', parameter_type=INT, range=[0, 1]), RangeParameter(name='x1', parameter_type=INT, range=[0, 1]), RangeParameter(name='x2', parameter_type=INT, range=[0, 1]), RangeParameter(name='x3', parameter_type=INT, range=[0, 1]), RangeParameter(name='x4', parameter_type=INT, range=[0, 1]), RangeParameter(name='x5', parameter_type=INT, range=[0, 1]), RangeParameter(name='x6', parameter_type=INT, range=[0, 1]), RangeParameter(name='x7', parameter_type=INT, range=[0, 1]), RangeParameter(name='x8', parameter_type=INT, range=[0, 1]), RangeParameter(name='x9', parameter_type=INT, range=[0, 1]), RangeParameter(name='x10', parameter_type=INT, range=[0, 1]), RangeParameter(name='x11', parameter_type=INT, range=[0, 1]), RangeParameter(name='x12', parameter_type=INT, range=[0, 1]), RangeParameter(name='x13', parameter_type=INT, range=[0, 1]), RangeParameter(name='x14', parameter_type=INT, range=[0, 1]), RangeParameter(name='x15', parameter_type=INT, range=[0, 1]), RangeParameter(name='x16', parameter_type=INT, range=[0, 1]), RangeParameter(name='x17', parameter_type=INT, range=[0, 1]), RangeParameter(name='x18', parameter_type=INT, range=[0, 1]), RangeParameter(name='x19', parameter_type=INT, range=[0, 1])], parameter_constraints=[ParameterConstraint(47*x0 + 22*x1 + 82*x2 + 19*x3 + 85*x4 + 15*x5 + 89*x6 + 74*x7 + 26*x8 + 11*x9 + 86*x10 + 81*x11 + 16*x12 + 35*x13 + 60*x14 + 30*x15 + 28*x16 + 94*x17 + 21*x18 + 38*x19 <= 479), ParameterConstraint(39*x0 + 24*x1 + 60*x2 + 78*x3 + 97*x4 + 97*x5 + 96*x6 + 23*x7 + 19*x8 + 17*x9 + 73*x10 + 71*x11 + 32*x12 + 67*x13 + 11*x14 + 10*x15 + 70*x16 + 91*x17 + 18*x18 + 98*x19 <= 545)])\n",
"[INFO 01-21 11:53:35] ax.modelbridge.modelbridge_utils: Untransformed parameter -1 less than lower bound 0, clamping\n",
"[INFO 01-21 11:53:35] ax.modelbridge.modelbridge_utils: Untransformed parameter 2 greater than upper bound 1, clamping\n",
"[INFO 01-21 11:53:35] ax.modelbridge.modelbridge_utils: Untransformed parameter -1 less than lower bound 0, clamping\n",
"[INFO 01-21 11:53:35] ax.modelbridge.modelbridge_utils: Untransformed parameter 2 greater than upper bound 1, clamping\n",
"[INFO 01-21 11:53:39] ax.modelbridge.base: Leaving out out-of-design observations for arms: 139_0\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration: 129, HV: 402502.0\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-21 11:53:43] ax.modelbridge.base: Leaving out out-of-design observations for arms: 139_0\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration: 130, HV: 402502.0\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-21 11:53:47] ax.modelbridge.base: Leaving out out-of-design observations for arms: 139_0\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration: 131, HV: 402502.0\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-21 11:53:51] ax.modelbridge.base: Leaving out out-of-design observations for arms: 139_0\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration: 132, HV: 402502.0\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-21 11:53:56] ax.modelbridge.base: Leaving out out-of-design observations for arms: 139_0\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration: 133, HV: 402502.0\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-21 11:54:00] ax.modelbridge.base: Leaving out out-of-design observations for arms: 139_0\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration: 134, HV: 402502.0\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-21 11:54:04] ax.modelbridge.base: Leaving out out-of-design observations for arms: 139_0\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration: 135, HV: 402502.0\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-21 11:54:09] ax.modelbridge.base: Leaving out out-of-design observations for arms: 139_0\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration: 136, HV: 402502.0\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-21 11:54:14] ax.modelbridge.base: Leaving out out-of-design observations for arms: 139_0\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration: 137, HV: 402502.0\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-21 11:54:18] ax.modelbridge.base: Leaving out out-of-design observations for arms: 139_0\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration: 138, HV: 402502.0\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-21 11:54:23] ax.modelbridge.base: Leaving out out-of-design observations for arms: 139_0\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration: 139, HV: 402502.0\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-21 11:54:27] ax.modelbridge.base: Leaving out out-of-design observations for arms: 139_0\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration: 140, HV: 402502.0\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-21 11:54:32] ax.modelbridge.base: Leaving out out-of-design observations for arms: 139_0\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration: 141, HV: 402502.0\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-21 11:54:37] ax.modelbridge.base: Leaving out out-of-design observations for arms: 139_0\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration: 142, HV: 402502.0\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-21 11:54:41] ax.modelbridge.base: Leaving out out-of-design observations for arms: 139_0\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration: 143, HV: 402502.0\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-21 11:54:46] ax.modelbridge.base: Leaving out out-of-design observations for arms: 139_0\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration: 144, HV: 402502.0\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-21 11:54:50] ax.modelbridge.base: Leaving out out-of-design observations for arms: 139_0\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration: 145, HV: 402502.0\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-21 11:54:55] ax.modelbridge.base: Leaving out out-of-design observations for arms: 139_0\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration: 146, HV: 402502.0\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-21 11:55:00] ax.modelbridge.base: Leaving out out-of-design observations for arms: 139_0\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration: 147, HV: 402502.0\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-21 11:55:05] ax.modelbridge.base: Leaving out out-of-design observations for arms: 139_0\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration: 148, HV: 402502.0\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-21 11:55:09] ax.modelbridge.base: Leaving out out-of-design observations for arms: 139_0\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration: 149, HV: 402859.0\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-21 11:55:14] ax.modelbridge.base: Leaving out out-of-design observations for arms: 139_0\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration: 150, HV: 402859.0\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-21 11:55:19] ax.modelbridge.base: Leaving out out-of-design observations for arms: 139_0\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration: 151, HV: 402859.0\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-21 11:55:24] ax.modelbridge.base: Leaving out out-of-design observations for arms: 139_0\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration: 152, HV: 402859.0\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-21 11:55:29] ax.modelbridge.base: Leaving out out-of-design observations for arms: 139_0\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration: 153, HV: 402859.0\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-21 11:55:34] ax.modelbridge.base: Leaving out out-of-design observations for arms: 139_0\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration: 154, HV: 402859.0\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-21 11:55:39] ax.modelbridge.base: Leaving out out-of-design observations for arms: 139_0\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration: 155, HV: 403486.0\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-21 11:55:45] ax.modelbridge.base: Leaving out out-of-design observations for arms: 139_0\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration: 156, HV: 403486.0\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-21 11:55:50] ax.modelbridge.base: Leaving out out-of-design observations for arms: 139_0\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration: 157, HV: 403486.0\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-21 11:55:55] ax.modelbridge.base: Leaving out out-of-design observations for arms: 139_0\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration: 158, HV: 403486.0\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-21 11:56:00] ax.modelbridge.base: Leaving out out-of-design observations for arms: 139_0\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration: 159, HV: 403486.0\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-21 11:56:05] ax.modelbridge.base: Leaving out out-of-design observations for arms: 139_0\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration: 160, HV: 403486.0\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-21 11:56:10] ax.modelbridge.base: Leaving out out-of-design observations for arms: 139_0\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration: 161, HV: 403486.0\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-21 11:56:16] ax.modelbridge.base: Leaving out out-of-design observations for arms: 139_0\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration: 162, HV: 403486.0\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-21 11:56:21] ax.modelbridge.base: Leaving out out-of-design observations for arms: 139_0\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration: 163, HV: 403486.0\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-21 11:56:26] ax.modelbridge.base: Leaving out out-of-design observations for arms: 139_0\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration: 164, HV: 403486.0\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-21 11:56:32] ax.modelbridge.base: Leaving out out-of-design observations for arms: 139_0\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration: 165, HV: 403486.0\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-21 11:56:37] ax.modelbridge.base: Leaving out out-of-design observations for arms: 139_0\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration: 166, HV: 403486.0\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-21 11:56:43] ax.modelbridge.base: Leaving out out-of-design observations for arms: 139_0\n",
"[WARNING 01-21 11:56:43] ax.modelbridge.transforms.int_to_float: Unable to round {'x0': 1, 'x1': 0, 'x2': 0, 'x3': 0, 'x4': 2, 'x5': 1, 'x6': 0, 'x7': 2, 'x8': 1, 'x9': 2, 'x10': 1, 'x11': 1, 'x12': 1, 'x13': 1, 'x14': 1, 'x15': 0, 'x16': 1, 'x17': 1, 'x18': 2, 'x19': 1}to meet constraints of SearchSpace(parameters=[RangeParameter(name='x0', parameter_type=INT, range=[0, 1]), RangeParameter(name='x1', parameter_type=INT, range=[0, 1]), RangeParameter(name='x2', parameter_type=INT, range=[0, 1]), RangeParameter(name='x3', parameter_type=INT, range=[0, 1]), RangeParameter(name='x4', parameter_type=INT, range=[0, 1]), RangeParameter(name='x5', parameter_type=INT, range=[0, 1]), RangeParameter(name='x6', parameter_type=INT, range=[0, 1]), RangeParameter(name='x7', parameter_type=INT, range=[0, 1]), RangeParameter(name='x8', parameter_type=INT, range=[0, 1]), RangeParameter(name='x9', parameter_type=INT, range=[0, 1]), RangeParameter(name='x10', parameter_type=INT, range=[0, 1]), RangeParameter(name='x11', parameter_type=INT, range=[0, 1]), RangeParameter(name='x12', parameter_type=INT, range=[0, 1]), RangeParameter(name='x13', parameter_type=INT, range=[0, 1]), RangeParameter(name='x14', parameter_type=INT, range=[0, 1]), RangeParameter(name='x15', parameter_type=INT, range=[0, 1]), RangeParameter(name='x16', parameter_type=INT, range=[0, 1]), RangeParameter(name='x17', parameter_type=INT, range=[0, 1]), RangeParameter(name='x18', parameter_type=INT, range=[0, 1]), RangeParameter(name='x19', parameter_type=INT, range=[0, 1])], parameter_constraints=[ParameterConstraint(47*x0 + 22*x1 + 82*x2 + 19*x3 + 85*x4 + 15*x5 + 89*x6 + 74*x7 + 26*x8 + 11*x9 + 86*x10 + 81*x11 + 16*x12 + 35*x13 + 60*x14 + 30*x15 + 28*x16 + 94*x17 + 21*x18 + 38*x19 <= 479), ParameterConstraint(39*x0 + 24*x1 + 60*x2 + 78*x3 + 97*x4 + 97*x5 + 96*x6 + 23*x7 + 19*x8 + 17*x9 + 73*x10 + 71*x11 + 32*x12 + 67*x13 + 11*x14 + 10*x15 + 70*x16 + 91*x17 + 18*x18 + 98*x19 <= 545)])\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration: 167, HV: 403486.0\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-21 11:56:48] ax.modelbridge.base: Leaving out out-of-design observations for arms: 139_0\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration: 168, HV: 403486.0\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-21 11:56:54] ax.modelbridge.base: Leaving out out-of-design observations for arms: 139_0\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration: 169, HV: 403486.0\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-21 11:56:59] ax.modelbridge.base: Leaving out out-of-design observations for arms: 139_0\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration: 170, HV: 403486.0\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-21 11:57:05] ax.modelbridge.base: Leaving out out-of-design observations for arms: 139_0\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration: 171, HV: 403486.0\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-21 11:57:11] ax.modelbridge.base: Leaving out out-of-design observations for arms: 139_0\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration: 172, HV: 403486.0\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-21 11:57:17] ax.modelbridge.base: Leaving out out-of-design observations for arms: 139_0\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration: 173, HV: 403486.0\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-21 11:57:22] ax.modelbridge.base: Leaving out out-of-design observations for arms: 139_0\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration: 174, HV: 403486.0\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-21 11:57:28] ax.modelbridge.base: Leaving out out-of-design observations for arms: 139_0\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration: 175, HV: 403486.0\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-21 11:57:34] ax.modelbridge.base: Leaving out out-of-design observations for arms: 139_0\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration: 176, HV: 403486.0\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-21 11:57:39] ax.modelbridge.base: Leaving out out-of-design observations for arms: 139_0\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration: 177, HV: 403486.0\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-21 11:57:45] ax.modelbridge.base: Leaving out out-of-design observations for arms: 139_0\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration: 178, HV: 403486.0\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-21 11:57:51] ax.modelbridge.base: Leaving out out-of-design observations for arms: 139_0\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration: 179, HV: 403486.0\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-21 11:57:57] ax.modelbridge.base: Leaving out out-of-design observations for arms: 139_0\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration: 180, HV: 403486.0\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-21 11:58:02] ax.modelbridge.base: Leaving out out-of-design observations for arms: 139_0\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration: 181, HV: 403486.0\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-21 11:58:08] ax.modelbridge.base: Leaving out out-of-design observations for arms: 139_0\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration: 182, HV: 403486.0\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-21 11:58:14] ax.modelbridge.base: Leaving out out-of-design observations for arms: 139_0\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration: 183, HV: 403486.0\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-21 11:58:20] ax.modelbridge.base: Leaving out out-of-design observations for arms: 139_0\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration: 184, HV: 403486.0\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-21 11:58:26] ax.modelbridge.base: Leaving out out-of-design observations for arms: 139_0\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration: 185, HV: 403486.0\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-21 11:58:32] ax.modelbridge.base: Leaving out out-of-design observations for arms: 139_0\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration: 186, HV: 403486.0\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-21 11:58:38] ax.modelbridge.base: Leaving out out-of-design observations for arms: 139_0\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration: 187, HV: 403486.0\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-21 11:58:44] ax.modelbridge.base: Leaving out out-of-design observations for arms: 139_0\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration: 188, HV: 403486.0\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-21 11:58:50] ax.modelbridge.base: Leaving out out-of-design observations for arms: 139_0\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration: 189, HV: 403486.0\n"
]
}
],
"source": [
"sobol_model = Models.SOBOL(\n",
" experiment=sobol_experiment, \n",
" data=sobol_data,\n",
")\n",
"sobol_hv_list = []\n",
"for i in range(N_BATCH):\n",
" generator_run = sobol_model.gen(1)\n",
" trial = sobol_experiment.new_trial(generator_run=generator_run)\n",
" trial.run()\n",
" exp_df = exp_to_df(sobol_experiment)\n",
" outcomes = np.array(exp_df[['a', 'b']], dtype=np.double)\n",
" # Fit a GP-based model in order to calculate hypervolume.\n",
" # We will not use this model to generate new points.\n",
" dummy_model = get_MOO_EHVI(\n",
" experiment=sobol_experiment, \n",
" data=sobol_experiment.fetch_data(),\n",
" )\n",
" try:\n",
" hv = dummy_model.observed_hypervolume()\n",
" except:\n",
" hv = 0\n",
" print(\"Failed to compute hv\")\n",
" sobol_hv_list.append(hv)\n",
" print(f\"Iteration: {i}, HV: {hv}\")\n",
"\n",
"sobol_outcomes = np.array(exp_to_df(sobol_experiment)[['a', 'b']], dtype=np.double)"
]
},
{
"cell_type": "markdown",
"id": "elementary-narrative",
"metadata": {},
"source": [
"Solve the knapsack problem using EHVI."
]
},
{
"cell_type": "code",
"execution_count": 21,
"id": "extensive-shell",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"[WARNING 01-21 12:06:19] ax.modelbridge.transforms.int_to_float: Unable to round {'x0': 1, 'x1': 1, 'x2': 1, 'x3': 2, 'x4': 1, 'x5': 1, 'x6': 1, 'x7': 1, 'x8': 1, 'x9': 1, 'x10': 1, 'x11': 0, 'x12': 0, 'x13': 1, 'x14': 1, 'x15': 0, 'x16': 1, 'x17': 1, 'x18': 1, 'x19': 2}to meet constraints of SearchSpace(parameters=[RangeParameter(name='x0', parameter_type=INT, range=[0, 1]), RangeParameter(name='x1', parameter_type=INT, range=[0, 1]), RangeParameter(name='x2', parameter_type=INT, range=[0, 1]), RangeParameter(name='x3', parameter_type=INT, range=[0, 1]), RangeParameter(name='x4', parameter_type=INT, range=[0, 1]), RangeParameter(name='x5', parameter_type=INT, range=[0, 1]), RangeParameter(name='x6', parameter_type=INT, range=[0, 1]), RangeParameter(name='x7', parameter_type=INT, range=[0, 1]), RangeParameter(name='x8', parameter_type=INT, range=[0, 1]), RangeParameter(name='x9', parameter_type=INT, range=[0, 1]), RangeParameter(name='x10', parameter_type=INT, range=[0, 1]), RangeParameter(name='x11', parameter_type=INT, range=[0, 1]), RangeParameter(name='x12', parameter_type=INT, range=[0, 1]), RangeParameter(name='x13', parameter_type=INT, range=[0, 1]), RangeParameter(name='x14', parameter_type=INT, range=[0, 1]), RangeParameter(name='x15', parameter_type=INT, range=[0, 1]), RangeParameter(name='x16', parameter_type=INT, range=[0, 1]), RangeParameter(name='x17', parameter_type=INT, range=[0, 1]), RangeParameter(name='x18', parameter_type=INT, range=[0, 1]), RangeParameter(name='x19', parameter_type=INT, range=[0, 1])], parameter_constraints=[ParameterConstraint(47*x0 + 22*x1 + 82*x2 + 19*x3 + 85*x4 + 15*x5 + 89*x6 + 74*x7 + 26*x8 + 11*x9 + 86*x10 + 81*x11 + 16*x12 + 35*x13 + 60*x14 + 30*x15 + 28*x16 + 94*x17 + 21*x18 + 38*x19 <= 479), ParameterConstraint(39*x0 + 24*x1 + 60*x2 + 78*x3 + 97*x4 + 97*x5 + 96*x6 + 23*x7 + 19*x8 + 17*x9 + 73*x10 + 71*x11 + 32*x12 + 67*x13 + 11*x14 + 10*x15 + 70*x16 + 91*x17 + 18*x18 + 98*x19 <= 545)])\n"
]
}
],
"source": [
"ehvi_experiment = build_experiment()\n",
"ehvi_data = initialize_experiment(ehvi_experiment)"
]
},
{
"cell_type": "code",
"execution_count": 22,
"id": "registered-estimate",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/yanase/pfn/code/knapsack/venv/lib/python3.8/site-packages/ax/models/torch/utils.py:274: UserWarning:\n",
"\n",
"This overload of nonzero is deprecated:\n",
"\tnonzero()\n",
"Consider using one of the following signatures instead:\n",
"\tnonzero(*, bool as_tuple) (Triggered internally at /pytorch/torch/csrc/utils/python_arg_parser.cpp:882.)\n",
"\n",
"[WARNING 01-21 12:06:27] ax.modelbridge.transforms.int_to_float: Unable to round {'x0': 1, 'x1': -1, 'x2': -1, 'x3': 1, 'x4': 2, 'x5': 1, 'x6': 0, 'x7': -1, 'x8': 1, 'x9': 1, 'x10': -1, 'x11': 1, 'x12': 0, 'x13': 1, 'x14': 0, 'x15': 0, 'x16': 0, 'x17': -1, 'x18': 0, 'x19': -1}to meet constraints of SearchSpace(parameters=[RangeParameter(name='x0', parameter_type=INT, range=[0, 1]), RangeParameter(name='x1', parameter_type=INT, range=[0, 1]), RangeParameter(name='x2', parameter_type=INT, range=[0, 1]), RangeParameter(name='x3', parameter_type=INT, range=[0, 1]), RangeParameter(name='x4', parameter_type=INT, range=[0, 1]), RangeParameter(name='x5', parameter_type=INT, range=[0, 1]), RangeParameter(name='x6', parameter_type=INT, range=[0, 1]), RangeParameter(name='x7', parameter_type=INT, range=[0, 1]), RangeParameter(name='x8', parameter_type=INT, range=[0, 1]), RangeParameter(name='x9', parameter_type=INT, range=[0, 1]), RangeParameter(name='x10', parameter_type=INT, range=[0, 1]), RangeParameter(name='x11', parameter_type=INT, range=[0, 1]), RangeParameter(name='x12', parameter_type=INT, range=[0, 1]), RangeParameter(name='x13', parameter_type=INT, range=[0, 1]), RangeParameter(name='x14', parameter_type=INT, range=[0, 1]), RangeParameter(name='x15', parameter_type=INT, range=[0, 1]), RangeParameter(name='x16', parameter_type=INT, range=[0, 1]), RangeParameter(name='x17', parameter_type=INT, range=[0, 1]), RangeParameter(name='x18', parameter_type=INT, range=[0, 1]), RangeParameter(name='x19', parameter_type=INT, range=[0, 1])], parameter_constraints=[ParameterConstraint(47*x0 + 22*x1 + 82*x2 + 19*x3 + 85*x4 + 15*x5 + 89*x6 + 74*x7 + 26*x8 + 11*x9 + 86*x10 + 81*x11 + 16*x12 + 35*x13 + 60*x14 + 30*x15 + 28*x16 + 94*x17 + 21*x18 + 38*x19 <= 479), ParameterConstraint(39*x0 + 24*x1 + 60*x2 + 78*x3 + 97*x4 + 97*x5 + 96*x6 + 23*x7 + 19*x8 + 17*x9 + 73*x10 + 71*x11 + 32*x12 + 67*x13 + 11*x14 + 10*x15 + 70*x16 + 91*x17 + 18*x18 + 98*x19 <= 545)])\n",
"[WARNING 01-21 12:06:27] ax.modelbridge.transforms.int_to_float: Unable to round {'x0': 0, 'x1': 2, 'x2': -1, 'x3': 0, 'x4': 2, 'x5': -1, 'x6': 2, 'x7': -1, 'x8': 2, 'x9': 1, 'x10': 1, 'x11': 0, 'x12': 2, 'x13': -1, 'x14': 0, 'x15': -1, 'x16': 1, 'x17': 0, 'x18': -1, 'x19': 2}to meet constraints of SearchSpace(parameters=[RangeParameter(name='x0', parameter_type=INT, range=[0, 1]), RangeParameter(name='x1', parameter_type=INT, range=[0, 1]), RangeParameter(name='x2', parameter_type=INT, range=[0, 1]), RangeParameter(name='x3', parameter_type=INT, range=[0, 1]), RangeParameter(name='x4', parameter_type=INT, range=[0, 1]), RangeParameter(name='x5', parameter_type=INT, range=[0, 1]), RangeParameter(name='x6', parameter_type=INT, range=[0, 1]), RangeParameter(name='x7', parameter_type=INT, range=[0, 1]), RangeParameter(name='x8', parameter_type=INT, range=[0, 1]), RangeParameter(name='x9', parameter_type=INT, range=[0, 1]), RangeParameter(name='x10', parameter_type=INT, range=[0, 1]), RangeParameter(name='x11', parameter_type=INT, range=[0, 1]), RangeParameter(name='x12', parameter_type=INT, range=[0, 1]), RangeParameter(name='x13', parameter_type=INT, range=[0, 1]), RangeParameter(name='x14', parameter_type=INT, range=[0, 1]), RangeParameter(name='x15', parameter_type=INT, range=[0, 1]), RangeParameter(name='x16', parameter_type=INT, range=[0, 1]), RangeParameter(name='x17', parameter_type=INT, range=[0, 1]), RangeParameter(name='x18', parameter_type=INT, range=[0, 1]), RangeParameter(name='x19', parameter_type=INT, range=[0, 1])], parameter_constraints=[ParameterConstraint(47*x0 + 22*x1 + 82*x2 + 19*x3 + 85*x4 + 15*x5 + 89*x6 + 74*x7 + 26*x8 + 11*x9 + 86*x10 + 81*x11 + 16*x12 + 35*x13 + 60*x14 + 30*x15 + 28*x16 + 94*x17 + 21*x18 + 38*x19 <= 479), ParameterConstraint(39*x0 + 24*x1 + 60*x2 + 78*x3 + 97*x4 + 97*x5 + 96*x6 + 23*x7 + 19*x8 + 17*x9 + 73*x10 + 71*x11 + 32*x12 + 67*x13 + 11*x14 + 10*x15 + 70*x16 + 91*x17 + 18*x18 + 98*x19 <= 545)])\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration: 0, HV: 302191.0\n",
"Iteration: 1, HV: 302191.0\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[WARNING 01-21 12:06:37] ax.modelbridge.transforms.int_to_float: Unable to round {'x0': 2, 'x1': 2, 'x2': 2, 'x3': 0, 'x4': 1, 'x5': -1, 'x6': -1, 'x7': 0, 'x8': 2, 'x9': 0, 'x10': -1, 'x11': 0, 'x12': -1, 'x13': 2, 'x14': -1, 'x15': 1, 'x16': 2, 'x17': 1, 'x18': -1, 'x19': 2}to meet constraints of SearchSpace(parameters=[RangeParameter(name='x0', parameter_type=INT, range=[0, 1]), RangeParameter(name='x1', parameter_type=INT, range=[0, 1]), RangeParameter(name='x2', parameter_type=INT, range=[0, 1]), RangeParameter(name='x3', parameter_type=INT, range=[0, 1]), RangeParameter(name='x4', parameter_type=INT, range=[0, 1]), RangeParameter(name='x5', parameter_type=INT, range=[0, 1]), RangeParameter(name='x6', parameter_type=INT, range=[0, 1]), RangeParameter(name='x7', parameter_type=INT, range=[0, 1]), RangeParameter(name='x8', parameter_type=INT, range=[0, 1]), RangeParameter(name='x9', parameter_type=INT, range=[0, 1]), RangeParameter(name='x10', parameter_type=INT, range=[0, 1]), RangeParameter(name='x11', parameter_type=INT, range=[0, 1]), RangeParameter(name='x12', parameter_type=INT, range=[0, 1]), RangeParameter(name='x13', parameter_type=INT, range=[0, 1]), RangeParameter(name='x14', parameter_type=INT, range=[0, 1]), RangeParameter(name='x15', parameter_type=INT, range=[0, 1]), RangeParameter(name='x16', parameter_type=INT, range=[0, 1]), RangeParameter(name='x17', parameter_type=INT, range=[0, 1]), RangeParameter(name='x18', parameter_type=INT, range=[0, 1]), RangeParameter(name='x19', parameter_type=INT, range=[0, 1])], parameter_constraints=[ParameterConstraint(47*x0 + 22*x1 + 82*x2 + 19*x3 + 85*x4 + 15*x5 + 89*x6 + 74*x7 + 26*x8 + 11*x9 + 86*x10 + 81*x11 + 16*x12 + 35*x13 + 60*x14 + 30*x15 + 28*x16 + 94*x17 + 21*x18 + 38*x19 <= 479), ParameterConstraint(39*x0 + 24*x1 + 60*x2 + 78*x3 + 97*x4 + 97*x5 + 96*x6 + 23*x7 + 19*x8 + 17*x9 + 73*x10 + 71*x11 + 32*x12 + 67*x13 + 11*x14 + 10*x15 + 70*x16 + 91*x17 + 18*x18 + 98*x19 <= 545)])\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration: 2, HV: 302191.0\n",
"Iteration: 3, HV: 302191.0\n",
"Iteration: 4, HV: 302191.0\n",
"Iteration: 5, HV: 302191.0\n",
"Iteration: 6, HV: 302191.0\n",
"Iteration: 7, HV: 302191.0\n",
"Iteration: 8, HV: 302191.0\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[WARNING 01-21 12:07:14] ax.modelbridge.transforms.int_to_float: Unable to round {'x0': 1, 'x1': 0, 'x2': 0, 'x3': 0, 'x4': 1, 'x5': 1, 'x6': 0, 'x7': 1, 'x8': 1, 'x9': -1, 'x10': 0, 'x11': 1, 'x12': 2, 'x13': 2, 'x14': -1, 'x15': 1, 'x16': 0, 'x17': 1, 'x18': 1, 'x19': -1}to meet constraints of SearchSpace(parameters=[RangeParameter(name='x0', parameter_type=INT, range=[0, 1]), RangeParameter(name='x1', parameter_type=INT, range=[0, 1]), RangeParameter(name='x2', parameter_type=INT, range=[0, 1]), RangeParameter(name='x3', parameter_type=INT, range=[0, 1]), RangeParameter(name='x4', parameter_type=INT, range=[0, 1]), RangeParameter(name='x5', parameter_type=INT, range=[0, 1]), RangeParameter(name='x6', parameter_type=INT, range=[0, 1]), RangeParameter(name='x7', parameter_type=INT, range=[0, 1]), RangeParameter(name='x8', parameter_type=INT, range=[0, 1]), RangeParameter(name='x9', parameter_type=INT, range=[0, 1]), RangeParameter(name='x10', parameter_type=INT, range=[0, 1]), RangeParameter(name='x11', parameter_type=INT, range=[0, 1]), RangeParameter(name='x12', parameter_type=INT, range=[0, 1]), RangeParameter(name='x13', parameter_type=INT, range=[0, 1]), RangeParameter(name='x14', parameter_type=INT, range=[0, 1]), RangeParameter(name='x15', parameter_type=INT, range=[0, 1]), RangeParameter(name='x16', parameter_type=INT, range=[0, 1]), RangeParameter(name='x17', parameter_type=INT, range=[0, 1]), RangeParameter(name='x18', parameter_type=INT, range=[0, 1]), RangeParameter(name='x19', parameter_type=INT, range=[0, 1])], parameter_constraints=[ParameterConstraint(47*x0 + 22*x1 + 82*x2 + 19*x3 + 85*x4 + 15*x5 + 89*x6 + 74*x7 + 26*x8 + 11*x9 + 86*x10 + 81*x11 + 16*x12 + 35*x13 + 60*x14 + 30*x15 + 28*x16 + 94*x17 + 21*x18 + 38*x19 <= 479), ParameterConstraint(39*x0 + 24*x1 + 60*x2 + 78*x3 + 97*x4 + 97*x5 + 96*x6 + 23*x7 + 19*x8 + 17*x9 + 73*x10 + 71*x11 + 32*x12 + 67*x13 + 11*x14 + 10*x15 + 70*x16 + 91*x17 + 18*x18 + 98*x19 <= 545)])\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration: 9, HV: 302191.0\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[WARNING 01-21 12:07:19] ax.modelbridge.transforms.int_to_float: Unable to round {'x0': 0, 'x1': 0, 'x2': 1, 'x3': 2, 'x4': 0, 'x5': 0, 'x6': 0, 'x7': 1, 'x8': 0, 'x9': 2, 'x10': 2, 'x11': -1, 'x12': -1, 'x13': 0, 'x14': -1, 'x15': -1, 'x16': 1, 'x17': 2, 'x18': -1, 'x19': 0}to meet constraints of SearchSpace(parameters=[RangeParameter(name='x0', parameter_type=INT, range=[0, 1]), RangeParameter(name='x1', parameter_type=INT, range=[0, 1]), RangeParameter(name='x2', parameter_type=INT, range=[0, 1]), RangeParameter(name='x3', parameter_type=INT, range=[0, 1]), RangeParameter(name='x4', parameter_type=INT, range=[0, 1]), RangeParameter(name='x5', parameter_type=INT, range=[0, 1]), RangeParameter(name='x6', parameter_type=INT, range=[0, 1]), RangeParameter(name='x7', parameter_type=INT, range=[0, 1]), RangeParameter(name='x8', parameter_type=INT, range=[0, 1]), RangeParameter(name='x9', parameter_type=INT, range=[0, 1]), RangeParameter(name='x10', parameter_type=INT, range=[0, 1]), RangeParameter(name='x11', parameter_type=INT, range=[0, 1]), RangeParameter(name='x12', parameter_type=INT, range=[0, 1]), RangeParameter(name='x13', parameter_type=INT, range=[0, 1]), RangeParameter(name='x14', parameter_type=INT, range=[0, 1]), RangeParameter(name='x15', parameter_type=INT, range=[0, 1]), RangeParameter(name='x16', parameter_type=INT, range=[0, 1]), RangeParameter(name='x17', parameter_type=INT, range=[0, 1]), RangeParameter(name='x18', parameter_type=INT, range=[0, 1]), RangeParameter(name='x19', parameter_type=INT, range=[0, 1])], parameter_constraints=[ParameterConstraint(47*x0 + 22*x1 + 82*x2 + 19*x3 + 85*x4 + 15*x5 + 89*x6 + 74*x7 + 26*x8 + 11*x9 + 86*x10 + 81*x11 + 16*x12 + 35*x13 + 60*x14 + 30*x15 + 28*x16 + 94*x17 + 21*x18 + 38*x19 <= 479), ParameterConstraint(39*x0 + 24*x1 + 60*x2 + 78*x3 + 97*x4 + 97*x5 + 96*x6 + 23*x7 + 19*x8 + 17*x9 + 73*x10 + 71*x11 + 32*x12 + 67*x13 + 11*x14 + 10*x15 + 70*x16 + 91*x17 + 18*x18 + 98*x19 <= 545)])\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration: 10, HV: 302191.0\n",
"Iteration: 11, HV: 302191.0\n",
"Iteration: 12, HV: 302191.0\n",
"Iteration: 13, HV: 302191.0\n",
"Iteration: 14, HV: 302191.0\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[WARNING 01-21 12:07:48] ax.modelbridge.transforms.int_to_float: Unable to round {'x0': 1, 'x1': 0, 'x2': 1, 'x3': 2, 'x4': 0, 'x5': 0, 'x6': 1, 'x7': 0, 'x8': 0, 'x9': 1, 'x10': 0, 'x11': 2, 'x12': 1, 'x13': 1, 'x14': 0, 'x15': 1, 'x16': 0, 'x17': -1, 'x18': 0, 'x19': 1}to meet constraints of SearchSpace(parameters=[RangeParameter(name='x0', parameter_type=INT, range=[0, 1]), RangeParameter(name='x1', parameter_type=INT, range=[0, 1]), RangeParameter(name='x2', parameter_type=INT, range=[0, 1]), RangeParameter(name='x3', parameter_type=INT, range=[0, 1]), RangeParameter(name='x4', parameter_type=INT, range=[0, 1]), RangeParameter(name='x5', parameter_type=INT, range=[0, 1]), RangeParameter(name='x6', parameter_type=INT, range=[0, 1]), RangeParameter(name='x7', parameter_type=INT, range=[0, 1]), RangeParameter(name='x8', parameter_type=INT, range=[0, 1]), RangeParameter(name='x9', parameter_type=INT, range=[0, 1]), RangeParameter(name='x10', parameter_type=INT, range=[0, 1]), RangeParameter(name='x11', parameter_type=INT, range=[0, 1]), RangeParameter(name='x12', parameter_type=INT, range=[0, 1]), RangeParameter(name='x13', parameter_type=INT, range=[0, 1]), RangeParameter(name='x14', parameter_type=INT, range=[0, 1]), RangeParameter(name='x15', parameter_type=INT, range=[0, 1]), RangeParameter(name='x16', parameter_type=INT, range=[0, 1]), RangeParameter(name='x17', parameter_type=INT, range=[0, 1]), RangeParameter(name='x18', parameter_type=INT, range=[0, 1]), RangeParameter(name='x19', parameter_type=INT, range=[0, 1])], parameter_constraints=[ParameterConstraint(47*x0 + 22*x1 + 82*x2 + 19*x3 + 85*x4 + 15*x5 + 89*x6 + 74*x7 + 26*x8 + 11*x9 + 86*x10 + 81*x11 + 16*x12 + 35*x13 + 60*x14 + 30*x15 + 28*x16 + 94*x17 + 21*x18 + 38*x19 <= 479), ParameterConstraint(39*x0 + 24*x1 + 60*x2 + 78*x3 + 97*x4 + 97*x5 + 96*x6 + 23*x7 + 19*x8 + 17*x9 + 73*x10 + 71*x11 + 32*x12 + 67*x13 + 11*x14 + 10*x15 + 70*x16 + 91*x17 + 18*x18 + 98*x19 <= 545)])\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration: 15, HV: 302191.0\n",
"Iteration: 16, HV: 302191.0\n",
"Iteration: 17, HV: 302191.0\n",
"Iteration: 18, HV: 302191.0\n",
"Iteration: 19, HV: 302191.0\n",
"Iteration: 20, HV: 302191.0\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[WARNING 01-21 12:08:24] ax.modelbridge.transforms.int_to_float: Unable to round {'x0': 0, 'x1': -1, 'x2': 1, 'x3': 1, 'x4': 0, 'x5': 0, 'x6': 1, 'x7': 1, 'x8': -1, 'x9': 0, 'x10': 2, 'x11': 0, 'x12': 1, 'x13': 2, 'x14': 1, 'x15': -1, 'x16': -1, 'x17': 1, 'x18': 0, 'x19': 0}to meet constraints of SearchSpace(parameters=[RangeParameter(name='x0', parameter_type=INT, range=[0, 1]), RangeParameter(name='x1', parameter_type=INT, range=[0, 1]), RangeParameter(name='x2', parameter_type=INT, range=[0, 1]), RangeParameter(name='x3', parameter_type=INT, range=[0, 1]), RangeParameter(name='x4', parameter_type=INT, range=[0, 1]), RangeParameter(name='x5', parameter_type=INT, range=[0, 1]), RangeParameter(name='x6', parameter_type=INT, range=[0, 1]), RangeParameter(name='x7', parameter_type=INT, range=[0, 1]), RangeParameter(name='x8', parameter_type=INT, range=[0, 1]), RangeParameter(name='x9', parameter_type=INT, range=[0, 1]), RangeParameter(name='x10', parameter_type=INT, range=[0, 1]), RangeParameter(name='x11', parameter_type=INT, range=[0, 1]), RangeParameter(name='x12', parameter_type=INT, range=[0, 1]), RangeParameter(name='x13', parameter_type=INT, range=[0, 1]), RangeParameter(name='x14', parameter_type=INT, range=[0, 1]), RangeParameter(name='x15', parameter_type=INT, range=[0, 1]), RangeParameter(name='x16', parameter_type=INT, range=[0, 1]), RangeParameter(name='x17', parameter_type=INT, range=[0, 1]), RangeParameter(name='x18', parameter_type=INT, range=[0, 1]), RangeParameter(name='x19', parameter_type=INT, range=[0, 1])], parameter_constraints=[ParameterConstraint(47*x0 + 22*x1 + 82*x2 + 19*x3 + 85*x4 + 15*x5 + 89*x6 + 74*x7 + 26*x8 + 11*x9 + 86*x10 + 81*x11 + 16*x12 + 35*x13 + 60*x14 + 30*x15 + 28*x16 + 94*x17 + 21*x18 + 38*x19 <= 479), ParameterConstraint(39*x0 + 24*x1 + 60*x2 + 78*x3 + 97*x4 + 97*x5 + 96*x6 + 23*x7 + 19*x8 + 17*x9 + 73*x10 + 71*x11 + 32*x12 + 67*x13 + 11*x14 + 10*x15 + 70*x16 + 91*x17 + 18*x18 + 98*x19 <= 545)])\n",
"[WARNING 01-21 12:08:24] ax.modelbridge.transforms.int_to_float: Unable to round {'x0': 0, 'x1': 1, 'x2': 0, 'x3': 0, 'x4': -1, 'x5': 0, 'x6': -1, 'x7': 0, 'x8': 2, 'x9': 1, 'x10': 2, 'x11': 1, 'x12': 0, 'x13': 2, 'x14': -1, 'x15': -1, 'x16': 2, 'x17': 1, 'x18': 1, 'x19': 1}to meet constraints of SearchSpace(parameters=[RangeParameter(name='x0', parameter_type=INT, range=[0, 1]), RangeParameter(name='x1', parameter_type=INT, range=[0, 1]), RangeParameter(name='x2', parameter_type=INT, range=[0, 1]), RangeParameter(name='x3', parameter_type=INT, range=[0, 1]), RangeParameter(name='x4', parameter_type=INT, range=[0, 1]), RangeParameter(name='x5', parameter_type=INT, range=[0, 1]), RangeParameter(name='x6', parameter_type=INT, range=[0, 1]), RangeParameter(name='x7', parameter_type=INT, range=[0, 1]), RangeParameter(name='x8', parameter_type=INT, range=[0, 1]), RangeParameter(name='x9', parameter_type=INT, range=[0, 1]), RangeParameter(name='x10', parameter_type=INT, range=[0, 1]), RangeParameter(name='x11', parameter_type=INT, range=[0, 1]), RangeParameter(name='x12', parameter_type=INT, range=[0, 1]), RangeParameter(name='x13', parameter_type=INT, range=[0, 1]), RangeParameter(name='x14', parameter_type=INT, range=[0, 1]), RangeParameter(name='x15', parameter_type=INT, range=[0, 1]), RangeParameter(name='x16', parameter_type=INT, range=[0, 1]), RangeParameter(name='x17', parameter_type=INT, range=[0, 1]), RangeParameter(name='x18', parameter_type=INT, range=[0, 1]), RangeParameter(name='x19', parameter_type=INT, range=[0, 1])], parameter_constraints=[ParameterConstraint(47*x0 + 22*x1 + 82*x2 + 19*x3 + 85*x4 + 15*x5 + 89*x6 + 74*x7 + 26*x8 + 11*x9 + 86*x10 + 81*x11 + 16*x12 + 35*x13 + 60*x14 + 30*x15 + 28*x16 + 94*x17 + 21*x18 + 38*x19 <= 479), ParameterConstraint(39*x0 + 24*x1 + 60*x2 + 78*x3 + 97*x4 + 97*x5 + 96*x6 + 23*x7 + 19*x8 + 17*x9 + 73*x10 + 71*x11 + 32*x12 + 67*x13 + 11*x14 + 10*x15 + 70*x16 + 91*x17 + 18*x18 + 98*x19 <= 545)])\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration: 21, HV: 302191.0\n",
"Iteration: 22, HV: 302191.0\n",
"Iteration: 23, HV: 302191.0\n",
"Iteration: 24, HV: 302191.0\n",
"Iteration: 25, HV: 302191.0\n",
"Iteration: 26, HV: 302191.0\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[WARNING 01-21 12:09:02] ax.modelbridge.transforms.int_to_float: Unable to round {'x0': 0, 'x1': 0, 'x2': 2, 'x3': 1, 'x4': 1, 'x5': 1, 'x6': 0, 'x7': 1, 'x8': 0, 'x9': 0, 'x10': 0, 'x11': -1, 'x12': -1, 'x13': 0, 'x14': 2, 'x15': 0, 'x16': 1, 'x17': 0, 'x18': 1, 'x19': 1}to meet constraints of SearchSpace(parameters=[RangeParameter(name='x0', parameter_type=INT, range=[0, 1]), RangeParameter(name='x1', parameter_type=INT, range=[0, 1]), RangeParameter(name='x2', parameter_type=INT, range=[0, 1]), RangeParameter(name='x3', parameter_type=INT, range=[0, 1]), RangeParameter(name='x4', parameter_type=INT, range=[0, 1]), RangeParameter(name='x5', parameter_type=INT, range=[0, 1]), RangeParameter(name='x6', parameter_type=INT, range=[0, 1]), RangeParameter(name='x7', parameter_type=INT, range=[0, 1]), RangeParameter(name='x8', parameter_type=INT, range=[0, 1]), RangeParameter(name='x9', parameter_type=INT, range=[0, 1]), RangeParameter(name='x10', parameter_type=INT, range=[0, 1]), RangeParameter(name='x11', parameter_type=INT, range=[0, 1]), RangeParameter(name='x12', parameter_type=INT, range=[0, 1]), RangeParameter(name='x13', parameter_type=INT, range=[0, 1]), RangeParameter(name='x14', parameter_type=INT, range=[0, 1]), RangeParameter(name='x15', parameter_type=INT, range=[0, 1]), RangeParameter(name='x16', parameter_type=INT, range=[0, 1]), RangeParameter(name='x17', parameter_type=INT, range=[0, 1]), RangeParameter(name='x18', parameter_type=INT, range=[0, 1]), RangeParameter(name='x19', parameter_type=INT, range=[0, 1])], parameter_constraints=[ParameterConstraint(47*x0 + 22*x1 + 82*x2 + 19*x3 + 85*x4 + 15*x5 + 89*x6 + 74*x7 + 26*x8 + 11*x9 + 86*x10 + 81*x11 + 16*x12 + 35*x13 + 60*x14 + 30*x15 + 28*x16 + 94*x17 + 21*x18 + 38*x19 <= 479), ParameterConstraint(39*x0 + 24*x1 + 60*x2 + 78*x3 + 97*x4 + 97*x5 + 96*x6 + 23*x7 + 19*x8 + 17*x9 + 73*x10 + 71*x11 + 32*x12 + 67*x13 + 11*x14 + 10*x15 + 70*x16 + 91*x17 + 18*x18 + 98*x19 <= 545)])\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration: 27, HV: 302191.0\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[WARNING 01-21 12:09:09] ax.modelbridge.transforms.int_to_float: Unable to round {'x0': 1, 'x1': 1, 'x2': 1, 'x3': 2, 'x4': 0, 'x5': 0, 'x6': 1, 'x7': 0, 'x8': 0, 'x9': 0, 'x10': 2, 'x11': 0, 'x12': 0, 'x13': 0, 'x14': -1, 'x15': 0, 'x16': 0, 'x17': 1, 'x18': 0, 'x19': -1}to meet constraints of SearchSpace(parameters=[RangeParameter(name='x0', parameter_type=INT, range=[0, 1]), RangeParameter(name='x1', parameter_type=INT, range=[0, 1]), RangeParameter(name='x2', parameter_type=INT, range=[0, 1]), RangeParameter(name='x3', parameter_type=INT, range=[0, 1]), RangeParameter(name='x4', parameter_type=INT, range=[0, 1]), RangeParameter(name='x5', parameter_type=INT, range=[0, 1]), RangeParameter(name='x6', parameter_type=INT, range=[0, 1]), RangeParameter(name='x7', parameter_type=INT, range=[0, 1]), RangeParameter(name='x8', parameter_type=INT, range=[0, 1]), RangeParameter(name='x9', parameter_type=INT, range=[0, 1]), RangeParameter(name='x10', parameter_type=INT, range=[0, 1]), RangeParameter(name='x11', parameter_type=INT, range=[0, 1]), RangeParameter(name='x12', parameter_type=INT, range=[0, 1]), RangeParameter(name='x13', parameter_type=INT, range=[0, 1]), RangeParameter(name='x14', parameter_type=INT, range=[0, 1]), RangeParameter(name='x15', parameter_type=INT, range=[0, 1]), RangeParameter(name='x16', parameter_type=INT, range=[0, 1]), RangeParameter(name='x17', parameter_type=INT, range=[0, 1]), RangeParameter(name='x18', parameter_type=INT, range=[0, 1]), RangeParameter(name='x19', parameter_type=INT, range=[0, 1])], parameter_constraints=[ParameterConstraint(47*x0 + 22*x1 + 82*x2 + 19*x3 + 85*x4 + 15*x5 + 89*x6 + 74*x7 + 26*x8 + 11*x9 + 86*x10 + 81*x11 + 16*x12 + 35*x13 + 60*x14 + 30*x15 + 28*x16 + 94*x17 + 21*x18 + 38*x19 <= 479), ParameterConstraint(39*x0 + 24*x1 + 60*x2 + 78*x3 + 97*x4 + 97*x5 + 96*x6 + 23*x7 + 19*x8 + 17*x9 + 73*x10 + 71*x11 + 32*x12 + 67*x13 + 11*x14 + 10*x15 + 70*x16 + 91*x17 + 18*x18 + 98*x19 <= 545)])\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration: 28, HV: 302191.0\n",
"Iteration: 29, HV: 302191.0\n",
"Iteration: 30, HV: 302191.0\n",
"Iteration: 31, HV: 302191.0\n",
"Iteration: 32, HV: 302191.0\n",
"Iteration: 33, HV: 302191.0\n",
"Iteration: 34, HV: 302191.0\n",
"Iteration: 35, HV: 302191.0\n",
"Iteration: 36, HV: 302191.0\n",
"Iteration: 37, HV: 302191.0\n",
"Iteration: 38, HV: 302191.0\n",
"Iteration: 39, HV: 302191.0\n",
"Iteration: 40, HV: 302191.0\n",
"Iteration: 41, HV: 302191.0\n",
"Iteration: 42, HV: 302191.0\n",
"Iteration: 43, HV: 302191.0\n",
"Iteration: 44, HV: 302191.0\n",
"Iteration: 45, HV: 302191.0\n",
"Iteration: 46, HV: 302191.0\n",
"Iteration: 47, HV: 302191.0\n",
"Iteration: 48, HV: 302191.0\n",
"Iteration: 49, HV: 302191.0\n",
"Iteration: 50, HV: 302191.0\n",
"Iteration: 51, HV: 302191.0\n",
"Iteration: 52, HV: 302191.0\n",
"Iteration: 53, HV: 302191.0\n",
"Iteration: 54, HV: 302191.0\n",
"Iteration: 55, HV: 302191.0\n",
"Iteration: 56, HV: 302191.0\n",
"Iteration: 57, HV: 302191.0\n",
"Iteration: 58, HV: 302191.0\n",
"Iteration: 59, HV: 302191.0\n",
"Iteration: 60, HV: 302191.0\n",
"Iteration: 61, HV: 302191.0\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[WARNING 01-21 12:14:09] ax.modelbridge.transforms.int_to_float: Unable to round {'x0': 1, 'x1': 2, 'x2': 1, 'x3': 0, 'x4': 2, 'x5': -1, 'x6': -1, 'x7': -1, 'x8': 2, 'x9': 1, 'x10': 1, 'x11': 0, 'x12': 0, 'x13': 2, 'x14': -1, 'x15': 1, 'x16': 2, 'x17': 0, 'x18': 0, 'x19': 0}to meet constraints of SearchSpace(parameters=[RangeParameter(name='x0', parameter_type=INT, range=[0, 1]), RangeParameter(name='x1', parameter_type=INT, range=[0, 1]), RangeParameter(name='x2', parameter_type=INT, range=[0, 1]), RangeParameter(name='x3', parameter_type=INT, range=[0, 1]), RangeParameter(name='x4', parameter_type=INT, range=[0, 1]), RangeParameter(name='x5', parameter_type=INT, range=[0, 1]), RangeParameter(name='x6', parameter_type=INT, range=[0, 1]), RangeParameter(name='x7', parameter_type=INT, range=[0, 1]), RangeParameter(name='x8', parameter_type=INT, range=[0, 1]), RangeParameter(name='x9', parameter_type=INT, range=[0, 1]), RangeParameter(name='x10', parameter_type=INT, range=[0, 1]), RangeParameter(name='x11', parameter_type=INT, range=[0, 1]), RangeParameter(name='x12', parameter_type=INT, range=[0, 1]), RangeParameter(name='x13', parameter_type=INT, range=[0, 1]), RangeParameter(name='x14', parameter_type=INT, range=[0, 1]), RangeParameter(name='x15', parameter_type=INT, range=[0, 1]), RangeParameter(name='x16', parameter_type=INT, range=[0, 1]), RangeParameter(name='x17', parameter_type=INT, range=[0, 1]), RangeParameter(name='x18', parameter_type=INT, range=[0, 1]), RangeParameter(name='x19', parameter_type=INT, range=[0, 1])], parameter_constraints=[ParameterConstraint(47*x0 + 22*x1 + 82*x2 + 19*x3 + 85*x4 + 15*x5 + 89*x6 + 74*x7 + 26*x8 + 11*x9 + 86*x10 + 81*x11 + 16*x12 + 35*x13 + 60*x14 + 30*x15 + 28*x16 + 94*x17 + 21*x18 + 38*x19 <= 479), ParameterConstraint(39*x0 + 24*x1 + 60*x2 + 78*x3 + 97*x4 + 97*x5 + 96*x6 + 23*x7 + 19*x8 + 17*x9 + 73*x10 + 71*x11 + 32*x12 + 67*x13 + 11*x14 + 10*x15 + 70*x16 + 91*x17 + 18*x18 + 98*x19 <= 545)])\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration: 62, HV: 302191.0\n",
"Iteration: 63, HV: 302191.0\n",
"Iteration: 64, HV: 302191.0\n",
"Iteration: 65, HV: 302191.0\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[WARNING 01-21 12:14:45] ax.modelbridge.transforms.int_to_float: Unable to round {'x0': 1, 'x1': 2, 'x2': -1, 'x3': 1, 'x4': 2, 'x5': 0, 'x6': -1, 'x7': 1, 'x8': 0, 'x9': 1, 'x10': 0, 'x11': 0, 'x12': -1, 'x13': 0, 'x14': -1, 'x15': -1, 'x16': -1, 'x17': 2, 'x18': -1, 'x19': 0}to meet constraints of SearchSpace(parameters=[RangeParameter(name='x0', parameter_type=INT, range=[0, 1]), RangeParameter(name='x1', parameter_type=INT, range=[0, 1]), RangeParameter(name='x2', parameter_type=INT, range=[0, 1]), RangeParameter(name='x3', parameter_type=INT, range=[0, 1]), RangeParameter(name='x4', parameter_type=INT, range=[0, 1]), RangeParameter(name='x5', parameter_type=INT, range=[0, 1]), RangeParameter(name='x6', parameter_type=INT, range=[0, 1]), RangeParameter(name='x7', parameter_type=INT, range=[0, 1]), RangeParameter(name='x8', parameter_type=INT, range=[0, 1]), RangeParameter(name='x9', parameter_type=INT, range=[0, 1]), RangeParameter(name='x10', parameter_type=INT, range=[0, 1]), RangeParameter(name='x11', parameter_type=INT, range=[0, 1]), RangeParameter(name='x12', parameter_type=INT, range=[0, 1]), RangeParameter(name='x13', parameter_type=INT, range=[0, 1]), RangeParameter(name='x14', parameter_type=INT, range=[0, 1]), RangeParameter(name='x15', parameter_type=INT, range=[0, 1]), RangeParameter(name='x16', parameter_type=INT, range=[0, 1]), RangeParameter(name='x17', parameter_type=INT, range=[0, 1]), RangeParameter(name='x18', parameter_type=INT, range=[0, 1]), RangeParameter(name='x19', parameter_type=INT, range=[0, 1])], parameter_constraints=[ParameterConstraint(47*x0 + 22*x1 + 82*x2 + 19*x3 + 85*x4 + 15*x5 + 89*x6 + 74*x7 + 26*x8 + 11*x9 + 86*x10 + 81*x11 + 16*x12 + 35*x13 + 60*x14 + 30*x15 + 28*x16 + 94*x17 + 21*x18 + 38*x19 <= 479), ParameterConstraint(39*x0 + 24*x1 + 60*x2 + 78*x3 + 97*x4 + 97*x5 + 96*x6 + 23*x7 + 19*x8 + 17*x9 + 73*x10 + 71*x11 + 32*x12 + 67*x13 + 11*x14 + 10*x15 + 70*x16 + 91*x17 + 18*x18 + 98*x19 <= 545)])\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration: 66, HV: 302191.0\n",
"Iteration: 67, HV: 302191.0\n",
"Iteration: 68, HV: 302191.0\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[WARNING 01-21 12:15:13] ax.modelbridge.transforms.int_to_float: Unable to round {'x0': 0, 'x1': 0, 'x2': 0, 'x3': 0, 'x4': -1, 'x5': 1, 'x6': -1, 'x7': 0, 'x8': 1, 'x9': 2, 'x10': 2, 'x11': 1, 'x12': 1, 'x13': 2, 'x14': -1, 'x15': 0, 'x16': 2, 'x17': -1, 'x18': -1, 'x19': 1}to meet constraints of SearchSpace(parameters=[RangeParameter(name='x0', parameter_type=INT, range=[0, 1]), RangeParameter(name='x1', parameter_type=INT, range=[0, 1]), RangeParameter(name='x2', parameter_type=INT, range=[0, 1]), RangeParameter(name='x3', parameter_type=INT, range=[0, 1]), RangeParameter(name='x4', parameter_type=INT, range=[0, 1]), RangeParameter(name='x5', parameter_type=INT, range=[0, 1]), RangeParameter(name='x6', parameter_type=INT, range=[0, 1]), RangeParameter(name='x7', parameter_type=INT, range=[0, 1]), RangeParameter(name='x8', parameter_type=INT, range=[0, 1]), RangeParameter(name='x9', parameter_type=INT, range=[0, 1]), RangeParameter(name='x10', parameter_type=INT, range=[0, 1]), RangeParameter(name='x11', parameter_type=INT, range=[0, 1]), RangeParameter(name='x12', parameter_type=INT, range=[0, 1]), RangeParameter(name='x13', parameter_type=INT, range=[0, 1]), RangeParameter(name='x14', parameter_type=INT, range=[0, 1]), RangeParameter(name='x15', parameter_type=INT, range=[0, 1]), RangeParameter(name='x16', parameter_type=INT, range=[0, 1]), RangeParameter(name='x17', parameter_type=INT, range=[0, 1]), RangeParameter(name='x18', parameter_type=INT, range=[0, 1]), RangeParameter(name='x19', parameter_type=INT, range=[0, 1])], parameter_constraints=[ParameterConstraint(47*x0 + 22*x1 + 82*x2 + 19*x3 + 85*x4 + 15*x5 + 89*x6 + 74*x7 + 26*x8 + 11*x9 + 86*x10 + 81*x11 + 16*x12 + 35*x13 + 60*x14 + 30*x15 + 28*x16 + 94*x17 + 21*x18 + 38*x19 <= 479), ParameterConstraint(39*x0 + 24*x1 + 60*x2 + 78*x3 + 97*x4 + 97*x5 + 96*x6 + 23*x7 + 19*x8 + 17*x9 + 73*x10 + 71*x11 + 32*x12 + 67*x13 + 11*x14 + 10*x15 + 70*x16 + 91*x17 + 18*x18 + 98*x19 <= 545)])\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration: 69, HV: 302191.0\n",
"Iteration: 70, HV: 302191.0\n",
"Iteration: 71, HV: 302191.0\n",
"Iteration: 72, HV: 302191.0\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[WARNING 01-21 12:15:52] ax.modelbridge.transforms.int_to_float: Unable to round {'x0': 0, 'x1': 2, 'x2': 0, 'x3': 1, 'x4': 0, 'x5': -1, 'x6': -1, 'x7': 0, 'x8': -1, 'x9': 1, 'x10': -1, 'x11': 2, 'x12': 1, 'x13': 1, 'x14': 1, 'x15': -1, 'x16': -1, 'x17': 2, 'x18': 0, 'x19': 0}to meet constraints of SearchSpace(parameters=[RangeParameter(name='x0', parameter_type=INT, range=[0, 1]), RangeParameter(name='x1', parameter_type=INT, range=[0, 1]), RangeParameter(name='x2', parameter_type=INT, range=[0, 1]), RangeParameter(name='x3', parameter_type=INT, range=[0, 1]), RangeParameter(name='x4', parameter_type=INT, range=[0, 1]), RangeParameter(name='x5', parameter_type=INT, range=[0, 1]), RangeParameter(name='x6', parameter_type=INT, range=[0, 1]), RangeParameter(name='x7', parameter_type=INT, range=[0, 1]), RangeParameter(name='x8', parameter_type=INT, range=[0, 1]), RangeParameter(name='x9', parameter_type=INT, range=[0, 1]), RangeParameter(name='x10', parameter_type=INT, range=[0, 1]), RangeParameter(name='x11', parameter_type=INT, range=[0, 1]), RangeParameter(name='x12', parameter_type=INT, range=[0, 1]), RangeParameter(name='x13', parameter_type=INT, range=[0, 1]), RangeParameter(name='x14', parameter_type=INT, range=[0, 1]), RangeParameter(name='x15', parameter_type=INT, range=[0, 1]), RangeParameter(name='x16', parameter_type=INT, range=[0, 1]), RangeParameter(name='x17', parameter_type=INT, range=[0, 1]), RangeParameter(name='x18', parameter_type=INT, range=[0, 1]), RangeParameter(name='x19', parameter_type=INT, range=[0, 1])], parameter_constraints=[ParameterConstraint(47*x0 + 22*x1 + 82*x2 + 19*x3 + 85*x4 + 15*x5 + 89*x6 + 74*x7 + 26*x8 + 11*x9 + 86*x10 + 81*x11 + 16*x12 + 35*x13 + 60*x14 + 30*x15 + 28*x16 + 94*x17 + 21*x18 + 38*x19 <= 479), ParameterConstraint(39*x0 + 24*x1 + 60*x2 + 78*x3 + 97*x4 + 97*x5 + 96*x6 + 23*x7 + 19*x8 + 17*x9 + 73*x10 + 71*x11 + 32*x12 + 67*x13 + 11*x14 + 10*x15 + 70*x16 + 91*x17 + 18*x18 + 98*x19 <= 545)])\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration: 73, HV: 302191.0\n",
"Iteration: 74, HV: 302191.0\n",
"Iteration: 75, HV: 302191.0\n",
"Iteration: 76, HV: 302191.0\n",
"Iteration: 77, HV: 302191.0\n",
"Iteration: 78, HV: 302191.0\n",
"Iteration: 79, HV: 302191.0\n",
"Iteration: 80, HV: 302191.0\n",
"Iteration: 81, HV: 302191.0\n",
"Iteration: 82, HV: 302191.0\n",
"Iteration: 83, HV: 302191.0\n",
"Iteration: 84, HV: 302191.0\n",
"Iteration: 85, HV: 302191.0\n",
"Iteration: 86, HV: 302191.0\n",
"Iteration: 87, HV: 302191.0\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[WARNING 01-21 12:18:25] ax.modelbridge.transforms.int_to_float: Unable to round {'x0': -1, 'x1': 1, 'x2': 1, 'x3': 0, 'x4': 1, 'x5': 1, 'x6': 2, 'x7': 0, 'x8': -1, 'x9': 2, 'x10': 0, 'x11': -1, 'x12': -1, 'x13': 1, 'x14': 0, 'x15': 0, 'x16': 0, 'x17': 2, 'x18': -1, 'x19': 1}to meet constraints of SearchSpace(parameters=[RangeParameter(name='x0', parameter_type=INT, range=[0, 1]), RangeParameter(name='x1', parameter_type=INT, range=[0, 1]), RangeParameter(name='x2', parameter_type=INT, range=[0, 1]), RangeParameter(name='x3', parameter_type=INT, range=[0, 1]), RangeParameter(name='x4', parameter_type=INT, range=[0, 1]), RangeParameter(name='x5', parameter_type=INT, range=[0, 1]), RangeParameter(name='x6', parameter_type=INT, range=[0, 1]), RangeParameter(name='x7', parameter_type=INT, range=[0, 1]), RangeParameter(name='x8', parameter_type=INT, range=[0, 1]), RangeParameter(name='x9', parameter_type=INT, range=[0, 1]), RangeParameter(name='x10', parameter_type=INT, range=[0, 1]), RangeParameter(name='x11', parameter_type=INT, range=[0, 1]), RangeParameter(name='x12', parameter_type=INT, range=[0, 1]), RangeParameter(name='x13', parameter_type=INT, range=[0, 1]), RangeParameter(name='x14', parameter_type=INT, range=[0, 1]), RangeParameter(name='x15', parameter_type=INT, range=[0, 1]), RangeParameter(name='x16', parameter_type=INT, range=[0, 1]), RangeParameter(name='x17', parameter_type=INT, range=[0, 1]), RangeParameter(name='x18', parameter_type=INT, range=[0, 1]), RangeParameter(name='x19', parameter_type=INT, range=[0, 1])], parameter_constraints=[ParameterConstraint(47*x0 + 22*x1 + 82*x2 + 19*x3 + 85*x4 + 15*x5 + 89*x6 + 74*x7 + 26*x8 + 11*x9 + 86*x10 + 81*x11 + 16*x12 + 35*x13 + 60*x14 + 30*x15 + 28*x16 + 94*x17 + 21*x18 + 38*x19 <= 479), ParameterConstraint(39*x0 + 24*x1 + 60*x2 + 78*x3 + 97*x4 + 97*x5 + 96*x6 + 23*x7 + 19*x8 + 17*x9 + 73*x10 + 71*x11 + 32*x12 + 67*x13 + 11*x14 + 10*x15 + 70*x16 + 91*x17 + 18*x18 + 98*x19 <= 545)])\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration: 88, HV: 302191.0\n",
"Iteration: 89, HV: 302191.0\n",
"Iteration: 90, HV: 302191.0\n",
"Iteration: 91, HV: 302191.0\n",
"Iteration: 92, HV: 302191.0\n",
"Iteration: 93, HV: 302191.0\n",
"Iteration: 94, HV: 302191.0\n",
"Iteration: 95, HV: 302191.0\n",
"Iteration: 96, HV: 302191.0\n",
"Iteration: 97, HV: 302191.0\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[WARNING 01-21 12:20:20] ax.modelbridge.transforms.int_to_float: Unable to round {'x0': -1, 'x1': 1, 'x2': 1, 'x3': -1, 'x4': 0, 'x5': 0, 'x6': 0, 'x7': 0, 'x8': 0, 'x9': 1, 'x10': 1, 'x11': 1, 'x12': 1, 'x13': -1, 'x14': 0, 'x15': 2, 'x16': 0, 'x17': 0, 'x18': 1, 'x19': 1}to meet constraints of SearchSpace(parameters=[RangeParameter(name='x0', parameter_type=INT, range=[0, 1]), RangeParameter(name='x1', parameter_type=INT, range=[0, 1]), RangeParameter(name='x2', parameter_type=INT, range=[0, 1]), RangeParameter(name='x3', parameter_type=INT, range=[0, 1]), RangeParameter(name='x4', parameter_type=INT, range=[0, 1]), RangeParameter(name='x5', parameter_type=INT, range=[0, 1]), RangeParameter(name='x6', parameter_type=INT, range=[0, 1]), RangeParameter(name='x7', parameter_type=INT, range=[0, 1]), RangeParameter(name='x8', parameter_type=INT, range=[0, 1]), RangeParameter(name='x9', parameter_type=INT, range=[0, 1]), RangeParameter(name='x10', parameter_type=INT, range=[0, 1]), RangeParameter(name='x11', parameter_type=INT, range=[0, 1]), RangeParameter(name='x12', parameter_type=INT, range=[0, 1]), RangeParameter(name='x13', parameter_type=INT, range=[0, 1]), RangeParameter(name='x14', parameter_type=INT, range=[0, 1]), RangeParameter(name='x15', parameter_type=INT, range=[0, 1]), RangeParameter(name='x16', parameter_type=INT, range=[0, 1]), RangeParameter(name='x17', parameter_type=INT, range=[0, 1]), RangeParameter(name='x18', parameter_type=INT, range=[0, 1]), RangeParameter(name='x19', parameter_type=INT, range=[0, 1])], parameter_constraints=[ParameterConstraint(47*x0 + 22*x1 + 82*x2 + 19*x3 + 85*x4 + 15*x5 + 89*x6 + 74*x7 + 26*x8 + 11*x9 + 86*x10 + 81*x11 + 16*x12 + 35*x13 + 60*x14 + 30*x15 + 28*x16 + 94*x17 + 21*x18 + 38*x19 <= 479), ParameterConstraint(39*x0 + 24*x1 + 60*x2 + 78*x3 + 97*x4 + 97*x5 + 96*x6 + 23*x7 + 19*x8 + 17*x9 + 73*x10 + 71*x11 + 32*x12 + 67*x13 + 11*x14 + 10*x15 + 70*x16 + 91*x17 + 18*x18 + 98*x19 <= 545)])\n",
"[WARNING 01-21 12:20:20] ax.modelbridge.transforms.int_to_float: Unable to round {'x0': 1, 'x1': 1, 'x2': 1, 'x3': 1, 'x4': 1, 'x5': 0, 'x6': 1, 'x7': 1, 'x8': 0, 'x9': -1, 'x10': 0, 'x11': 0, 'x12': -1, 'x13': 2, 'x14': 1, 'x15': 0, 'x16': 1, 'x17': 1, 'x18': 2, 'x19': -1}to meet constraints of SearchSpace(parameters=[RangeParameter(name='x0', parameter_type=INT, range=[0, 1]), RangeParameter(name='x1', parameter_type=INT, range=[0, 1]), RangeParameter(name='x2', parameter_type=INT, range=[0, 1]), RangeParameter(name='x3', parameter_type=INT, range=[0, 1]), RangeParameter(name='x4', parameter_type=INT, range=[0, 1]), RangeParameter(name='x5', parameter_type=INT, range=[0, 1]), RangeParameter(name='x6', parameter_type=INT, range=[0, 1]), RangeParameter(name='x7', parameter_type=INT, range=[0, 1]), RangeParameter(name='x8', parameter_type=INT, range=[0, 1]), RangeParameter(name='x9', parameter_type=INT, range=[0, 1]), RangeParameter(name='x10', parameter_type=INT, range=[0, 1]), RangeParameter(name='x11', parameter_type=INT, range=[0, 1]), RangeParameter(name='x12', parameter_type=INT, range=[0, 1]), RangeParameter(name='x13', parameter_type=INT, range=[0, 1]), RangeParameter(name='x14', parameter_type=INT, range=[0, 1]), RangeParameter(name='x15', parameter_type=INT, range=[0, 1]), RangeParameter(name='x16', parameter_type=INT, range=[0, 1]), RangeParameter(name='x17', parameter_type=INT, range=[0, 1]), RangeParameter(name='x18', parameter_type=INT, range=[0, 1]), RangeParameter(name='x19', parameter_type=INT, range=[0, 1])], parameter_constraints=[ParameterConstraint(47*x0 + 22*x1 + 82*x2 + 19*x3 + 85*x4 + 15*x5 + 89*x6 + 74*x7 + 26*x8 + 11*x9 + 86*x10 + 81*x11 + 16*x12 + 35*x13 + 60*x14 + 30*x15 + 28*x16 + 94*x17 + 21*x18 + 38*x19 <= 479), ParameterConstraint(39*x0 + 24*x1 + 60*x2 + 78*x3 + 97*x4 + 97*x5 + 96*x6 + 23*x7 + 19*x8 + 17*x9 + 73*x10 + 71*x11 + 32*x12 + 67*x13 + 11*x14 + 10*x15 + 70*x16 + 91*x17 + 18*x18 + 98*x19 <= 545)])\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration: 98, HV: 302191.0\n",
"Iteration: 99, HV: 302191.0\n",
"Iteration: 100, HV: 302191.0\n",
"Iteration: 101, HV: 302191.0\n",
"Iteration: 102, HV: 302191.0\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[WARNING 01-21 12:21:18] ax.modelbridge.transforms.int_to_float: Unable to round {'x0': 1, 'x1': 2, 'x2': 0, 'x3': 0, 'x4': 2, 'x5': 0, 'x6': 1, 'x7': 0, 'x8': 0, 'x9': 1, 'x10': 1, 'x11': 1, 'x12': 0, 'x13': -1, 'x14': 0, 'x15': -1, 'x16': 1, 'x17': 1, 'x18': 0, 'x19': -1}to meet constraints of SearchSpace(parameters=[RangeParameter(name='x0', parameter_type=INT, range=[0, 1]), RangeParameter(name='x1', parameter_type=INT, range=[0, 1]), RangeParameter(name='x2', parameter_type=INT, range=[0, 1]), RangeParameter(name='x3', parameter_type=INT, range=[0, 1]), RangeParameter(name='x4', parameter_type=INT, range=[0, 1]), RangeParameter(name='x5', parameter_type=INT, range=[0, 1]), RangeParameter(name='x6', parameter_type=INT, range=[0, 1]), RangeParameter(name='x7', parameter_type=INT, range=[0, 1]), RangeParameter(name='x8', parameter_type=INT, range=[0, 1]), RangeParameter(name='x9', parameter_type=INT, range=[0, 1]), RangeParameter(name='x10', parameter_type=INT, range=[0, 1]), RangeParameter(name='x11', parameter_type=INT, range=[0, 1]), RangeParameter(name='x12', parameter_type=INT, range=[0, 1]), RangeParameter(name='x13', parameter_type=INT, range=[0, 1]), RangeParameter(name='x14', parameter_type=INT, range=[0, 1]), RangeParameter(name='x15', parameter_type=INT, range=[0, 1]), RangeParameter(name='x16', parameter_type=INT, range=[0, 1]), RangeParameter(name='x17', parameter_type=INT, range=[0, 1]), RangeParameter(name='x18', parameter_type=INT, range=[0, 1]), RangeParameter(name='x19', parameter_type=INT, range=[0, 1])], parameter_constraints=[ParameterConstraint(47*x0 + 22*x1 + 82*x2 + 19*x3 + 85*x4 + 15*x5 + 89*x6 + 74*x7 + 26*x8 + 11*x9 + 86*x10 + 81*x11 + 16*x12 + 35*x13 + 60*x14 + 30*x15 + 28*x16 + 94*x17 + 21*x18 + 38*x19 <= 479), ParameterConstraint(39*x0 + 24*x1 + 60*x2 + 78*x3 + 97*x4 + 97*x5 + 96*x6 + 23*x7 + 19*x8 + 17*x9 + 73*x10 + 71*x11 + 32*x12 + 67*x13 + 11*x14 + 10*x15 + 70*x16 + 91*x17 + 18*x18 + 98*x19 <= 545)])\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration: 103, HV: 302191.0\n",
"Iteration: 104, HV: 302191.0\n",
"Iteration: 105, HV: 302191.0\n",
"Iteration: 106, HV: 302191.0\n",
"Iteration: 107, HV: 302191.0\n",
"Iteration: 108, HV: 302191.0\n",
"Iteration: 109, HV: 302191.0\n",
"Iteration: 110, HV: 302191.0\n",
"Iteration: 111, HV: 302191.0\n",
"Iteration: 112, HV: 302191.0\n",
"Iteration: 113, HV: 302191.0\n",
"Iteration: 114, HV: 302191.0\n",
"Iteration: 115, HV: 302191.0\n",
"Iteration: 116, HV: 302191.0\n",
"Iteration: 117, HV: 302625.0\n",
"Iteration: 118, HV: 302625.0\n",
"Iteration: 119, HV: 302625.0\n",
"Iteration: 120, HV: 302625.0\n",
"Iteration: 121, HV: 302625.0\n",
"Iteration: 122, HV: 302625.0\n",
"Iteration: 123, HV: 302625.0\n",
"Iteration: 124, HV: 302625.0\n",
"Iteration: 125, HV: 302625.0\n",
"Iteration: 126, HV: 302625.0\n",
"Iteration: 127, HV: 302625.0\n",
"Iteration: 128, HV: 302625.0\n",
"Iteration: 129, HV: 302625.0\n",
"Iteration: 130, HV: 302625.0\n",
"Iteration: 131, HV: 302625.0\n",
"Iteration: 132, HV: 302625.0\n",
"Iteration: 133, HV: 302625.0\n",
"Iteration: 134, HV: 302625.0\n",
"Iteration: 135, HV: 302625.0\n",
"Iteration: 136, HV: 302625.0\n",
"Iteration: 137, HV: 302625.0\n",
"Iteration: 138, HV: 302625.0\n",
"Iteration: 139, HV: 302625.0\n",
"Iteration: 140, HV: 302625.0\n",
"Iteration: 141, HV: 302625.0\n",
"Iteration: 142, HV: 302625.0\n",
"Iteration: 143, HV: 302625.0\n",
"Iteration: 144, HV: 302625.0\n",
"Iteration: 145, HV: 302625.0\n",
"Iteration: 146, HV: 302625.0\n",
"Iteration: 147, HV: 302625.0\n",
"Iteration: 148, HV: 302625.0\n",
"Iteration: 149, HV: 302625.0\n",
"Iteration: 150, HV: 302625.0\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[WARNING 01-21 12:32:01] ax.modelbridge.transforms.int_to_float: Unable to round {'x0': 0, 'x1': 1, 'x2': 0, 'x3': 1, 'x4': 0, 'x5': 0, 'x6': 1, 'x7': 0, 'x8': -1, 'x9': 1, 'x10': -1, 'x11': 1, 'x12': 1, 'x13': 1, 'x14': 1, 'x15': 0, 'x16': 0, 'x17': 2, 'x18': 2, 'x19': 0}to meet constraints of SearchSpace(parameters=[RangeParameter(name='x0', parameter_type=INT, range=[0, 1]), RangeParameter(name='x1', parameter_type=INT, range=[0, 1]), RangeParameter(name='x2', parameter_type=INT, range=[0, 1]), RangeParameter(name='x3', parameter_type=INT, range=[0, 1]), RangeParameter(name='x4', parameter_type=INT, range=[0, 1]), RangeParameter(name='x5', parameter_type=INT, range=[0, 1]), RangeParameter(name='x6', parameter_type=INT, range=[0, 1]), RangeParameter(name='x7', parameter_type=INT, range=[0, 1]), RangeParameter(name='x8', parameter_type=INT, range=[0, 1]), RangeParameter(name='x9', parameter_type=INT, range=[0, 1]), RangeParameter(name='x10', parameter_type=INT, range=[0, 1]), RangeParameter(name='x11', parameter_type=INT, range=[0, 1]), RangeParameter(name='x12', parameter_type=INT, range=[0, 1]), RangeParameter(name='x13', parameter_type=INT, range=[0, 1]), RangeParameter(name='x14', parameter_type=INT, range=[0, 1]), RangeParameter(name='x15', parameter_type=INT, range=[0, 1]), RangeParameter(name='x16', parameter_type=INT, range=[0, 1]), RangeParameter(name='x17', parameter_type=INT, range=[0, 1]), RangeParameter(name='x18', parameter_type=INT, range=[0, 1]), RangeParameter(name='x19', parameter_type=INT, range=[0, 1])], parameter_constraints=[ParameterConstraint(47*x0 + 22*x1 + 82*x2 + 19*x3 + 85*x4 + 15*x5 + 89*x6 + 74*x7 + 26*x8 + 11*x9 + 86*x10 + 81*x11 + 16*x12 + 35*x13 + 60*x14 + 30*x15 + 28*x16 + 94*x17 + 21*x18 + 38*x19 <= 479), ParameterConstraint(39*x0 + 24*x1 + 60*x2 + 78*x3 + 97*x4 + 97*x5 + 96*x6 + 23*x7 + 19*x8 + 17*x9 + 73*x10 + 71*x11 + 32*x12 + 67*x13 + 11*x14 + 10*x15 + 70*x16 + 91*x17 + 18*x18 + 98*x19 <= 545)])\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration: 151, HV: 302625.0\n",
"Iteration: 152, HV: 302625.0\n",
"Iteration: 153, HV: 302625.0\n",
"Iteration: 154, HV: 302625.0\n",
"Iteration: 155, HV: 302625.0\n",
"Iteration: 156, HV: 302625.0\n",
"Iteration: 157, HV: 302625.0\n",
"Iteration: 158, HV: 302625.0\n",
"Iteration: 159, HV: 302625.0\n",
"Iteration: 160, HV: 302625.0\n",
"Iteration: 161, HV: 302625.0\n",
"Iteration: 162, HV: 302625.0\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[WARNING 01-21 12:34:50] ax.modelbridge.transforms.int_to_float: Unable to round {'x0': 1, 'x1': 1, 'x2': 0, 'x3': 2, 'x4': 0, 'x5': 1, 'x6': 1, 'x7': 0, 'x8': 1, 'x9': -1, 'x10': 0, 'x11': 0, 'x12': 1, 'x13': 1, 'x14': 0, 'x15': 0, 'x16': 0, 'x17': 1, 'x18': 1, 'x19': 0}to meet constraints of SearchSpace(parameters=[RangeParameter(name='x0', parameter_type=INT, range=[0, 1]), RangeParameter(name='x1', parameter_type=INT, range=[0, 1]), RangeParameter(name='x2', parameter_type=INT, range=[0, 1]), RangeParameter(name='x3', parameter_type=INT, range=[0, 1]), RangeParameter(name='x4', parameter_type=INT, range=[0, 1]), RangeParameter(name='x5', parameter_type=INT, range=[0, 1]), RangeParameter(name='x6', parameter_type=INT, range=[0, 1]), RangeParameter(name='x7', parameter_type=INT, range=[0, 1]), RangeParameter(name='x8', parameter_type=INT, range=[0, 1]), RangeParameter(name='x9', parameter_type=INT, range=[0, 1]), RangeParameter(name='x10', parameter_type=INT, range=[0, 1]), RangeParameter(name='x11', parameter_type=INT, range=[0, 1]), RangeParameter(name='x12', parameter_type=INT, range=[0, 1]), RangeParameter(name='x13', parameter_type=INT, range=[0, 1]), RangeParameter(name='x14', parameter_type=INT, range=[0, 1]), RangeParameter(name='x15', parameter_type=INT, range=[0, 1]), RangeParameter(name='x16', parameter_type=INT, range=[0, 1]), RangeParameter(name='x17', parameter_type=INT, range=[0, 1]), RangeParameter(name='x18', parameter_type=INT, range=[0, 1]), RangeParameter(name='x19', parameter_type=INT, range=[0, 1])], parameter_constraints=[ParameterConstraint(47*x0 + 22*x1 + 82*x2 + 19*x3 + 85*x4 + 15*x5 + 89*x6 + 74*x7 + 26*x8 + 11*x9 + 86*x10 + 81*x11 + 16*x12 + 35*x13 + 60*x14 + 30*x15 + 28*x16 + 94*x17 + 21*x18 + 38*x19 <= 479), ParameterConstraint(39*x0 + 24*x1 + 60*x2 + 78*x3 + 97*x4 + 97*x5 + 96*x6 + 23*x7 + 19*x8 + 17*x9 + 73*x10 + 71*x11 + 32*x12 + 67*x13 + 11*x14 + 10*x15 + 70*x16 + 91*x17 + 18*x18 + 98*x19 <= 545)])\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration: 163, HV: 302625.0\n",
"Iteration: 164, HV: 302625.0\n",
"Iteration: 165, HV: 302625.0\n",
"Iteration: 166, HV: 302625.0\n",
"Iteration: 167, HV: 302625.0\n",
"Iteration: 168, HV: 302625.0\n",
"Iteration: 169, HV: 302625.0\n",
"Iteration: 170, HV: 302625.0\n",
"Iteration: 171, HV: 302625.0\n",
"Iteration: 172, HV: 302625.0\n",
"Iteration: 173, HV: 302625.0\n",
"Iteration: 174, HV: 302625.0\n",
"Iteration: 175, HV: 302625.0\n",
"Iteration: 176, HV: 302625.0\n",
"Iteration: 177, HV: 302625.0\n",
"Iteration: 178, HV: 302625.0\n",
"Iteration: 179, HV: 302625.0\n",
"Iteration: 180, HV: 302625.0\n",
"Iteration: 181, HV: 302625.0\n",
"Iteration: 182, HV: 302625.0\n",
"Iteration: 183, HV: 302625.0\n",
"Iteration: 184, HV: 302625.0\n",
"Iteration: 185, HV: 302625.0\n",
"Iteration: 186, HV: 302625.0\n",
"Iteration: 187, HV: 302625.0\n",
"Iteration: 188, HV: 302625.0\n",
"Iteration: 189, HV: 302625.0\n"
]
}
],
"source": [
"ehvi_hv_list = []\n",
"ehvi_model = None\n",
"for i in range(N_BATCH): \n",
" ehvi_model = get_MOO_EHVI(\n",
" experiment=ehvi_experiment, \n",
" data=ehvi_data,\n",
" )\n",
" generator_run = ehvi_model.gen(1)\n",
" trial = ehvi_experiment.new_trial(generator_run=generator_run)\n",
" trial.run()\n",
" ehvi_data = Data.from_multiple_data([ehvi_data, trial.fetch_data()])\n",
" \n",
" exp_df = exp_to_df(ehvi_experiment)\n",
" outcomes = np.array(exp_df[['a', 'b']], dtype=np.double)\n",
" try:\n",
" hv = ehvi_model.observed_hypervolume()\n",
" except:\n",
" hv = 0\n",
" print(\"Failed to compute hv\")\n",
" ehvi_hv_list.append(hv)\n",
" print(f\"Iteration: {i}, HV: {hv}\")\n",
"\n",
"ehvi_outcomes = np.array(exp_to_df(ehvi_experiment)[['a', 'b']], dtype=np.double)"
]
},
{
"cell_type": "code",
"execution_count": 24,
"id": "aware-friend",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Text(0.5, 1.0, 'Iteration')"
]
},
"execution_count": 24,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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uYHcCLltzrk64AfkClptFwDfdM4lnXNNzrmtzrl7nHON+e2/D0xr5fG2F8v6inOuzjm3Evg58IFmm61yzv3FOZcll6AbAPTbz1PtvBFzzrnXzexu4C0gA8wkd5f1YeAOM/tevm175vFvwG1mthTYRstvtoiIiIi0gq7BRERE5CBQQW4E3IxmNamM3Ei47TY75xI73jQrIFdh/jygPN9cbGZ+Ppm2N32AMNB8pOAq3lmTF2DD9ifOucZ8XEWtPaE96dTF8Zxz3wS+uVPzcuD43WybAN7TmfGIiIiIHAp0DSYiIiI9zM6j9bcATcCEfGGr1uzzeWAsMMU5t8HMJpG7GWl72H7n46XJTYudn28byjtLf3SazpzKKiIiIiIiIiIisi8bgcFmFgFwzgXkii/80sz6ApjZIDM7dy99FJNL5lWbWS92vUm5kdz6cbvIj6i7C/i+mRWb2TDgc+QKTHQqJeZERERERERERKQ7PQPMAzaY2ZZ825eApcBrZlYLPEVuRNye/AqIkxv99hrw2E7v/xq4wsyqzOw3u9n/U0ADuVkGL5ErNnFzu86mDTp1KquIiIiIiIiIiMjuOOeGN3t54U7vJYCv5h877/ccuSrzzdvWAafttOmfm73/KnDYTvtYs+dVwPv3EOctwC172nd/aMSciIiIiIiIiIhIN1BiTkREREREREREpBsoMSciIiIiIiIiItINlJgTERERERERERHpBkrMiYiIiIiIiIiIdANVZRURERERERERkR7p3NML3dZt2XbtO2N28nHn3HkdHFKbKDEnIiIiIiIiIiI90pZtWV5/fHC79g0PWNang8NpMyXmRERERERERESkh3JkXdDdQbSb1pgTERERERERERHpBhoxJyIiIiIiIiIiPZIDAlx3h9FuSsyJiIiIiIiIiEiPFdBzp7IqMSciIiIiIiIiIj2Sw5F1GjEnIiIiIiIiIiLS5TSVVUREREREREREpIs5INuDE3OqyioiIiIiIiIiItINNGJORERERERERER6LE1lFRERERERERER6WIOVPxBRERERERERESkOwTdHcB+UGJORERERERERER6JIfr0cUflJgTEREREREREZGeyUG25+bllJgTEREREREREZGeydGzp7J63R2AiIiIiIiIiIjIoUgj5kREREREREREpIcyslh3B9FuSsyJiIiIiIiIiEiP5IBAa8yJiIiIiIiIiIh0PY2YExERERERERER6WKOzkvMmdnNwLuATc65ifm2O4Gx+U3KgGrn3CQzGw4sABbl33vNOXfjvo6hxJyIiIiIiIiIiPRYgeu0EXO3AL8Dbt3e4Jy7avtzM/s5UNNs+2XOuUltOYAScyIiIiIiIiIiIjtxzr2QHwm3CzMz4ErgjP05hrc/O4uIiIiIiIiIiHSX7VNZ2/MA+pjZ9GaPG9pw6FOAjc65Jc3aRpjZTDN73sxOaU0nGjEnIiIiIiIiIiI9ksPItn/c2Rbn3LHt3Pca4PZmr9cDQ51zW81sMnC/mU1wztXurRMl5kREREREREREpMfqxDXmdsvMQsDlwOTtbc65JJDMP59hZsuAw4Dpe+tLiTkREREREREREemROrMq616cBSx0zlVubzCzCmCbcy5rZiOBMcDyfXWkxJyIiIiIiIiIiPRQRtZ1TgkFM7sdOI3cWnSVwDedc38DrqblNFaAU4HvmFkaCIAbnXPb9nUMJeZERERERERERKRHckDQSbVNnXPX7KH9ut203QPc09ZjqCqriIiIiIiIiIhIN9CIORERERERERER6bG6YY25DqPEnIiIiIiIiIiI9EjOdd4ac11BiTkREREREREREemxAo2YExERERERERER6VoOyPbgEgpKzImIiIiIiIiISA/Vs6ey9tzIRUREREREREREejCNmBMRERERERERkR7JAUEPHnemxJyIiIiIiIiIiPRYWddziz90WkrRzMaa2axmj1oz+x8z62VmT5rZkvzX8vz2Zma/MbOlZjbbzI7prNhEREREDla6BhMREZFDicPI4rXrcSDotCicc4ucc5Occ5OAyUAjcB/wZeBp59wY4On8a4DzgTH5xw3AHzsrNhEREZGDla7BRERE5FATOK9djwNBV0VxJrDMObcKuAT4R779H8Cl+eeXALe6nNeAMjMb0EXxiYiIiByMdA0mIiIiBzUHGjHXClcDt+ef93POrc8/3wD0yz8fBKxptk9lvq0FM7vBzKab2fTNmzd3VrwiIiIiBwNdg4mIiMhBzWFkXfseB4JOT8yZWQS4GPjPzu855xy55GarOeducs4d65w7tqKiooOiFBERETm46BpMRERE5MDXFSPmzgfecs5tzL/euH16RP7rpnz7WmBIs/0G59tEREREpO10DSYiIiKHhACvXY8DQVdEcQ3vTKEAeAC4Nv/8WuC/zdo/mK8MNhWoaTbdQkRERETaRtdgIiIictBzDrLOa9fjQBDqzM7NrBA4G/hYs+YfAXeZ2YeBVcCV+fZHgAuApeSqh32oM2MTEREROVjpGkxEREQOHUbAgbFeXHt0amLOOdcA9N6pbSu5CmE7b+uAT3RmPCIiIiKHAl2DiYiIyKHCwQEz+q09OjUxJyIiIiIiIiIi0pmyB8h6ce3RcyMXERERERERERHpwTRiTkREREREREREeiSHETitMSciIiIiIiIiItLlevJUViXmRERERERERESkR3JAoOIPIiIiIiIiIiIiXc3IoqmsIiIiIiIiIiIiXUoj5kRERERERERERLpJTx4x13NTiiIiIiIiIiIiIj2YRsyJiIiIiIiIiEiP5JxpKquIiIiIiIiIiEh3yCoxJyIiIiIiIiIi0rUcEPTgNeaUmBMRERERERERkR7KevSIuZ4buYiIiIiIiIiIHNIcEDhr12NfzOxmM9tkZnObtX3LzNaa2az844Jm733FzJaa2SIzO7c18SsxJyIiIiIiIiIisqtbgPN20/5L59yk/OMRADMbD1wNTMjv8wcz8/d1ACXmRERERERERESkx8riteuxL865F4BtrQzjEuAO51zSObcCWAocv6+dlJgTEREREREREZEeydG+aaz5qax9zGx6s8cNrTzsJ81sdn6qa3m+bRCwptk2lfm2vVLxBxERERERERER6bGC9o872+KcO7aN+/wR+C655e2+C/wcuL69ASgxJyIiIiIiIiIiPZJzkG1FIYeOO57buP25mf0FeCj/ci0wpNmmg/Nte6WprCIiIiIiIiIi0mN1VlXW3TGzAc1eXgZsr9j6AHC1mUXNbAQwBnhjX/1pxJyIiIiIiIiIiPRIuTXmOmfcmZndDpxGbi26SuCbwGlmNoncVNaVwMcAnHPzzOwuYD6QAT7hnMvu6xhKzImIiIiIiIiIiOzEOXfNbpr/tpftvw98vy3HUGJORERERERERER6rCxdt8ZcR1NiTkREREREREREeiQH7V4v7kCgxJyIiIiIiIiIiPRQnbfGXFdQYk5ERERERERERHqsQFNZRUREREREREREupZzkO3BU1l77lg/ERERERERERGRHkwj5kREREREREREpMfSGnMiIiIiIiIiIiJdzGGqyioiIiIiIiIiItIdVPxBRERERERERESkiznQiDkREREREREREZHuoDXmREREREREREREuprr2WvM9dyUooiIiIiIiIiISA+mEXMiIiIiIiIiItIjOVT8QUREREREREREpFv05KmsSsyJiIiIiIiIiEiPpKqsIiIiIiIiIiIi3USJORERERERERERkS7mUFVWERERERERERERaSONmBMRERERERERkR5LVVlFRERERERERES6mtMacyIiIiIiIiIiIl1OVVlFRKTHWV63mUfXzmNzoo7j+wznjAGHE/PD3R2WiIiIiIhIm/XkxFynFn8wszIzu9vMFprZAjM7wcx6mdmTZrYk/7U8v62Z2W/MbKmZzTazYzozNhGRQ9XzGxbxiddu57+rZ/Ha5uX8av4z/M8bd9GUSXV3aCLSQXQNJiIiIoeK7VVZ2/M4EHR2VdZfA4855w4HjgIWAF8GnnbOjQGezr8GOB8Yk3/cAPyxk2MTETnkpIIMv5z/DGHPpzQSpzgcoyQcZXndZh5bO6+7wxORjqNrMBERETlkOGftehwIOi0xZ2alwKnA3wCccynnXDVwCfCP/Gb/AC7NP78EuNXlvAaUmdmAzopPRORQtLJuK6kgQ9R/ZyUDMyPk+by4cUmr+nDOMb/6Gf614n/569KP8mDlT9icWNFZIYtIG+kaTERERKTn6MwRcyOAzcDfzWymmf3VzAqBfs659fltNgD98s8HAWua7V+Zb2vBzG4ws+lmNn3z5s2dGL6IyMGnIBQhcA7nXIv2rAsoicRb1cdb2x7gxc23kcjW4VuU9U0L+W/lD9mWrOyMkEWk7XQNJiIiIoeUAGvX40DQmYm5EHAM8Efn3NFAA+9MmQDA5f4ydLvZd4+cczc55451zh1bUVHRYcGKiBwKBhWUMbq4grp0ckdyLhME4OCiIUfuc/90kGBW1cNEvDghL4pnHlG/iKxLM6vq0c4OX0RaR9dgIiIicshwDq0xtweVQKVz7vX867vJXSRu3D49Iv91U/79tcCQZvsPzreJiEgHMTO+cdSFDCvqTUMmRWMmRTLIcP2YE5nce9g+92/IVBHg8KxlUe+QRdmcWN5ZYYtI2+gaTERERA4pPXmNudC+N2kf59wGM1tjZmOdc4uAM4H5+ce1wI/yX/+b3+UB4JNmdgcwBahpNt1CREQ6SN94CX8+4X0srdtETSrBYSV9Wz2NtSBUhgGBy+KZv6M941L0ig7Z844i0mV0DSYiIiKHlgNn9Ft7dFpiLu9TwL/MLAIsBz5EbpTeXWb2YWAVcGV+20eAC4ClQGN+WxER6QRmxpiSfvvecCcRL86E0jOZXf0YYS+OR4i0a8Izj6PLL+yESEWknXQNJiIiIoeMA2X0W3t0amLOOTcLOHY3b525m20d8InOjEdERPbf1D5XEvELmF31GImglj7RYZzY5730ie17KqyIdA1dg4mIiIjsPzO7GXgXsMk5NzHf9lPgIiAFLAM+5JyrNrPhwAJgUX7315xzN+7rGJ09Yk5ERA4yZh6Te13MMeUX4QhaTGkVERERERHpSg46cyrrLcDvgFubtT0JfMU5lzGzHwNfAb6Uf2+Zc25SWw7QmcUfRETkIGZmSsqJiIiIiEj3crnKrO157LNr514Atu3U9oRzLpN/+Rq5wlntpsSciIiIiIiIiIj0WAHWrgfQx8ymN3vc0MZDXw882uz1CDObaWbPm9kprelAU1lFDlFBUI/hYV5Bd4ciIiIiIiIi0i6O/Sr+sMU5t7t1effJzL4GZIB/5ZvWA0Odc1vNbDJwv5lNcM7V7q0fJeZEDjGZ9DLqan9IJj0PMCKxUygu+TKeV97doYmIiIiIiIi0kXXmGnO7P6LZdeSKQpyZL6SFcy4JJPPPZ5jZMuAwYPre+lJiTuQQEgTVVG+7kcA1YFYCOJKJ58lm1lLe+1bMNLtdREREREREepbWrBfXUczsPOCLwDTnXGOz9gpgm3Mua2YjgTHA8n31p8ScyCEk0fQEztXjeaX5FgNKyWZWkEnPJhyZ1I3R9VzOOeqbHqam4Z9kg63EI8dSVvwxIqHh3R2aiIiIiIiItJOZ3Q6cRm4tukrgm+SqsEaBJ80M4DXn3I3AqcB3zCwNBMCNzrltu+24GSXmRA4h2exqHI7mg3zNDOcgm91AuNsi6zhbt9Tx8IMzmf32anr1LuLCi47mqEnDOu14LqintvYX1DQ9QEAcswgNiedoSr7OwD63Eg7tV4EeERERERER2Yf9WGNuH/26a3bT/Lc9bHsPcE9bj6HEnMghJBSagHFvi7bcdHhHKDSqe4LqQNu21vN/X7mL2pomorEwmzfVsnD+Oj74oVM565yJHX68dOPdpOt/B9k1lGIENFHPAMwrJRtUU9NwO31Kv9DhxxUREREREZEc5zovMdcVtKCUyCEkFj8N3x9EEFThXArnEuCqiURPIRQe093h7RA4x9amRpLZTJv2e/SRWdTWNlFSGicaDVFYGCUaDXHHv14hlWpbX/uSTc0kXf8bHIbDAzw8khS69QCYRUmmZnfoMUVERERERGRXgbN2PQ4EGjEncggxi1PW+yYa6v9OKvEUWJR4/MPEC6/q7tB2eGrVMn4741WqkwlCnsflh43nhiOPI+z7+9x33pxKopGWH2vhsE9jY4pNG2sYPKR3h8WZaboPcJjFID9B2PAIkcRzKbIuRTg8osOOdyALXACAp+IhIiIiIiLSDbqy+ENHU2JO5BDjeeUUl3wOSj7X3aHsYvqGtXz3lWeIeCFKIlEyQcAdC+bgHHzymKn73L+ibwmVq7cSjb2zWl4QOILAUVwS79BYXVAFhDDz8a2MrKvOj5wD5xowC1Na+L4OPeaBpiFTy1Mb72Zh7UzAMbb4aM7qdwVF4dJ97isiIiIiItJRNJVVRKQD3DpvJoYRC+XuGYQ8j6JwhHsXzyORSe9z//MvnARmO6atBkFAfX2C46eMorS0oENj9aOnAhmcc4T8fvheL3KFdxzmD6Zf+S+Ihse2ur9sEHDn0llc8fhtnPfQX/n2m0+wtqGmQ2PuSFmX4V+rfsX8mhlEvBgRL87C2rf456pfkAn2/bMSERERERHpCA7DufY9DgRKzInIAWNtXS3RnaashjyPwDlqksl97n/4uIHc+ImzCIdDNDSkaGpKc9LJY/nIjWd0eKyh2IV4oZHganGuAd+iRPyBxEt/zqCKu4lHj29Tf794+wV+P+cValMJPOCpyqXc+Pw9bEs0dnjsHWFF/QKqUpspCBXhmYdnHvFQETXpbSyrn9fd4YmIiIiIiPQImsoqIgeMIyr688yqZUT8dz6aktkMBeEIveOtG/F24smHMWXqaLZsqaOwKEpRUaxTYjWvgGj5n8g0PUY29RKe14dQ/FK88Lg297W5qZ6HVy2gJBLDs9xdm/JonJpUggdXzufaw4/t6PD3W1VqM4HL7tKedRmq0pu7ISIRERERETlU9eAl5pSYE5EDx3UTj+bltauoSSaIh8KkslmyLuCLU04g5LV+gK8f8ujXv/PXOTOLEy64jHDBZfvVz+r6akKetyMpt51vxtxtG/ar793ZsqmWZx+dw/rKbYwZN5BTzh5PUXHb1uDrHe2Pbz7OOSwft3MO30L0jvTv8JhFRERERER2y/XsNeaUmBORA8bw0nJuOvdS/j7nLWZvWs+IsnI+OOFoThw0tLtD61T9C4rJBEGLJBdA1jlGlXZcJVmA5Ys38KOv3E0qmcE8463XlvHYfTP45i+voVef4lb3M7xwLH2iA9iYqCTqxwEjFTTRJzqAkUXjOzRmERERERGRverBQ+aUmBORA8qI0nK+c/KZ3R1GlxpUWMoJ/Yfx8oaVFIWi+GbUp1NE/RCXDJ/Qocf6+2+fIp3OUtSsSm3Vtgbuv/01rv/U2a3uxzOfa4Z9hhc2PcjcmjcAx1FlJzGt4mJ88/e5v4iIiIiISEfRiDkREdkv3zj2bP4071UeWrWAlEtQVpwkHs3y3QW38q6Bx3PegGPxbP/q9TQ2JFm9YgtFxS3X3YsXRHnr1WVtSswBxP1Czh1wNecOuHq/4hIREREREdkfTiPmRERkf8RDYT571KlcPWYiX5p9M6lsloJQjPp0gn+seJqtyTo+MKJ1Iwmrt9Xz4N1v8tZryygsjHLuJcdw0hnjCIV9fN8IAofvv3NHKcgGxMvatsaciIiIiIiI7D8l5kREDiCPb5hBMpumJJyrQuv7HiHP59H107l08IkUh/eeQKuva+Jbn7+DbVvqiMUj1NU08dffPEnlqq1c8+FTmTptLC8/s5Ci4hhmRhAEpFIZzrn46K44vV0ksxkeXrWAJysXEfFDXDxsAqcPGr1LIQwREREREZHdcWgqq4iIdJAl9esIey0/mn3z8MxjU6Jqn4m5F56cR/XWekpKC3a0hSMBTzw4k/Mvn8z7P3Y6VVsbWDinEt/3yGQCTjt3ImdccGSnnM/eZIKA/331QWZvXU/Y8whwvL1lHTO3rOV/J5222322JRrJBAEV8cIWhTJEREREROQQ5QAl5kREDi5N6TRh3yfk7d+6bm01vLAvS+vWEfcjO9oCFxC4gD6x0n3uv3BuJZ7fMmbf9/A9j7WrtjJh0lC+9P13s3bVVrZtqWPgkF707lvS4efRGq9vWsXcbRsoiUR3JNkC53h49QKuHH0UQ4vKd2y7vqGO777xDHO3bsSAYSVl/N/xZzCmrE+3xC4iIiIiIgeOg3KNOTMrAb4CDAYedc79u9l7f3DOfbwL4tur5ZsbuOrPr3Z3GCKyD/PX1wL0iP9fG9IpKmtqaUqn8czoXVDAwOLiLhudlQoKWV4/Cge56ZwOsgSUhYu4Yc7sfe6/KYiybfAA/FCzyqjOkc06vv7CKiKvr225w/T1HXsCbbCusYZNTX0J7VTUIusCPrzyLXpFc6P+HLBg2yZS2Sy+VwHAhsBxyZsvMr53X/z9LIohIm2nazCRnqEnXYOJiOyXHpyY29tfM38HDLgHuNrM7jGzaP69qZ0emYhIF0tmMizbuo1EOkPI8zCMzQ0NrK6u6bIYIl6YYYV9iflhsi7A4egTLWFAvHzfOwNlvYtya8dlg9xtI+fIZgMKCyNEogfWIOmw+Xt8r/lIxbpUknSQ3fEzMYyQ55F1jqpkU1eEKiIiIiIiByzDufY9DgR7+yttlHPu3fnn95vZ14BnzOziLoirVUZWFHLnx07o7jBEZB+236U90P9//fVLr1AzfxulsdiOtsA5GlLV/PaaU+hbVNSl8WSCLJ4ZXhtHhC2cU8nNv3uSTRtqMeDYk8Zw3cfPoLAots99u9KWRAPvfepfBATE/TAA9ekUvWMF3H7WpYS9XOLuoRUL+emMxZREoi32r0o2ccXYQfy/I6d0eezSde66sbsjkN3RNZhIz9BTrsFE5MDT467BevCIub0l5qJm5jnnAgDn3PfNbC3wAtC1f52KiHSBFVVVu6wp55nhe8am+oYuT8yFvD2PKNubw48YzI//dB01VQ1EY2HiBdF979QN+sQK+ekJ7+K7M55kW7IJ5xwjSnrx7WPP3ZGUAxhbnltHzjm3Y0qxcw7fPI7o069bYhcREREREekIe0vMPQicATy1vcE5d4uZbQB+29mBiYh0tYn9+vH2+g0t2rJBQDZwDC7tngIJ7WVmlPU68O+hHNV7IHed/UFW1VUR8X0GFpTssp7fmLI+nDpoBM9VLifi+xiQzGYZ16svU/sP7Z7ARURERETkwOA4YKaltsceE3POuS/uof0xYEynRSQi0k0unTCOBxYsoCbRRGEkSiabJZHN8J4jJlIWj3fIMWpqm3jh1cVUrq9i1PC+nHz8aAoKIvve8SDmmTGipNdet/nmlDM5pu9A/rtsAekgy7nDDuM9YyZ2edVcERERERE5AB2kU1lFRA4pfQoL+eOll/DXN6fzZmUlvQoLuPKIiVw8flyH9L9m7Ta++ZMHaEykAHj+1SXc/+hMvveVS+lVVtghxzhYhTyPy0ZN4LJRE7o7FBEREREROeAchCPmREQORYNKS/jmWWd0St9/+/dLNCXSFBe+U4Rh67YG7vrvdG68dlqnHFNEREREROSg14NHzGkOkIhIF0ilMyxYsoHCnaatFsTDvP7Wim6KSkRERERE5CDg2vk4AOwzMWdmBWb2f2b2l/zrMWb2rs4PTUTk4OF5Hr7nEQQtP/2DwBGNaPCyiIiIiIjIoag1I+b+DiSBE/Kv1wLf67SIREQOQiHf4+Qpo2loSuFcLjnnnCORynDOaeO7OToREREREZEeygHO2vc4ALRmmMYo59xVZnYNgHOu0cwOjOhF5KDmnGPR9OW8+vBbuMAx5fxJjJ86hp76EXTtVSewYXMtS5dvxMwIAseUo0dw0TlHdXdoh6zV66t46o1F1NQnOH7iUKZMGEYo5Hd3WCIiIiIi0gbuAJmW2h6tScylzCxOfvatmY0iN4JORKRT3fWLh3j0ludxQW4BgBfue4MzrjyBD3z98h6ZnCssiPLtL1zEyjVb2bi5liEDyxk0oLy7wzpkPT9jKb+94wWyQYBhvDhzGRNG9ucbN5xHWMk5EREREZGe4yBPzH0LeAwYYmb/Ak4CruvEmEQOWUHgmLV6Hau3VjOgrITJwwcR8g/NGi1rl23ksVuep6Aohpf/HgRBwLN3vcqp757C8PGDuznC9jEzRgztw4ihfbo7lENaIpnmj/95iXAoRGE4l4RzzjF32QZenrWc044d080RioiIiIhIqx0g01LbY5+JOefcE2Y2A5gKGPAZ59yWTo9M5BBTn0jypTsfY/mmbWSDgJDnMaC8mJ9dcyHlhfHuDq9DZIKA/yyYyz2L5tGQTnHioKF8dNKx9C8q3mXbBa8vJZsNdiTlIFdAIZMJmPfq4h6bmDtYrW1czKtb7mNzcg3lkf5M6X0xI4qO7O6w9mjJms0EzhGPvDMyzszwzHh19kol5kREREREehDrwSPmWlOV9UHgHOA559xDSsqJdI7bXprJkg1bKIqGKSuIURSLsGZrDX98+rXuDq3D/Oz1F/nDW69Tk0zgcDyxYik3PPpfqhNNu2wbK4y0SMpt53lGvDAGwIY1W/nrDx7gC1f9jp9+9p/Mn7Gi089BdrW2cTH3Vv6cDU0r8PDZmlzLQ2t/x5La6d0d2h7FImGCwO0oxLGdc47CeKSbohIRERERkTZz+/HYBzO72cw2mdncZm29zOxJM1uS/1qebzcz+42ZLTWz2WZ2TGvCb80cuZ8BpwDzzexuM7vCzGKt6VxEWu/JeUsojIZbrJ1WHIvwwsIVBEEPTv/npYMsjy5fQkk0SiwUIuz5lMViVCebeHjZ4l22nzRtPOFIiGRTakdbKpEiHAlxzBkTWb96C9/6yF95+dG3qauqZ+HMVfzsc//mtSfn7tKXdK5XttyLOSPqF+CZT8SL41uYl7fcvUvi60AxanAfKsqLaEi88+8rkw0wg7OnjO3GyERERERE5AByC3DeTm1fBp52zo0Bns6/BjgfGJN/3AD8sTUH2Gdizjn3vHPu48BI4M/AlcCm1nQuIq23u/yFkUvSuZ68kmVeIpMhZB7eTkUbPDPmbt64y/ZFZYX8z+8/jB/yaaxP0FiXAIxP/vJayvqW8MAtL5FsTFFcVkAkGqawOEYk4vPv3zxBNht00VkJwObEasJey/s1IYtQk95C4DLdFNXeeZ7x9Y+cQ+/SAhoTKRoTKVLpNNdeNIVxI/t3d3giIiIiItJqlltjrj2PfXDOvQBs26n5EuAf+ef/AC5t1n6ry3kNKDOzAfs6RmuKP5CvynoRcBVwTLMARKSDnD5uJA/NWkhp3Nsxaq4umeKkMcPwvZ5fACLi+zQEAc65FqMCA+cYWbr7yqQTpo7hNy98i0XTl4NzHDZ5JNH8NMNFs1YRK2g55TASC9NQ20TttgbKK3Zdt046R2mkL9WpTUSaDabOujQFfgmeterXTLcY1LeMP331Khas2EBjIs1hwyooLTo41nMUEZFDQxAEuMDhHyTVxOvq6tiQmUf/0ASKi3UtJyJt0LVjWfo559bnn28A+uWfDwLWNNuuMt+2nr3Y519MZnYXcDy5yqy/A553zmk4ikgHu/aUycyp3EjltmrS2YCw79OvpIj/d9bU7g6tQ0T9EMcNHMTrayspikTwzahPpYiFQlx82Lg97heJhjnipF2nFvbuX8qKBfWEI+98jGUzuWIRBcXRTjmHzpRsSjLz6blUbaxm2IQhHH78aLwekpCd0vtiHl33R9KBEfaiZII0GZfkxN6Xt0jCHog8z5gwap83sURERA4o9dUN/PO7d/PqA9MJgoCjpk3gg996D32HVnR3aO329LLDGRSpxcexFqNyUwlnjVrY3WGJSE/R/sRcHzNrvjj2Tc65m1p9WOec2f6VnmjNUIa/Adc457L7cyAR2bvSghh/uO4S3lxeyeot1QwsL2Hq6CFEQgfuiKO2+u4pZ/G7Ga/x6LLFpIIs4/v05fPHn0S/wqI29/Wu95/Er758J+lUhnAkRDYb0FCf4Ox3H0801rMW71+/fCPfv+ZX1FfXk0ll8cM+hx8/ms//7eNEomESjUnmvrSQVCLFuKmHUd63tMX+zjka0ktpTK8gFupPcWQiZl2X1BtdfAxn97+el7fcS0OmmphfxIm9r+bIstO7LAYREZFDRRAE/Pja37Fy7moKSgswg9kvzOc7V/6Cnz71DeI9cPT3k8sOZ1ikhgDIAoZjaKSGJ5aO45zRC7o7PBHpCdqfGtvinDu2jftsNLMBzrn1+amq25d7WwsMabbd4HzbXu3xL34zO8M59wxQCFyy86gH59y9bQxcRPYh7PucOGYYJ44Z1t2hdIp4OMwXpp7CZ48/iUyQJRYKt7uvo04cw3VfuIC7/vA0jfVJAM687Fiu/PiZHRVul/nz/95K3bY6CssKgVyibd6ri3ny1ucYddRwfv6RP5FOpsn9tjGu/vKlnPehMwAIXIpFW79JdWI65NckLAgPZ3yfnxD2y7rsHA4vPYGxJVPJuBQhC3dpYlBERORQsnj6MtYsqKSovHDHyPSi8kLqttXzxiMzmXblid0cYdsNjtTm/6bevr5y7r9DIrXdFpOI9CCOVq0X14EeAK4FfpT/+t9m7Z80szuAKUBNsymve7S3oTjTgGfIrS23MwfsMzFnZiuBOnI3PjLOuWPNrBdwJzAcWAlc6ZyrstxvlV8DFwCNwHXOubf2dQwR6XlCnkeoA6ZpTrvoGE467yiqttRRXBonVtDzprDWbKll+exVFJYV7GgzM6KxMM/d+QoP/P5xstksBSW5u9+ZdJbbf3gf46aMYdj4IaytvYOqxBuErAQzy42eSy1jefVvGNv7G116LmZG2Hrez0DkYKRrMJGD18ZVW3K36nYaOJHNZFm7bEP3BLUf6urqCOHYeXqWA3w7uFZQeuj5uyke8C2K/TQ3v3oxv3v/T7s7JBHZBzO7HTiN3JTXSuCb5BJyd5nZh4FV5IqkAjxC7npqKblrqg+15hh7TMw5576Zf/od59yKnQIb0frT4HTn3JZmr7eXlf2RmX05//pLtCwrO4VcWdkpbTiOiByCQmGfigFlZIMGkpkqIn4FZgfHAsgN1Y0kEykKit+ZkhIK+zRlsrzywHSGjR/CxsaH8S224+LczAh5xWxrepHApfCsZ03rFZEOpWswkYPQoNG56uE7F9TyQz7Dxw/Z024HrOLiYtZUefgWtJiJZkDGHTwj8B9feBRnH1aHh+GAX5x5L2vW/IchQ1Z2d2giB4X9W+Vtz5xz1+zhrV2majnnHPCJth6jNZ909+ym7e62HqiZDi0rKyKHtsAlWVn1Y95efzHzNr6X2RsuY1vjU90dVquV9ilh5JHDaKxp3NHmnCOVSDPh5LHsbkC2A1KJFACBS7PzR7lzELgALQ0qIjvRNZjIQWDUpOGMPW4U9VX1pFMZMukstdvq6TOwF5PPObK7w2uXlcleGORTVg7DYcCKVO9ujqxj/Oj+v3J6aR2WP8Pt+od8nljUM39mIgcc187HAWCPiTkzO9zM3g2UmtnlzR7XAbFW9u+AJ8xshpndkG9ra1lZEZE9Wl39S7Y2PIJnMXyvKJ+o+z51ybe7O7RW+9jPPkhxr2Iaaxqp3VJLU20T4084jGu+fBmYkU5ldmwbBLnKs8eeMwmAPvFpZINcUi8bODZU11NZtZ6Zy4v4yh3PsnprdTeckYgcAHQNJnKQMjM+95f/x4U3nE0o5OMCx2lXnsj//edzROM9c0mJC8bMYUmyPxnn4WFknMei5EAuHD27u0PrEJdP+hHs5narA04o1jp6Ioe6va0xNxZ4F1BGy3Xm6oCPtrL/k51za82sL/CkmbWod92esrL5i8sbAIYOHdqWXUXkIJMJatnW+AS+V7Rj+qpnUTIuyca6f1McParVfSWzGd7csor6dJKJ5QMZXFjWSVHvqv+IvnzsZx/ktYemEwqHOO78oxl/wmF4nsd1372av3/tdhJ1Tbm1VnyPUy6fwvgTDgNgSMm1VCdnkMysZ0tdPclsQCYTY+aiM1m3bQOfu+0h/nbDFZQWtPZ+iogcJHQNJnIQixVEufpLl3H1ly7r7lA6zIWjZ7Z4PaGb4ugMRX4Ww9vt4JyDYwEWke7XWVNZu8Le1pj7L/BfMzvBOfdqezp3zq3Nf91kZvcBx7OfZWWdczcBNwEce+yxPfhbL9JzbG1qZEHVZkojUSb07odnXVrxZo8y2WrAdllTzrMIyey6VveztHYzX3jzfhoyKQKX+1i5bNiRfPzwU3ZZWHnG26u4/5GZbNpSx9jR/XnPxZMZMqhXq46zav4a7vvNIyyduYJ+wyq45JPnM/roEfz0Q79n+exVuTmoZqyct4Yv/uOTFJYUMO2KEzjsmJG89vAMEg1Jjj5jImOPG70jrrBfxlF9/8LblQ8yc+mjJJJ9WLVxLOlMlOI41CWSPDtvGZcedzBd3orIvugaTETkwPHc1r68p9+WXdoNqAugYNddRKSturYqa4fa24i57W40swXOuWoAMysHfu6cu35vO5lZIeA55+ryz88BvkMHl5UVkc7jnOOW+TO4Zf5beGY4BwMLi/nFtAvpX1jc3eERCfXHs8guRQ4Cl6Q4ekyr+gic4xtvPUxDOkVROJpvC7hv1WyO6T2EE/q+U+vm2ZcX8ed/PI/veYQjPm+8tYJZc9fw/a9eus/k3Mp5a/jOe35OJpUhVhhl2dur+PmH/8DY40azdOYKisoLd1RVXT57FXf++H6u//57ARgwsh+XfeqCPfbte1Fq64/m9QV1FEZbFntwzmk6q8ghRtdgInKw2lS/llcqPwEW5bTBv6essE93h7SL/8w5mbN7bSBqUJP1+NvyI/natNepXTecWLObyQYEOL795Pn8oVV1G0Vkjw6g9eLaozXFH47cnpQDcM5VAUe3Yr9+wEtm9jbwBvCwc+4xcheDZ5vZEuCs/GvIlZVdTq6s7F+Aj7f2JESkc7y2YQ03z3uLglCYwnCEwnCYyvpavvryEzjX/Z98nkUYVHIjgUuQDeoJXJJMtgbfiuhXtKfiOe9IZRt4eePtjCx+mmN6z6UoVJ3vN/fR+Gjl/B3bZrMB/7r7daKREAUFEcIhn+LiGKl0hnsefGufx7rnlw+RSWUoKi8kFAlRUBInFA3z8n/fJF4cb1FVtaAkzov3vt6m7/HQPuUEzu2yj5kxpv+Bd9EqIp1K12AictB5eNEZ+DVTOLV4OqcWvUymehL3LXxPd4fVwgtLJ3Fpnw0UeuAb9A4FfPGwWfz05Yt5YcnP2JQJCAhwBNQHWb74+mT+8KE/dnfYItLNWjNizjOz8nxCDjPr1Zr9nHPLgV0WeHLObaUDy8qKtEUmSBOQJeJpva3WuG/pPMzA93KJKjOjOBJhWc1W1tTXMLS4rNOOvSlRy9PrF7ChqYYjy4dwct/RRP3wLttVFF1CJNSPDXX/JpXdSEn8WPoXv49oqP9e+09m63h63VeoSq6nT7QR3zYzsGAVc6umsCU5CMNIBe9UNa2pbaKhMUlRYctFlWPRMAuXbdjn+SyduYJYUct9o/EI2UwWFwQ0X2HEzAgybauoOrJvL44fNYTXlqwmHglhZjQk0/QvLWLa+JFt6ktEejZdg4nIwebR5T/jhKLFLQbFGHBq8avM2/w6EyqmdGN0OTMWzWdKSX2LQTuO3EiY64cvoPegK4ArdrwXBX6tMjsiHaf7x420W2sScz8HXjWz/+Rfvwf4fueFJNLxmjL1PLXxDpbUvUWAY2BsJOcMeB99ogO7O7QDWn06hb/TGmtmhmdGUzrdacedV72Wr751H6kgV430yXULuHvVdH527JUUhnatNlYam0ppbGqbjrGk5hHq0xspDJexMZEhEzhCXpbDS9/ipY39CQg4e+DYHdsXFkYJ+R6ZbEDIf2ewcSqdYfjQfY9IqxjSmzUL1xIKv/Oxm0llKCiOk2hIEI6+k3RsrG3kuPOO3mV9u52lMmuobXoBcBTHTuTrl57Bna/N5pFZC0mmM1wwaSwfOOUYCiK7JjRFREREeooBdtNu2w3YUv1xqJjRtQHtxn9X/4gjJ+6aGwiAIq8HZwxEeoiDsvjDds65W81sOnBGvuly59z8ve0jciBxznH3mt+yMbGKqF+IYaxPrOD2VT/jwyO/TUGobWulLdy4mT++/AZz12+kNB7jykkTufLoIw6Ygggd6YzBI5m9eQMu5HYkiRKZDDE/zMiy1hU8AHAuQeDqaWx6ilj0RDxvz0vcBi7gJ3MfI3ABJeF4fn/Hirot3L96Ju8b2bYE3J6sa3wT3yIYMCBewtrGGtKBR8iSBGxjasVEpvUfs2P7aCTEuWdM4MHHZ1MQjxAKeSRTGYIALrtg37P7L/3k+fzqxptIJVJEYhEy6QxN9Qku/58LmfHE22xbX0U2G+CHfMr7lXHNVy/fa3/bGu5lY80vcS43sm5z3Z+pKLqe95/8Id5/cmtWG9g35xyL61azLrGZimg540pG4FtrVkAQERGRQ8HcdRv5/UuvkXWODx13DCeM7JyKzXEvs8f3CvxEpxyzraLZCcAru30v24MTBiI9Rg/+/6w1I+YAegENzrm/m1mFmY1wzq3ozMBEOsq6puVsTlYS84t2JJdifiGJbAMLat9gcq9dZvXs0eqqaj573yNkgizF0QjJdJq/vPom1U1N3HhS9w+h72gXjjycx1YtYVHVFgxHAITN41tTzyTs7bu4u3OOmrpfk0pHAMe2mn9hFqdP+a+JRibudp9NiTo2J+opajYyzsyI+mFe2Li4wxJzUb+EmnQlAAWhCCOKe1ObaiJwTXz5yIs4vmLCLsnWqy87Hs88Hn16DolEmuLiGDe8/xSOmjB4n8c75qwj+ciP3sedP76f+uoGwtEwl37qfC779AW85/MXMf3xt1mzaC2DRg/guPOPJlaw68jA7dLZjWys+SWexTAvNxrOuSyb62+mOD6NaHj/p64msil+sehfLKuvJMDhmUe/aC++NO6DlIaL9rt/ERER6dm++N/HuHfx/B1/Cz+zejknDRzKP953xV73a4/lySFUhJbt9r3K9BSO6/Ajtt3XzvsSmyr/Si8/d828nQfMairmxO4KTORQcTAn5szsm8CxwFjg70AY+CdwUueGJtIxajPbAHaZFuhwbEtubFNfd86cQyqbpTSWS5pEQyFCnse9s+fz/mMnURTdczKlJ4qHwvz+jIt5bs0KXt+wmt7xQi4acThDS8patX8y9Rr1DXdgXAdmeFZMEDSwteoLDOj7IGa7+QhyWzi512sMjW+mLlvC/Loj2ZQaQOAC4rtZY669xpRewKbEXAKXwbMQPkZhKEv/guOY2nf3ScOQ7/Hedx/Pey6eTENTkpKiOJ7X+pGSp15xAidddjwN1Y3Ei2OE81NMo/EoJ116fKv7aUi8AQSYvfP9MPNxQZa6xCsdkph7cN0LLK5bTXGoYMf/O+sTW/jXysf4+JiOv+AWERGRnmPuuo07knIeuesEh+Pldat5eN5CLpxweIce74RB99BUdTRRcy3WmKvN+lw29uYOPdb+uHvpV7lqzPcpaTbBYFkqzImjZnZfUCKHAHM9eypra+YkXQZcDDQAOOfWAW2b+yfSjSqig3DsplolRv/48Db1tWTzViJ+y/9tfM/DMDbU1e9vqAekqB/i3OFj+MbUM/nEUVNbnZQDaGh6JPekWVLU8woJXB2p9K4z4hOZdaza9hmOKFlCzK9mQHQlZ/V5mCGxpaRdwLsG77KWebsNiE9mYtnVZF2KTNBE2jXSJ3Y4Uyo+vc99w2GfspKCViXl6hoTrNlUTSqdm4Lh+z4lvYt3JOXaxTxwu//4tlZ9rO/bi5tnEfejLRLahX6M6VULyARtK0whIiIiB5ffv/Rai6Qc5K6tHXDz6x2/3ltZYR8ofp5FiV6knZFyxuzG/pT17v615Zr7+GkfovegpXxr9pncvHYEv5rzccYOW9DdYYnIAa41U1lTzjlnlss/mllhJ8ck0qH6RAcyuugoltTNJORFMYx0kKA0UsHYkslt6mtMRW+WbtlGvFlOJRsEOBz9izW9bxcuDewpedUyubNgy2ZmbfgBhdG1JF2EwDkyzghZlsmlLzOs5NucMaDj7r6aGePKL2dUyTlUp1YR88soiXRcaaxkOsMf73+F595ehme5hNy15x7Lu04Yv999F0VPwMwjcCk8iwDgXBozn+L4qfvdP0DWBdguPzvLJbl78jhxERER2W9Zt+drgawL9vje/hhQOpIBpbPfed0pR+kY3z/3z90dgsihx/XcNd9bM7TiLjP7M1BmZh8FngL+0rlhiXSsCwdezykVl1LgFxLyQkwqn8b7hn2RiNe2qadXTjqCiO9Tl0wSOEcqk6UuleLSI8YfdNNYO0JB/FzAtZjvH7gEZlEi4Qk72u6cN4f/98gDpJlJIvDIBA7DI+yFgAjF4RQfHX0EXicUHoj4RfSNT+jQpBzAXx96jadnLqEgGqYgFsEzuOnB13h9/qr97jvk92JA2f+BS5PN1pINaglckv6lnyMS2vd6d60xpfcEmrLJFm0N2SaOKB2d/7mIiIjIoSSTfacAw4eOOwaDFjfrtj+/elLHzXAQEWk1187HAaA1VVl/ZmZnA7Xk1pn7hnPuyU6PTKQDhbwwU/qcx5Q+5+1XP8N6lfHLyy7gjy+9vqMq60ePPYqrjjmygyJtv42bapg7t5JQyOfoScMoKYl3d0jEotOIx87GkQXnCIJqsAi9y76H5Ud6bWls5E8z3qAgHKbRRSmyRgIXIusCfHxCBoFz1Gc9YjvN/nTOMWfrBpbUbKEiXsTUfkOJ+PsuStHZmpJpnpqxhKJ4ZMd013DIJ5XJcvcLs5kyfth+H6O04CwKo8dQn3wNXJbC2BTCft/97ne7ywadzsLalWxMbCPjsvjmUxYu4gPDzu+wY4iIiBzq1jdtYUHtSqJ+mEllh1EY6v7rt+ZSmQzfu/8uXkwuIB0O6NNYxKeOvoAzjzqKkwYO5eV1qwma/WV7eFlvrp7c/dfFInLo6clrzLVq2EM+EadknAgwrl8Fv3n3u3DO7VJQors88OBb/OfuNwlcgJkR8j0+9cmzmXzMiHb1l80GPP3ATJ647y0a6hNMmjKSy689mYr+pW3qx8yjV9l3iISfIgjqKC35PAWxM/D9Pju2eXvjegBCnsfM6sM4v99reARkMVwQEA5lWNo0nLNCJS36TmYzfOXVx3hr89pcEs88escK+O2plzCwsOW2HWlF5VbWbqqmf58SRg3ps9t/Aw2JFI7c+oPNhX2frTWNHRZLyO9FWcEFHdZfc8XhAq6ouJQ/zH6STU2b6B3pxWUTTqciVt4pxxMRETmUOOe4p/JZHln/Mg6HYYQ9n8+MuYbxpe27futIjelKVtT8gzkbnqT/GMfY9cNZtGUIW2P1fGf+fygrKOQf77uCh+ct5ObXZ5AJAq45+igl5USk+xyMiTkze8k5d7KZ1bH7U9wK/NQ594dOi07kAHagJOVWrtrCXXe/QTwWwc8XpkilMvz290/x+998kMLCtk+x/efvnubZh98mEgvh+x6vPr2AuTNW8f2brqOkrKBNfZkZZkX4fhHFhSfs8n48FN5RHKJy6wSeD9dwYvkSopbFN2NZ01CisasoCMVa7Hf30jm8sWkNZZHYjp/F5qYGfjjjWX576iVtPmfIrYmyuHYDmSBgbEl/FryylEdve5FtG2sYe/woVsQ9Fq3Zghk4B2NH9OWrN5xLQSzSop9exQWUFERpTKaJRd75mG1KpTlpYvdfbLfG2xs28L+PPY5zEA8PYH0mwzc2PMc3TzNOH7n/VV9FREQOZYvrV/PI+peJ+1H8/FIdyWyK3y65k18f83kiXsdVom+rRGYTMzZ+hmSmjiaSFIXg1KELKIsmeGPtWNLhDDe9/gR/HjOaCycc3uEVWHfmnOOtqkU8tuE1qlP1HFU2hgsHnkh5RPUIRSSvh1dl3WNizjl3cv7rbj/xzKw38AqgxJzIXmxZu40n//kCS2etZMjYgZz7wdMYMLLjphy+8cYygqzbkZQDiERCNDYmmTO3kqlTRrWpv6ot9Tz32GwKS6J4+RFfxWVx6mqaeO6Rt7n4vbsm1/bH5AEDKQiFaEinKKCMRZsms7B+MEV+E0XxMo4on8BHhl+8y34PrVpA3A+1SJCWRKK8vWU9NckEpdHYLvvszVtbV/HDuQ/RlE3hmZGqS1F4Ww1lq4xQJMT9z86htlecwaN6ESrJQlOYBcs2cut/X+fGq05p0ZfnGR+76AR+eudz1DUmc9NY0xkKYxGuPL17113ZnKjlwcqZLKhdx/DCPlw0+BiGFvbeZbu/TJ+Oc1CcXzsxFInQlE7zxzff4LQRIw6YxLSIiEhP9NqWuQT5Ef/bRf0IjdkEi2pXcUTZ6G6LrbL+v2RcA9lsjMA14hxkMSb2W8XbG0aQzYZYl6nqsngeWf8K/1nzDB4eIc/niQ2v88a2eXz3iBsoDXdM8bW3l63hc//9M2R9/vWB/0f//v07pF8R6UIHY2KuOTM7BjiZ3Km+5Jyb6ZzbamandWJsIj3e2mUb+O5VvyLRkCQUCbFs1ipeuu9NvnTLxxlzdMeMnAqC3dfIdOTuMLbV+jVbCfn+jqTcdr5vLJ2/fq/71qUTOBwl4davjxINhfjpWefxpacfpyGVhlQvvLoyLjpmHOeNGE/fPUydDJxjTxVf21I1NJnN8OO3n+H+da8CuaITvaMF1G6to+pdHr3viRJpMBrKwxRMqiIxqRI/5AOOSGUfnnnT+NiVJ++SqDrpiBGUF8e578W5rN9Wy8QRA7jslIn0K+++u7uVjdv4/Ix/05hJEvZ8Ftas4+kN8/jeUe9hfFnL4hdLtm2lINzybn0sFGJDfT2pbJZoSAUgRERE2s/tsW590M1/XdYmF2CEiIbD5K4oDYeHcwEl0UbqUkUMDvVqVV9VyTXM2XwTicwiYqGxHFFxA+XRIa2OpSmb5L7K54l5UUJebh3hiBemJl3PMxunc9ng09p+gs2kUhnedcuXuWbqy3z8giYMx73rn+Wef07j6f/97n71LSLSWvv8y8rMvgG8B7g333SLmf3HOfc959ze/0oXOcT952cPkmhIUlRemGsojNJY28Q/v3cv377n8x1yjOOOHcFDj7xNNhvsGDWXTmfxzJg4oe0VOnv3KyGTyeJcy9Fo2axj0LBdR1YBbErU8OuFjzGnuhJwHFYygM+MPY8huxmJtTvjK/pyz3vey+yNG0hlsxzRrx/Fkb1PwT1v6Fhunv8mUd/fEWddKsm48grKoq1PDP5+3ss8vnYeZuCZj3O5KbEhDzwfto3IMmBuiMj4euKT6gjSHrkLVEcwZBNBo8O5HbNxW57X8P6MH37g3HG9bflLNGaSOxKncR8aMkn+uORpfnvcB1tsO6i4mNU1NRR426fpOuqTSTKZgNvffJtpY0Yyoo/WmxMREWmP43pN4PnNMwlcsKPqfCpI45vP2OL9LxK1PwrDw6lJzSfsF1BIlAZLggPPHNVBBD/wuOGEc/fZz9qGWSzZdB0hksQxLD2Ht9c9yJi+tzCocFKrYlnftBUHO5Jy24UsxNyaFe1OzGUzWe659RV+O+cJPvnRZ/DM0ZTN3ZDsF6/hg+c+wT8eOotr3zWtXf2LSDfowSPmvH1vwvuA45xz33TOfROYCnygc8MS6XjbEo08uGwh9yyey+ra6i455rzXlhAvbjmlMl4cY8Xc1aRTmT3s1TajRvXjoguPoimRoqa2kdq6JlLpDDd89HSKi3c/nXN1fRX3rpjNg6vnsS3ZshhBv4HlHHX8COprE2QzAc45GuoTRKI+Z7xr12mY6SDDV2bdyZzqNRSHohSHYiyp28BXZt1JUybV6vOI+D7HDhzEiUOG7jMpB3D1mKOY0Lsf9ekU2xKN1CYTlERjfPXYM1p9zEQmzSNrFhBtVsk1l6Az0nHDGaRjuU/4wgm1ZDNGxjfSLiDtIJkGRm+lIZls9TG708xtqyjwW66HV+BHWFG/iabsOz+rbHYjn568han9ZlLgbwUcG2rrWFtbS6Yxwz9fn8XH/nU/982a38VnICIicnAYVzKc0/tOpimbpCbdQF26kawLuHHk5cR2+l3d1QYXX4pnYTJBA4PKe1NqMeJ+msXV/Siur+D7R72Xo0fte73ZeZu+RYgkaeJkiJEmjk+SeZu+1epYSsOFBC7YZRZIxmXpG23/DcJ7b3uFR+5+kxFnVBLxsiSDMLmZGEZTNkpROMnd1fe0u38R6Xrm2vc4ELRmLtI6IAYk8q+jwNpOi0ikE7xUuZJvvvI06SDA4fDM+OD4SXz4iOM69bjF5YXUVTXkpz7mZDNZogVR/FBr8uKtc9WVUznhhDG8/fZqXMkSQkNeZrM9z7PrhjOx/L1UxCfu2PaWxW/wj8XTCQgwjB82PsnoVzzii9OMmzSMKz46jRu/8i7uvOl5XnxiLul0lhGH9eODnzyLigFluxx75rZVbEvWt5i+WhyKUZ9p4tUtSzij/4QOO8/m4qEwvz/1UqZvrmRR1Rb6FhRy6oARFIRbfzHbmE2TDQLioSg1sKPSrplB2HBNASVrckPh/GiGlDVL4AE4g3DAf16fzQdPPZa3Nq+lOplgXK++DClqWwXbrlAaibMt2UCIZv8eXUDECxHxcr8OEo0P0lD3Y4ZEs9x4RJrqxPP8e9HJLN50GP1ChVSECzAzMtmAP73wOqeMHkafosLuOiUREZEeycx4/7DzObXiaObWLCPmRzmmfCzlkc6rLN9aheGhHFXxAxZX/Y6G9EoqSgsYWHgFV437MP6Jrb/OKmARaRdtsfJIxkUpsEWt2r82uYwtDY9waq9NvLSthKhfimceyWwK3zzOHTClracGQDqd4ckHZhIvjBCKN2K7+cvccBQVJHazt4hIx9tbVdbfkhsMWAPMM7Mn86/PBt7omvBE9l99KsW3Xn0a3zMKwrmRWNkg4Nb5s5g6cCgTevfrtGOfd91p/OsH9xGK5KqbBkFAU12CCz58xi5ruO2voUN6Y+ULeGPzXWQthG9RqlPLeHHjdzil3zeoiE9kYfVGbl0yncJQGN/zqNpST11NAzPHGSeuifP268tY+PZqvn3Th7j2M2fzvo+fQSaTJRbf80XYlmQdWRfs0p4OsmxM1HToOe7M9zym9BvKlH5D27V/WSROn3gRNckmir1i6oI6nHMEzlEQizB8WwGhpVtpIE14XZT06AyW9QlcLrnrhQNcYwGPVy7lkcQStjQ1sH2Fu4uGj+Nzk07BO4CKJFw25Fj+uPhpwp6Pbx6BczRmU1wyeHLudXYTDXU/xiyGWZjCKMQjaT464TUWVw7H0WdHXyHfw6Udb61exznjx3TjWYmIiPRMZsawwgEMKxyw2/eXvLWc//7uMSoXr2P4xCFc+qkLGD6h9euz7Y+y6BEc3//PZIMmzMJ41va1ZbOEMQJcs0laRkCWfVecnb3pG9Q13QXAmAiM6Gc8U30Sa5LDKQ4XcO3wCxi+h+/bvjQ1pEins0RjYVZs6EcweCHb19LLxZhL1G1a2XHF2kSkCxwgo9/aY2+fsNPzX2cA9zVrf67TohHpBG9tWkvWOeKhdy4CfM8jGwQ8t3pFpybmznr/KWxdX8WTt72I5xvZTMDJlx3P5Z+5oMOP5ZxjTtWt+BYh5OWmsHpWSDpoYG7Vvzk9/gOeX7+MrAvwPY8gcNRWNRAyj4znqOnn6Oty1Vcf+88bXPs/5xIK+4TC/l6PO6KoAs9sx2iz7bGEvRCjiw+c9dV2xzPjsxNP5f+mPwouSjEhGl0DUc/jixPO4aLzjiJxZZLG2iY2R6v5+szf4key+M4Dy4LzSK8ZxKr4VgobI5TkK8EGzvHAivkcXTGQMwfvvapaOpVh3aotxAui9B3UuWu2nTfwSDY01fBA5Vt45pF1WU7vN45rR50MQCr1KhBg9s7/K56F8TzHkf1W8vbGgS36MzNCfscmmEVERATmvrSAn17/B5xzROMR3np6Dm8/N5+v3f4/jO6gAmKt4XutX7d3Z9nQGUQyj5F2HpgHLiBkKVKh8/a634aG56hruguHD/lR/iFLc075a4ys+Bb94wN3rMvXHkUlMUpK4zQ1pSi+dzDLx1YwqmQzmcDDzOGb4/UNI3n6c99r9zFEpIsdQNNS22OPiTnn3D8AzCwGbP/LcqlzTmN65aBg1rbqne3heR7XfOlS3nXD2WxavZneA3tRVtE5UxQCl6Ips5WI17J/32LUpFcC0Hx5jkw6C+S+D3E/TWlxBttYSjjis3xB6+u6HF4ykKPKh/HWtpVEvRAGJIIMhxX355hew/fzrDrfif2H8/uT382dy2aypqGaI3sN5KpRk+gXz1VPLSyOU1gcp4JejKo+mUWZeURLE9AUh839qat3UJ5ssS6eZ4bvedy/fP5eE3MzXljIzT96iFQyTZB1DD98AJ/4zrvp1bdz/o145nH96Gm8Z9jxrG+qpk+0mF7Ronc22EMV31g4hO8Z6WyWcH49vmQ6Q8jzOH5Y2wuMiIiIyN7987t34/ke8aLcTb9wNExDTSN3/uR+vnb7Z7s5utY5aeD3eH51JXGbj8MwC2hkItMG7j3htab2X7lrEmt+cziMkSaRfg6v4P2tjqGhMcmzry5m3qJ1DOhXyjmnjKN/31Ku/ug0bvrpoxR4EZ7++RnMeu9Sjh24gozzeW3lGP7vmK+286xFRNpub1NZQ8APgOuBVeTG9g4xs78DX3POpbsmRJH9c0zfQXhmJLMZon7un3w2CPDwOG3Ivheu7QjF5YUUl3fuOlyeRYj6JWSDNL69M/U065IUhwcBcNrAUdy1YhZZFxAKeUS8NB+a8CYn919J/BijqTHGw3ceT5+B41p9XDPjaxMu5YG1M3hy/RwC5zi933guG3Ic/n7czexoqWSGGa8vY/GC9fQbUMqJ0w6npDR3F/jwsr58c/K+q4t96dzz+NLtjg2r6wjySazJo/vxpr+2RQVbAA8jkUmTbEoRiYV3eb9y+Sb+8M17CYd94oVRnHMsn7+WX37xDr7z94/usn1HKg7HKQ7vegc8HD0B6jycS+8YNedchpAXZsqo9/DiyuUkM7mEbsj3+MYFZ1AU23ehDhEREdlV4AIClyXktZzamc1kWbN4PSW9i1q0x4tiLJ21sgsj3D9Rv4hzRtzNuoa32dK0gD7xcQws3LWQ2M4C17SHdxzZoPVjRKpqGvnqj+9na1UDnmfMmL2ax56bz9c/fT4nnDaO4pI4D9zxOsXrqxkz9wguPnIqQ4ZXQOcuQS0ineVgHDEH/BQoBkY45+oAzKwE+Fn+8ZnOD09k/xVFInxj6hl8+9WnSWQSBM7hex7vHXcUE3ofPGtHmBmHl13J21v/BkFuCmLWJQlchvHlVwNweFk/3jf6GP619C0yQcCNx7zJlF7LydRGSaZ8wqEU7772BQrLr2nTsSN+iCuGTuGKoe1bhLezNdQn+O6X/8OGddUEgcM84/473+Ar372cYSMrWt1Pn5JC/vLRd/P26vVsqW1gZL9ejOjbiyse+yc1ycSOwhPOOWrrm9jy1DI+9rUfUFJeyGUfPZ3TLp28I+H2/IOzCLIBkXzlXDOjqDTOulVbWLV4A8PHtm/dlP3h+/0oLP5fGup+hnO59fIgREHRpzir3zQmjziemavX4Xsek4cNoiiaO9/ABSyqq2Rp3VpKw4Uc2+swCkK7rwgsIiJyqEtmEzy58X5m17xO1mUYEh/J+QOupF8sdyPV8z2KywvJpDKEo+8k7dLJNL36l3VT1O03sPCoViXktutX+C7WpqcDAeTXp3NkMYxBRRe2up/7H5/Flm0NlBS/c03S2JTiT7e9wK+/fSUTjxnOxGOGt7o/ETnAHaSJuXcBh7lmtamdc7Vm9v+AhSgxJz3ItCEjuKvPNby8dhXJbJbj+g9mRGnnrufVHUYVn4dhLKi+i2S2hoJQBRPLP8DAgndu/X147FTOHHgYszbP4fjIrSTrymlIJsgGAX4oRnkfKCh5HDi5+06kgz14z3TWVVZRXPLOKLGG+gR//d1TfPcXbUtCep5x9PCWa61947gz+d+XH6EmmcDhSDWlYUk9vRdBQXkhqUSaW3/6MH7I59SLjgZg2+ZavJ3WZzMzPM+jrroRgCBwPPL8XB54eg619QkmjBnABy45nuGDe7fn29AqsYJLCUenkE6+BDjCkZPwQ7k/FMoL4pxx+KgW26eDDL9cdA+zq5eRCbKEPJ9bV0b5+oT3Mbywf7PtEqxtnEM6SDIgPo6icOedg4iIyIHs7sqbWd6wgJhXQMRiVDat5B8rf8X/G/U1isNlmBkXffxc7vjhfZhnhMIh0qkM6WSaSz659/XZttu6uZYFcyqpq22isKhn3SwbWnwFG+rvIZuZAwS5taPMo6zwwxSEW3/j8o1ZK4nFWv65G4+F2biljuqaRsrLVFVe5GBhHKRrzAGueVKuWWPWdldTWuQA1ydeyCWjx3d3GJ3KzBhVch4ji88lcCk8i+x2SuTw4l4MiQ2gYVsBxX0K6N27NL8/ONdEkK3s6tA71esvLSEaazlNpKAwyuoVm6mtadoxpbW9JvUZyO3nXMOTa5awuamBt256k/B8R0G+mm0kFsYB9//12R2JuSOnjOStFxa1KJqRzWRxzjF8bC6h9c//vsEDz8wmGgkTjYaYvWgtX/vlg/zsy5czoJPWKgTw/QH4Be8BcqP/lq/fypaaBob1K6dfeXGLbZ/fNJtZVUspCsWxUO48GjIJfrP4Pn4+6UbMjI1NS3hi/c/JBMkd6zoe3etSju51aaedg4iIyIFoc3I9KxsWEfeKdvz+j/uFNGXrmVn9KqdWnA/A+defQaoxxcM3PUljUxORWJirv3I5p1w+dZ/H+O8dr3H/7a+Dwbqhg/A8Y8mCdYwZN3Cf+x4IPC/E8QPuZE39/WxqeATPChla8l4qCto2M6OwIEpNXYLmRWC3/3Ubje67MqyI9DA9OEu1t8TcfDP7oHPu1uaNZvZ+ciPmROQAZWb4tve1vzx/CFjL9cQAnEsRikzu7BC7VCQSwgUtP6lzF2ZGKNQx6+BVxAt572GTALj+7aeJFbX8/keiIbZurCEIAjzPY+rZE3nqnulULt9EKOwTZAMCB5d/eBrFZYXUNyZ5+Pl5FMaj+PmRdcWFMWrrEzz07Bw+euVJHRL33tQ3JfnuP59iweqNOyoZn3n0GD556Un4Xi6mFzbPJuT5LRLABX6UTYlqNiaqqIgV8+T6X5B1aSJ+AQCByzJz230MjI+nX/ywTj8PERGRA0V1aitm3m5unHpsSrxTfMvzPC779AVc+LGzqd1aR2mfYsKRfSeTFs9fy/23v06sIILve3i+R5AN+NX3HuBXt3yEcHhvf/4dODzPY1jJ5QwrubzdfVxwxkT+dNsLBIGP53k452hoSDL1mBE7bp6KyEHiYK3KCnwCuNfMrgdm5NuOBeLAZZ0dmIh0LvPiRAtvIFH/W3A+WBgXJPD8UiIFV3bacZ1zvDV3Dc+/sYRsNuDU48dw3JHD8LzOK3ZwxnlH8M+/vUAkGsLMcM7RWJ/gyMnDKSjs+OIFQ0b1Y92KTTsqqQEkm1IMGNYHL5/QisYifO0P1/L8gzN587mFFJbEOfOyyRw5NVfFddPWOszYkZTbLhL2Wbpqc4fHvF1TpomGbCNl4VL++OCrzFu5gZKCKGZG4BxPzljMyAG9ueiEZqNP9/JLcGPTYtJBYkdSDsAzHwcsrXtFiTkRETmk9In2x7mgxYj5nIBBBcN32T4SDdNnYK9W9//yswsIXNDi+sHzPZoaUyxZsJ7xRw7Zj+h7ltOmHsbqym089tw8PN8jmw0Yf9gAbnjfKd0dmoh0hoMxMeecWwtMMbMzgAn55kecc093SWQiBzDnHIkgScQL47co5d6zRAuvxvMHkGr8N0GwhXBsKtHCD+D5nVcU4693vcKTLy7IvTDjjdmrOOXYUXzq2tM6rRLpmecfwdKF63nj1aV4Zjhg0NDefPiTZ3bK8d7z8bP4xef/RWN9gmg8QqopRTYbcOUnzm6xXawgyrlXTeXcq3adltKnvBAXuB0j7LZLp7MMG9T6C/TWSgVp7qm8nxnbZmJmhC3Mok1FFMf77fi5eGZEwyEefHXejsTcaX2P4q91a1v8gdGYTdI/1ot+sXLWNlbu4efqyLpUh5+HiIjIgaw80ocJJZOZU/smYYvimU8yaKQwVMKk0v0vopVJZ8mttrSrbL6y+qHC84zrrjyBS845ktXrquhVVsiQgQffGtMi0nnMbCxwZ7OmkcA3gDLgo8D2ERNfdc490t7j7HMss3PuGeCZ9h5A5GCzsHY5/179IBsTW4l4IaZVHM8lg84i7PWMqQE7C8emEY5N65JjrV63jSdfXEhBPLpjhJxzjpemL+fcU8czdmS/TjluKOTziS+czyWrtrJ65RZ69SnisHEDO22U3sQpo/jfX72fe/70DJXLNzFoVD8uv+F0jjxhTKv7KCmKc+aJY3n8pYUUxMKEfI/GphShsM/FZxzR4THfveY+ple9RYEfxzOPRCZFdNxKWBCH2rId2/me0ZhM73g9reJIZlUtZUbVEoIgwPd8Cvwonz7sMsyMfvExGB7ZII3v5abgOOcwjBFFx3f4eYiIiBzoLhr0XiqiA5he9QLJIMERpcdzet8LiYf2vxjBcSeO4eVnF7S4YeYCh+97PWaNuY5WXlaoQg8ih4JOGDHnnFsETAIwMx9YC9wHfAj4pXPuZx1xnJ6ZSRDpJmsa1/PbJbdhGEV+AVkCntz4Ck3ZBB8Yfml3h3fAW7B0A865FgkxMyOTDZi3ZH2nJea2GzysN4OHdU010PHHjmT8X0fuVx/XX3EipUVxHnpuLjX1CcYMq+D6K05gcP+OvdvblGnirapZO5JyALFQhHDII9G/klCzxFxjMs1pk96pzOp7Pp8dewVL69eyrH4dJeFCjikfQ8zPrd0S9uKc2vcGntv0R9KZBOAw8xlZdAKDC47s0PMQERHpCXwLcVLF2ZxUcfa+N26jI48dztRTxvL6S4vJZgKy5VnMjBs+ew4xrasmIgexLlhj7kxgmXNuVUfP9FJiTqQNntjwMlkXUBTKrZcVwqfQj/Pq1llcNvicHe2yewXxyG5Hqfm+UVTQ8Wu99XQh3+OqCydz5QXHEDi3o+BCR2vINoLZjqTcdr2KitjYkKK2MYlnuYIZFaWFXH3a0S22MzPGFA9mTPHg3fY/ovh4+sSGs7z+dVLZRoYUHkW/2NhOm7osIiJyoNq0dhtrlm6kV0UJw8cN7PDfhZ7n8bHPn8dp5x3B7OkrWVfZSElZnONO0pquInKQ6/zE3NXA7c1ef9LMPghMBz7vnKtqb8dKzIm0wYbEZsLW8n8bzzw886hO1R5yibm6RJKVVVX0LihgYGnJPrefPHEo0UiIpkSKeCx31zaRTBMJ+0yZNHyX7Z1zVKUqSQcJekeHEfIOzTu9uSq7nZfEKguXEvHCpIM0Ye+dim/mB5w35nhC0dGs2VzD+GF9OX3SaIribU+iFof7clT5RR0ZtoiISI8RBAG3/OghXnp4Fp6fK0Q1ZHR/Pv+L91Fc3rHTLM2MwycO5vCJg7nnz692aN97s7B6E/9e+har6rYxvld/rhl1NEOLtKabiHQBx/4k5vqY2fRmr29yzt3UfAMziwAXA1/JN/0R+G7+qN8Ffg5c394AlJgTaYORRUNY07ieKO8kiLIut5Bun+ihc+HhnOO2GbP454xZuamoQcDE3hV86ujJjBzZv0WxguYK4hG+/snz+MlNT1HfkAQgHgvz+Q+fSWlxvMW2telNPLH+19Sk1udGc+FzSt8PMbr4hE4/v0NNyAtxycALuWvNvaSDDCEvRCpIE/fjvGvoWfQa0/HFJkRERA4lzz/wFi8+NJPCkjiel0vMrVq0npt/+ACf+ck13R3efntz02q+/MbDBDgiXohVqxfy7Nql/PHkdzOipGuWERGRQ9t+TGXd4pw7dh/bnA+85ZzbCLD9K4CZ/QV4qN1HR4k5kTY5u99JvL71beozDcT8GNkgS8qluXjgGcT8Q2cq5gvLV3LLmzMpjISxAGo21vB05TZmPjmPo9d4fPj/LuXIE3c/ZeKwEf348/euYemqzTgHo4f1IRRqWdnWuYDH1v2cmvRGol5hPvmX5rmNN1EeGUTv6NCuOM1DypTex1EWKePZjc+zLV3FYUWjOaPvNHpFlZQTERHZX0/f/QbhSGjHkh5mRmFJnLdfXkJDXROFO92g7Gxzlq7k5hefZVOinhMGj+K6M0+nqKB9MTjn+NXcF/HMKArlrodjfoiaVIK/Lnyd7x9/QZv7TCUzpNMZCgqjWvpCRA4E19BsGquZDXDOrc+/vAyYuz+dKzEn0gZ9ouV86fAbeGDd0yysXU7vaBnn9D+JE3ofve+dDyL/eXsuIc8IeR7rV28hmUgR8Txq+kWoX9rAb754O9++9f8xaGTf3e7v+95eCz1sTq6gLr15R1IOIOSFyWQSLKp9gRMr3t8p53WoG1s8hrHFra8cKyIiIq2TaEzh+S0TTNvzTelUpktj+c/zL/PDxU+S9RwWgXmbtnDvzbO45wOfory0uM39NWXTrG2ooSTc8iZ1YSjCrK3r2tRXY0OSW29+gddeWkwQOAYP6c31N57O6MP679jGudywGCXsRKSFTlpjzswKgbOBjzVr/omZTcofdeVO77WZEnMibTQgXsHHRl3d3WF0q+qmBCHPI5XMkEykclNX89dGXlGEzKZGnrt/Ou/7XNvvkAIkg0bMbJcLLjOPxmz1fkYvIiIi0rWOO2M8j/7rFSLRd9ZybWpIMmBYH0p7FXVZHKlMhp/Nfwp8RzSdW3rEAVvjSX758EN8571tn1Yb9ULE/BAZFxC2d2ZBpIMs/Qvaluj7zc8eZd6cSgoKo3iesW5tFT/89v386JfvpbRXklU1f2Bb04sYPn0KzmJo2Y2EvLYnE0Xk4NNZVVmdcw1A753aPtCRx+icEn8iclA7cfhQmtIZspksYGCQ9SCSdsSS4HnGlnXV7e6/IjoCBwQudwc5GwTUJRIk0mkGRY/skHPYWeCSbKj9OzMrL+HJBafxs8ev52N//wcPzlxAEHR+iR8RERE5eF3w/pPpN7gX9TVN1Nc0UVfTiB/yuf5rF3fpyK+Zi5eRCjtCwTt/BhrgB/DythXt6tP3PC4fcSSNmTRZFwC5pFwqyPK+0ZNb3c/aym0smLeWouIYvu9hZhQURkmnMjz7zEzmbf40W5uex7dCPIuyueERFm7+Ai5/TBE5xLl2Pg4AGjEn0gPUbK1j7bJN9OpfSv+hfbo7HK46+gieW7aCTbX1ZH3I+Lks/2Ershi5ymMTpoxqd/8xv4jjel3BG1vvpD6RpLYxhZmjvraMbz62gu9eNY6xAys67Hycc6zY+lWqm15nfXWabABHDJnJoF4r+cMzCdZV1/Kx06d02PFERETk0FJcVsC3b72R15+Yw+K3V9N3SC9OuWASvfqVdmkcRfE4zhwOo3k60BlE8fe4375cP/Z4mrIpHlg5H8/AM4+PHj6Fcwbvfs3h3dm6pQ4vn5BrzjyP+vRrpLJbCHtlO9p9r4yG1DKevP9mnv/rJpxznPLuqZz5/lNbjEwUkUPAAZRkaw8l5kQOYEEQcOcvH+XJf7+M53sE2YDxU0bziZ+8l3hRrNvi6l1QwF/ecykPzl/EA8+9xeY5GxiwLkNRAmqTafoN7sVJFxy1X8c4svx8kg29+OeC24hGM9RtGUzVpqE0JQL+7/Yn+NdnriYcav8FZHNN6YXUJWdQ1xQhlQnwPSORDlFeUMPEIWu4/60IV005irKC7vued7eqjdU01DTSb3hfwhH96hAREWmrWDzCtEsmM+2S1o8i62gTRgyloinG5niCcNrDyCXlnMEVbRjdtrOQ5/GZiady/dgpVCUb6RsrIhZqW3Js8JDeZLMBQeB2FMkAcEHA4JFJnGu5Fp8ZVG+u5pWHH2H9iqFg8O8f3MOsZ+fypVs/lVtqRUQOCQb05FUn9deVyAHsxf9O5/HbXqSwJI7nezjnmPvKYv72vfu47uuXUdSNybnSeIz3Tz6K9x1zJG89t4An7nyNhtomjj19PGddOYV44f7HNnMBLHr7aEqbJcQKoj4NyTSzV69n8sjB+30MgKb0ivzXLM1v0poF9C3ZhOeNZm1VzSGZmKurqufP/3sbc19eiOd7RGIRrv32lZzwru77o0JERETa73cXfYCPPnQLddE0YDhznMxQrjvnjP3uuzgcpXinIhCt1at3EaefNYFnnpxLJBzC8z0STSnKexUy/vDRrG16scX2icYkycYUmYZexApzx4zGIyx8YykLXlvChBPH7vf5iEgPohFzIpJOZZj1zFyWzFpB3yF9mHrhMRSVFe5Xn0/882XC0RBB1GP9IKO2xCNbVczaN5bz6kdv5vBxA7nhY6fTt28JC9du5o3Fq4mEfE4ZP4LBfcrafg7ZLG8sq2T+uo30LS5i2riR+0xGmRmTTx/P5NPHt/Ms96xpj1XKHMl0lnQqw9uvL2PZ/HVUDCjj+NMOp6gk3ubjREL9ASMaMppS7Ljd4pxHdWMZ2cBRUbx/P8ue6g//cwvzXl1MUWkh5hmpRIqbvnAbfYf0YdRRw7o7PBEREWmjscMG88yNX+HJ6bPYWF3NCeMOZ+zQQd0dFgDXfmQaQ4b25olH3qaxMckJJ0/g0iuOo6w8zJbUbSSz6/GtGIcjla6iamURVct67djfzMikMiyfvUqJORHpMZSYE+kAjXVN/OC9v2bNonVkswGe53H3zx/kq//+DEMPb/+FTn1NI6nSEG+eEyIVNdIGBBAa7xi4MsSiRev57nfuY9z5Y3h05iKyQQAY/35+Fp+48ETOO6b1FyRNqTRfuvNRlmzYQtYFeOZxy0sz+PFV53NY/+5Z1+7EsUN5fNYinHM71htJZ7MAjOpdzvc+/U/WrNhCkA3wPOOev7/Il39+NUNG9m3TcYoik4iFhlIcX0ZtkyNwjng4SSIT5+1VwzlpzDD6lnRdxbQDxabVW1jw+hKKygp3fP8jsQipRJqnbnueUUd9sJsjFBERkfYI+T7nTznwRr97nnHWeUdw1nlH7PLe+L6/YXXNTWxrfA4zn3D9NF78WQ2RcMsJbH7Yp6xv167dJyLdr7OqsnYFTbwX6QCP/OVpVs2vpKC0gJLexRSVF9LUkOSmL/5zv/o9eto4Fh3lkYqCl3L4SfBTjkyxsXpokuKiGBvqG7nv1bkURiOUFcYpK4wRjfj84ZFXqG5oavWx7p8xn4XrN1MUi1BWEKckHiWZzvDjh57HuZafcrXJJM+uWM4LK1fSkErt1znuzeSRgzl53HDqEylqGhPUNCZJprN84rwTeenBt1m6chOJPmGCvjEKSmIkGlP89aePtvk4Zh6j+vyKPoWnM7DcpyiWYvXWgdz12hWce8Qkvnj+qZ1wdge+um31eL6/yyLMfshn89pt3RSViIiIHIoifm9G9/oKxw9+nOMGPcLxR3yHWLSMhuoGnHM452ioaaSwpIBjzzmyu8MVka6mqqwirZMJGqhPLcK3OEWRsZgdHLnhVx6YTrQw2iKBUVASZ/WCtdRuraOkd3G7+r3gI6fzk3sWY41ZAjOc5SpoRfDZXJ7k8NVF1PhpMhlrsUhu2PdJprPMWrGO0ya2rjrqMwuWEQ21TMIURsOsq65hc13DjhFjTy1bxo9eegHnwOEIeR7fOu0MThw6tF3nuCfOOdY0beG8acM5ceIQ5izdRGEswhkTRzOsoowr//Akq0eGMQsACAUw1o+wZtkmaqsaKClv29TTsF/OiN7fZVivJEGQ5aSRYT50kkfY332BiazLsrpxFYELGFowlLAX2e9zPtAMHNMf8yCTzhAKv/PrIpNOc+S0jp+6LCIiItJakViEr93+P/zxc7ewat4aAAYfNpD/98vriBe1fWkTEenhDpAkW3soMSddZkP9Yyyr/i04BwRE/L5MqPg+BeEh3R3afgtHQrhgp0+C/Et/PyqH9u5XSp/+ZWTrUzTVp2hKZwmFQjgPPGc45/A9DxfaNcFpsMek0m7Pwfd2+1nmHPj5qlYb6+v5wYvPE/FDRPJ9JzMZvvnsM9x91dWUxjqmOEJNupEfzbuHpfUb8PBwBFwy7njeO/xEzIy3llVSGcvgpd2Oiltpz7G4PMvoqv37nnsWxfNhb12saVzNP1b+naZsbkRiyAtx1eBrGF86od3HPRDFC2Nc9YVL+Nf378UshR/2SSfT9BnYizOuPqm7wxMREZFD3ICR/fjO/V+iamM1QeDo1b9sl5H+InIIcJrKKrJP9anFLK36JUYI3yvAs0KS2Y3M2/xVnAu6O7z9dvo1J5FqSrWY8tlQ08CEEw+jsLSg3f36nsfZQ8dgBR5jRoQoLfbIuoCMF1CxIUxdXYIjB/UnFguTyb7zfUykMoR8n6NHtn59uwuPOpxUJkvQ7BzqEinGDaygd1HuHF5YtZJMEOSTco5sJkPYPDJBllcr17T7PHf220UPs7huHYV+lIJQhJgf4d7K13hlyyIAHp+5hHhhNP/9zsXrO0hawICjBlJY3HnVU5PZJDev+AtN2SZifoyYH8O5gH+vvo3qVFWnHbctApeiqvFxVm77OpXVP6cxtbDdfZ3zwWn8799u5IhTDmfgqH5c8olz+da9X9jvwiYiIiIiHaW8Xxm9B5S3Kim3aW0VX3n/H7hi0te47tTv8dQ9b3RBhCLS6TSVVWTvNtQ/jnMBnhcGchWTQlZMKruZutQCSqI9c6TRxrp6nlqyjK2jovS/eAIbH12IBWAe9B1awUd+9L796n/Oa0spfvIOvnrRG0QiadxIj5c3TuSZWVMZX1/GmVdO4PwLjuSJt5dw0xOv41JgllvQ9+tXnklBNNzqY5135GHMWbOB5xYux8j9jPqWFPGld50GQF1DgpkLK6mrTxA0ZGjYWks2lSvE4JfFqK1t3K9z3a4m1cDbVSspDsV3XFz55hEyn4fXTuekisNJZtIUFEWxdEBjfZIdybmIz0XvP6FD4tiTJfWLSAYp4v47UyTCXoSGTAOza2ZzasW0Tj3+vgQuxfIt/0Njai6Y4VzAtsYHGVz6BXoVXtiuPo84eRxHnDyugyMVERER6Vqrl27g4xf8gmz+hnZDXZKff+ku5s9Ywad/cFU3Rycihyol5qRLZIKa3a8nZx7ZoGMSOl3tzTWVfP3Rp0gHWZwDb2yUMZNP5croAPoO6MW4Ew7D99s/KLVy6UbuveWnnP2Rl0gnQiSbouBlOb/PXD7xoZOoKH2nIuZFx4/nxHHDmbV8HZGQz+TRgyiItm3NM9/z+PJFp3HV1CNZvGELvYsKmDR0ICHfo3JDNV//5YNsSTfS1D9NQyKBZx5RPzdmONmY5K1fP82V/ziq3ee7XVM2DcYudzw986jPJACYNmEUby6ppGJAKelklkQiRSKZJhTyKXEhgiDYMcW1oyWySdxubq04HE3Z7v+3XN34NA2pufheyY7vYeBSrK35BaXx0/G99o/gFBEREenJfvI//yKbDVpcZzocj901nY/+32XE4wffmsEih4qePJVViTnpEr3iJ7Kl6QWcc82SBWlwjuJozxuJk85m+f5Tz+OZ7VhXzTnH4roaEpMnMnHc2P0+xlN3v86RZ80hhUciG8IBFvjU1Bqbq+6gT8nHMHvn4qF3cQFnHjV6v487oqIXIyp6tWi76Y6XqG9M0rewkK2bm9haDlmDRMgnHASMmN/A+hlrqVyynsFjBuzX8fvGSigLF1KfaSLmv3N+yWyaKX0OA+Dk8cN5Zs5S3lq2lnQ6Q3VVAwQwaH2Wn3/9HiYcPYxPf+NiwuGO/4gbUTgSAwIX4OWTzc45PPMYU3TYbvepTtVyb+VTzKxeQMh8TqmYzIUDphH1O/7irybxAmZeiwtOzyIELk1TegFF0ckdfkwRERHpeKvmr2H1grX0GlDOuKljOu2m46Fk1dKNuYWYmzFy6za//Mgsznr38d0TmIjsPyXm9szMfGA6sNY59y4zGwHcAfQGZgAfcM6lzCwK3ApMBrYCVznnVnZ2fNI1+hSczIaGI6hNzgFnuYoCZows+zghr6jV/WxLVfH4hmdZULuYknARp1ecwjHlR3b5Iq/Lt1bRkEpR1GxUmpnhe8bTS5ZzwX4m5pwLqE4sYOiQWjJB7iJs+xlmnUdNfR3ZoJ6Q32vPnXSQZCrNvKXrKSnMJSDLKwO8yjRNfXzMwfiF1RTXZEn4HtUbq1uVmKttSHDPc2/z0uwVxCIhLjhhPOdNPRzf8/DM4xOHnc933/4P1Y3VeL5HJBRiQLyciwYdC+SKWnzr6rOZsbSSn/7mESJVMIAosZjhoo7ZM1bw/GNzOeuiSQAkmlIsnbcWP+wzZvwgQuG2F4doqG1k6cwVxApjnDJwGi9sfT6XaMYAxxFlRzGicOSu379sih8t+CtbUzUUhKJkXJZH17/Eqob1/M9hH+jwf7shrwR2WrfROYfD4ZnWhRM5VOj6S6TnSqfS/P4zf2fmU3N2zCLoO7QPX/nnpynvV9bd4fVooZBPJh20SM5tnwnRq29pN0UlIh1BI+b27jPAAqAk//rHwC+dc3eY2Z+ADwN/zH+tcs6NNrOr89tpov9BwrMIEyt+yJbGl9ja9AIhr4T+hRdQHD281X3UpGv52cLfU59tIOpFqc80cOuqO9mS3Mq5A87oxOh3FQn5ubUim40AhNwv9uh+jtJqzKxn1qavM/KKlZiXple8ibqaQpoaYvljZ6itj5NIxCnqgjyL53mYb9SF0kTwiRfGaFqfINIU4AdQXJMlyAZkswGDDhu4z/4SyTRf+sODrN1cQzwapqY+wZ//+wqL12zms1dNo3JrNT/4+/Ms6pMiVJrGN4fvwkwbPZri0Dvruvmex4jSUopXNtGvKLrj52BmRCIhXnhiDmddNInpLy7iLz95lCAIcA7iBRE+853LGD2+9YUxnr3jZW779l25yzbnKOlTzFU3XUZl8SrSQZpJZUczrmT8bpNs07fNpSpdS3E4N4XUNwiZz6K6FaxuXM+wwn1/z9qiV+FFVDU9hnNpzMI45whcHRF/EPHw7kf0ichBSddfIj3UU7e9wIwn3qaovHDHtcWGFZv465f/xRf+/olujq5nO/WCo3jinuk4cjdXHQ4cRKIhjjll/2e8iEg3OYAKObRHp46HNrPBwIXAX/OvDTgDuDu/yT+AS/PPL8m/Jv/+maZa1wcVzyL0LTyDcX2+xZhen2tTUg7ghU2v0pBtpChURNgL76iI+fjGZ2nKJjop6t0bXl7GwJJi6pPpHW3ZfOLnwnGtT36sqdzG3299kZ/8/BEefXw2DQ0JZm/+Nk2ZDRQV9WJddR+CwKO4tIFYPEksmiQSdbzw8qm7X7OvEzy6bDErRieYV1bDrN5VVI7K4uI+WQfF1fU01iWorW3izPdPo7wVdxpfnrOC9VtrKS2KEwmHiEfDFBfEeH7mUmatWMf7/nonc0rXk4k4mhoiNNTHaKzxuWPJDJ7dsJh00ERDegNZl86PVts9M2Pzhhr+9MOHMTPiBVEKCqMkmtL84mv3kGhKter8V8xdzS3fuINQJES8KEa8OE7N5jruvOFh3j3wPbxv2AeYUDpxx7TWna1qXN+iWu/22ADWJza3Koa2KIxMZGDpZ3AuRTZoIHD1RPwBjOj94y77NyMi3UvXXyI92zO3v0QkFm5xw6+gtIA5Ly6goYOKbR2qPv3D9zBsdF9y+bhcUi4U9vjeLR/t7tBE/n979x0fR3UufPz3TNmqLsuW3HvvGGxMNcXUhBJqEgIppPdwU296ubnpySVvEhJCAimE0Hs3xBiwce+9V1m2urRt5rx/7FqW3C2vtLL9fPnsh93ZmTnPHq3GR8+cok6Ursp6WL8CvgzkZ16XAjXGmFTm9VZgX7eVXsAWAGNMSkRqM/tXtT6hiHwU+ChA3759OzJ21cWsaViHI22/srbYJElRGauiX7R3p8UiInz/8kv40lPPUdsca+k9d8PYUUztd2zfy3kLNvKr37yI5/nYtsWixZuZ+c7rXHTbFlwrD3GESH4xqyqFnkVV2K7P9i39eWfBmeRHJhONBDv2QwKLdu7gl2+/SbfCKLu9BuKJFLVuktS4EOO2BkluraPGDhMpCvPGmxsp+OsbvPu2qUecA2XZhp0HXf8sESxL+Otb89nb3IjJ88ATrEzizbMh3hxnduXvqYtvAwy2BBhR9F569Stl6+Y95OXtn+svmUhx/mWjmfPaSryURyS6v67CkQBNDTGWzt3IpPOOnkR945G38T0fJ7D/uxcpCFNXVcfa+RsYduaR5/XrGS7DOuBv3H2Juu7BjhmK3C16PcXhS2lKrMC28gi7wzUpp9Tp5Vdkuf0F2gbrKtYt2sjsZ+fjp3zOvHw8QycN6vQpPVTHSiVSiNX2Z7rvR+ylvBxEdOqwbZvfv/BlVi3cxKuPz6PXgDKuev9UbPv4pzlRSnUdgg5lPSQRuRqoNMbME5ELs3VeY8w9wD0AkyZNOomrXh2v7qEyNjVtJcj+JEt6mJ5HoVtwhCM7Rr/iIv75vptYsG0HdbE4o8q7U1GQf/QDAc/z+eO9r2PbFpFWCbba+t00NiYpLki3voqLosQTKbY1Wuze3oPZL15GUX6EL3/s/A75TAd6ZMWy9PDcgEvvHsXEEkmSyRTJYsOYaDmvLtiFnwf1CCSSPH7fTCJ5Qaa/58zDnrNnt4N71RljMAY21tSkU3EH/GYbgTN6rKUksB1bemCJjWeSLNl7Lzfe9XH++PVGGhtieKl0knPsmQM5f/ponnjgTXxz8GXCGI65x1xDTdNBjeN9Yo3xox5/VskYntr+GvXJJiJOKL16ayrGgLzeDOjAZLJt5ZMf0gmMlTrddFT7C7QN1hU89n/P8vhvnsX3fEB46f7XmH7HNN73jffkOjSVRWe/axJP/f4F3OD+XnNNdc30H9WHgpJja2uqIxs2vh/DxvfLdRhKKQV0bI+5c4B3i8iVQIj0HCe/BopExMncte0NbMvsvw3oA2wVEQcoJD0JsVIAXFh2DvOqFxH34gSsAAZDk9fM+KLRFAU6PzEH6UUIzup7/MmVJYu3sHt3PeFwgEBg/zx1TTVlNDd5FOQnsCWAJUJF90KaEj6FqUuY8qGLOGNMXwIdsNrooVQ1NeHs6/0mEAq6hIIuNQ1NPP3CIqw8i1SejZ00eNVJCoIOz/7j7SMm5i46Ywj/nrGQhuY40VAAA9Q3xRnYsxSv1GbLnmqSScG4BjJrGFjiMbr7VsJOAZak72ja4uJLkir3RX765x+xcPZ6aqsbGTisnMEjeiIijJk0gOceegfjm5bkmuf5GGD4uD7HVAcTLx3LW0/PbTOfYCqRAhEGTxxw1OMjTpivDP8ID25+hqW1a7HF4pxuE7ixz2Xaw0Ep1RG0/XWK2rVpN4//5jlCeSFsJ/1voe/5vPiXGZx73Vn0G3ls/66pru+qj13KwhnL2LZ2B17Kw7ItInlh7vzJ+3MdmlJKdV0n8S3DDvvr3hjzNeBrAJk7tncZY94nIv8GbiC9MtjtwBOZQ57MvH4r8/6r5sCJmdRprXekJx8d+AH+tflxapK1CMKUkjN4T++rcx3aMTPG8Lf7ZvLMswvZk4hjNTUR2G1RUVFEIOiSTFjsWnoZ3bv/h4RpRrAAQ7foKCYOuAPb6vjhq62d3acvy3ZXgrt/W8LzaKqLI+Uu8VIXMpPn2nEff2mM4J76I56zpCDCD+68kt88PJPNu6oR4MwRffjMDeexdFclS7ftJLEjQaJPM8ZKJ9GidoqQY1Hktl3twhaXZm83oXCAKRcePGfh0DG9OeuCYcx+bSUAvjFYIrz7/WfTrcexrbw1afo4Rk8dztI30+cwvo9l29z47ev5y6rFvLJxPQHL5l1Dh3PjyNEEDjEUonuohM8OvQ3P+Agcdj46pZQ6Udr+OnUtm7USY/yWpByAZVukUj5LZq7QxFwXZIxh5qNv89yfXqVuTz1jLxjJ9Z+7irLepUc8LloQ4buP/xfzX17CuoUb6N63G1OunkReka6urpRShyMncfOlc7rdtPUV4EER+QGwALg3s/1e4AERWQvsBW7JQWyqixtRMJRvjbqL+lQDIStI0O7cRNWJWjh/Iw+9tICaPJ+UZ2OModk3mMpa+vQsxvd9zhlzI8PLb2R744vEvb2UhafQPXIulrhHLyDLrh02gmfXrGJ7fT2ubZHyfESEkkqo7iEML6wklnTZsreQVNCiakiQM/wjNzYBhvQp4zefv47axhiubRMNBwA4N68fn7pwCn+aNZfanU00hpspLghy54SzKIluJ+k3APv/IEn5MXpGJx+2HBHhzq9cyeRpI5jz2krcoMPUS0YxbMyx93K0HZsv3fsJ5r64iHkvLiJaFGHKdWfy/Q3z2LSshmjApcHAH+bPYdnuSn500aWHP5cm5JRSuaPtr5OcGwogh5jD1bKEYPjkag+dLh7+xVM8+bsXcAMOtuvwxqOzWTRjKT989htHXTDLDbhMvnIik6+c2EnRKqXUSawLLeTQHp2SmDPGvAa8lnm+Hjho4iNjTAy4sTPiUSeuKZZgb0MT3QryCAU6N79riZWTOeWy4ZGn57HX9XCwCFhC0vPxLaiLGuobYtx8w2TOmNgfEWFo4GO5Dpf8YJA/XH0tT61eyVtbN9MtHOH6EaN42P85t0yagS0+lhi27C3kR89eQGVBPlfdeO4xnVtEKMoLH7T9holjuGrMcHbU1lMcCVMcSe+zvdEwZ/fPSHgN2BLAMzFsK8iIoiP/DWlZFuOnDGL8lEEt21Ys3cqMF5fS2BjnzLMHM/X8YQQO+B57JkEsVUnALsJ18to0jl9av5atdXUUh/fHH7Rt3ty6mbV79zC45OjJSaWU6mja/jq1jJ82Cse1iTcnCGZuaCXjSRzXZuKlY3McnTpQY20jz/7xZSL54ZZejm5JHvV7G3jp/te56a535zhCpZQ6tejiD+q04fk+9734Dk+/vQJI36W98fyx3HLB+C47X5bvGxpjccLBAI7dOT2WtqzZwZtPzaexrpnxF4xg3PkjsG2LDdW1AAgCAgHHxjc+nmX44B3ncflFYzo8tmVVu3h50zqSvse0PgOZ2KPnEX92BcEg7xszjveNGQeAn1xD4bmv0dAsxFIuxhj6ldbwzatf4+sv3ciQ0b0Oe66jSXk+c1ZsYu6KLRTlhZk2cXBLYq5ndArn2t9lde1jNCS3UxIcxrCiG8h3j6+8Zx6fz0N/exMwWJbFkoWbmTljBV/9znW4brrhvLn+SdbW/BWfFBhDr7zpDCv+WEuvxeVVu/GN3+a8IoIA66r3amJOKaVU1uUX5/HZ397J/336TzTXN2NI33z6+C/uoLSiONfhqQPsWF+JiLQZegzgBBxWv7M2R1EppdQpTBNz6nTx0OuLeHzWUqKhAHZmaOPfX5lPSV6EyyYNy3V4B5kxbw1/eXYOdQ0xQkGX6y8cy3suHId1mFU2s2HmE3O57zsP4/vp/rQzH5/L2HOH8dlf305Rt3zYU0v6qpGOQYxgWdC7b8cnc/66dD5/XjovvVKpMTy1biVXDxzGXWeed8yJVT/2FHlBh7qYIJYB39CYCNK7tIGLRwvd8to3/0ky5fG9+15gyfodpKcHMDz+xhK+cNOFnDduIADdQqPoFhrVrvMD1NU28/A/3iIcDmA76SStMYa1q3Yw9+11nH3eUHY1zWJV9T3YEsaRKAaPrQ3PYuEyrCTdi7FPQcFB9WWMAYHu0bx2x6eUUkodybgLR3H3nB+z/M1V+L5hxJQhRAsiuQ5LHUJxeVF6walWC1ABeMkUPQeX5zAypZRSXY1OeKSOme8bHntzKeGgi53peebYFgHX4d8zF+c4uoPNXraJXz/0H2LxFPmREBj4+wtzeez1jou1qb6Z+3/wGIGQS35RhPyiKNGCEIvfWMmCGcu55uKxBEMunufjeT6+5+PjU9atgKH9undYXAA7Gur589J5RB2XomCIolCYPDfA0+tXsWxP5TGfx3h7iAZDRALp74HtWliOg1gWHzlvRLt7Ts5asoEl63eQFw5SEA1REA3j2jb/98hMYolku855oHVrdmbuXu+/9KXjFRbN2wjAxrp/IzgtveNEbGzJZ2vjc3gmAcAlAwYRdQPUxWMYY/CNoTYep29BEeN6aGNbKaVUxwlFgky8ZCyTpo/TpFwXVlpRzBmXjqWhphEv5aXnFW6IYbsO02+/MNfhKaXUKUdM+x5dgSbm1DHzfJ/G5sRBw0Fdx2JPXWOOojq8B19egGNZBN10x1DXsQkHAjwyY1GmN1v2rVu8GWMMbqv5ykQEDMx7ZQnTzhzC5PEDKCiJEsoLEC4I0a1HIV+67SICbsd2YJ1fuR0D2K0mjrZE8Hyf2Tu2HPN5rOBURAy9iwuoKMqnJBqhvCBIRWE+fcrObHd8byxenx4O2iqxF3AdPN9n7daqdp+3tWheiEMtNmiMoaAoPWQ27lUdtNCGYOGbFJ7fBEBBMMTdl1/NsNIyauNx6uNxpvbpyy+mX4HVxYZ0G+PhNz2Kv+d9+FXX4tf/BOMdeyJWKaWUUu3z0Z9+gGk3n0O8KUFjTRPdepZw172fpPfQnrkOTSmlTj2mnY8uQIeyKppjSdZvqyIaDtKvoviwPZ5cx6Z/eTHbqmqJhAIt25tiScYP6noNjJ176g5Kdjm2RX1znFgi2eYzZEsg5B428ROKhnAdm+997ApmL83Mo5Yf5uIzh9CnR3pumO3Nu3hx5+tsadpGeagH08vPp1/02FcQPZKQ7WBx8M9WRIg4x14XVugSpPlxTGo10YBNNOABFnbeJxErv93xRUKBgxKmxph03WVpgZHBQ8sp7ZZHVWU9kbwgIkIikcK2Lc6/aCQAxcGx7Gx6HUv2r5bmmzhBuxTX2r/oyMDiEv5w1TXsaqpnY/1eukfyKAkdvJhFrpmGX0HzMyAhwIbm5zHxOVByL2IdeUU4pZRSSrVfKBLkQz96L+//1g3EmxPkFUW77JzMSil1UutCvd/aQxNzp7kXZq3gz0/MBmPwfEPfimK+9uFLKSveP09WU6qBhlQ9RYFSPnrlFL59/wvUN8UJuDbxRIqA63DHpZNy+CkObUifMpas3UF+JNiyLZ5MUVoYIRx0j3Bk+w0e35/84ij1exuI5KeTNKmkh1gW511zBpBOcJ47fiDnjh/Y5tjNjdv45Zo/kvJTBCyXyvgeltWt5JOD72Bo/sCDyjpekyv6ELAtmlNJwk768ye8FI5lcWGfAcd8HpEgbvH/4TU/j4m/DlYRdvharMA4jPFpTG3HkgAR5/iG5k4/cxj/WbgOz/Nbhko3xhKUFeUxsGe3g/b3fcPOXbXYtkX3svxjauhalvBf37yGX/zP01TurMXKDGv92Gent8zxN7DwvexunkPSr8WSEL5JIMCw4o8h0ra36KMbFvP7lbMA8IzPoPxu/HDSVZSFu8Y8c8bbBbHnQApgX+xSBKYGE3seidyc0/iUUkqp00EgFCDQATeElVJKtaKJOXUyWrlhF3985E2CQRfXsTHGsGn7Xn5870v87EvX4pkUz+x4iCW1cxEEwWJa9yv5yUeu5tFZS9iwcy9De5dxw3lj6de9660G9v7LJvG19U9T3xQjHHSJJz083+eOKyd32N1K27b44m8/xM8/cS8Ntelhjxi49b+uZuCYvkc89vHtz+P5KfKc9HwxAcul2Yvx8NZn+PqIz5xwbHmBAD8+/3K+PvNFGpLpudIsEb559jQq8o6vp5tICCdyLUSubdm2J7aUBbt/QdyvBeNTGBzMxLK7iDg92hxrjIHkIvz4y4CHFbwI3EmMHljB+y+bxN9fnIclggGK88N88/ZLD1qsY826XfzmD6+wZ28jGEOf3iV87uOX0LOi6Kix96go4se/fh9bNlURa07Sf2B3AsH9l8Ko25sp5b9hY90jVMeXEnV70b/gBoqCI9ucZ9Gebdy9fCZhx8W10r8/a+p28615z/K7c286rvrsMN5mwN6flNvHCCSXApqYU0oppVTXUFfdyMznl7B57S76Dy3n3MvGkF+k8ygqpY5O0B5z6iT1/JsrMCbdgwvSQxrzIkE27ahmy84alpiXWFQzm5AVwRILz6R4adcT3NC7hK/efFG7yvQ8n4WLNrN6zU5KSvM4+6xBFBR0zPC/oX3L+PEnr+bvL8xj3bYqBnUv4uZLJ3DGsD4dUt4+fYf15OcvfI3V8zfS3BBj6IT+5JccvQfVhobNhO1Qm20hK8i2ph2kfA/Hsk84tok9evL4te9nYeUOPOMzvnsFUffE7+A2p3YzZ9f3MBhcK4oxhpr4Gt7e+W2m9fp/bfb1G+/BNP+LzNKreLEXkNC7sPI+zw0XjuPiM4awanMlkVCAUQPK28yJB1BX38wPf/YMqZRHNJzu+bdl616+/9On+c3/3orrHr2eRIS+/cvaxuX7WJmyIm5PRpYeORn6+KYlmc+7//enwA2xum43mxuq6ZvXBZLVVg/AS9d1m2S0D06/XEWllFJKKdVi3dYqXp61gpcemUuwNkHIF955fSXPPjib//6/99Ojd0muQ1RKnQwOMaXUyUITc6ex2vpmrAMWchARbEuobWpgQfxtQlYYK9PbxhYHmxSzql5mZOH44y4vFkvyo588zbr1lfi+wbKEf/17Nt/4yrsYNLBjViQd0qeM73zk8g4595E4rsPIyYOP65hCt4C6VD1B2Z8o84xH1AljH9jj6QSEHIcpPbObnNza8BqeSRCw03OwiQgBu4Bmbzd748tb9jOpzemkHFHYl2g0Pib2FISuBHcYxfkRpozqf9iy3pqzjng8RX7e/iHKedEgdfXNLFm2lYnjjy/h9M4rS/n33S+ya/MeSsuLuO7jF3Pu1ROO2quyOt6MI22TgCKChdCQjB9XDB1FnL4YdyIk54LJBywwDSBBJHR1rsNTSiml1Gnub8+9w6MzFlNd1UDC9bC6u/SKC91TNvU1zTz4+xl87gfvyXWYSinVoTQxdxqbPLo/i1dvxxjTkoRIpjwsS+hZHsVs9A+aU8sWh7pUTbvKe/nVZaxdt4u8vFBLeU1NcX77h1f5+Y9vbpMIaYjFWbhhB5YljO9fQSSY23k5Up7PU/9ZyjNvLKMpnuSsUf143+VntJmL70RdWn4+D25+Ahsbx7LxjEfMT3B1xSVdfqLgZm/3/uepJLubGomlUoSdFPPNKiC9OIhJLiA9M2erhJZY4Hv4iXnY7rCjllVd04Tv+wdt931DTV3zEY/d0byTBRtWkqgRxpYPp2bLHn739X/huA4FJVEa65v48/cfA2M4791nHPFc55UPZNHebW1+f9Jz9tkMKjh4TrxckYJvYxp/C7GXgRS4Q5C8LyB2ea5DU0oppVQ7zH5mHo/f/Ty7t+5h0Pj+3HTXuxk0rn+uwzpuG7bv4dEZiwmHXKqak7iZDgPbgoYizxDND7J49rocR6mUOll01FBWEdkI1AMekDLGTBKREuBfQH9gI3CTMaa6vWVoYu40duGZg3nxrZVs3LEX2xJ830dE+MRN51EcKSLPLaA51UhAWi2eYGIMi45pV3kzZ63GdZ02SaZwOEBlZR27d9fTvXu6t9V/lq3n50/9Bz/TFdW2LL52/TQmDznyHG0d6bcPzWTGvDUEAy62ZfHavDUsXLWV3/zXeyiIho5+gmMwtXQSDclGXtz1Os1eklTCZ6yMYmr0rKycvyN1C41lc/1LNCUTbKmvAwwW4JPkd0uWUddcSGk4ChIGDtH7TyzEOrYhzcOGlGPbVpuEmG8MAgw5TM9Lz3jcv+4fvLFlDsmEB8CjW4MkHuxO1LEJRdKJ32AoAAiP/v4Vzn3XxCMmRK/oM4Jntyxnff0ebLHwjI8lwpfHXkzQ7jqXVrGiSP6XMXmfB5NErGiuQ1JKKaVUO736z5n85ZsP4gQc3KDLirdX88Nbfsk3//0lBozOXVu5Peau2JJe9MuyW6YT2dfyqrcNBQlDMKyLZiiljoGhoxd/mGaMqWr1+qvAK8aYH4vIVzOvv9Lek3edvx5VpwsFXX702at5be5a3lm6maL8MJedM5yh/dLJjSvLb+LfW++lyWvCEYekSRCywlzQvX1DQ103PUH+gYwxOE76H+PddQ389MnXcW2bcGbuu3gyxY8eeZX7P3MLhe1Igm1q3M3TW+eyuamK4QW9ubrXGZSFCo75+F1763l9/jrywqGWRQgKomFqG2K8Omc1104be9wx7WOM4Z01W3l27goaYgnOGzmAT/f8GL/76cPUra3nHW8L75i7uenj07j0PWe2u5yjSXk+r65cx4vL12CJcPnooVw4dOBBiy4cTo/IZAqDA1lfsxhHDLZlcJwEO+JFFHXbxvqV23CcMiRwHuCCac4k6QATBxwkcP4xlTV2VG+GDy1n+codLd+plOdz3tSh9DnMHCSzqt7irR1zSdYbLNsBDJTE8abtounRMlqnqgJBh72VtXgpH+cI89VFnAB3T72BF7et5M1dGygJRrmm32iGF/U47DG5JBIA0catUkopdbLyUh4P/fRJgpEgbjA9z25eUZSGmkYe+/WzfPGPH89xhMfHtW0k09bMLwpTu7cR27bS2TkDzY1xrrr17NwGqZQ6acjBg6o60jXAhZnnfwVeQxNzqr1CQZfLzxnB5eeMOOi9YQWjuaP/53hrz6vsiVfSLzqYs0unURQobVdZF104kj/d93qbnk6NjXEGDiijJLM4wlurNuN5PtFWQ1eDrkN9c5w5a7dw6bghx1Xm0prNfG/Jv0kZD9dyWFO/g1d2LeYn42+jZ+TwE8lua17D8to3SfkJqOmH7XBQkkosYdXmyuOKZx9jfFL+Hh5+Yw1/e20lImBbwvLNu0hVNtFzVQP5eWFEhFTK45+/fYW+g3swbFz274QaY/j+06/y5vpNOJaF5/nMWrmR3n6IW0eM4oKLR1FccuReVra4nN3jhzy07Fv0LdqAE2hkV2M3KuMlgIUxsDexl7WN2xlc+CO8um+Bacwc7WAVfBexj+17ZdsWX/3ilbz6+kr+M2s1rmtx0fkjOG/q0MMe82bV28QbUli2nbkTK5i4TXBwjL2OR1mrXnyJWJJuFcVHTMrtE3Zcruk3hmv6ta8XqVJKKaXUsaqvbqC5Pkb0gJVKg5EgG5ZsylFU7TdlTD8eeO4dkimPotJ8kgmPhsY4IuDUJJgwdQjXfGBqrsNUSp0s2t9jrpuIzG31+h5jzD0HnPlFETHAHzLv9TDG7Mi8vxM4od4ZmphTR9Q70p8bIx/KyrkuOG8Yy1du46231yGSnii/pCTKpz9xScs+8WQK/xC/UAZIpLzjKs8Ywz1rXwKgwE03YMJ2gLpEE//c9AZfGvHuQx43Z8+zvLXniXQCESHFbMonRahZdGabOfeMb+hbfuSVN1O+z5s7NrGgcgfdI1Eu7TuYsLWcnTX/Qzy1k/JuDVw7dThvLL2cRCpA3CTZ4iUpLQtREEunkBzHxmCY8eT8DknMLdm2i7c3bKEgFCSV8tm+vQ7P91llxfj7Y2/x/JML+OaPbqRXnyOviOVYIZqTZ/PS+n707bsI33cAaUnECjB77xsM6fdh7NJHILkE8MEdi8ix9YQ0JgE4BFyHyy8ZzeWXjD6m41J+EuPvHx6xj2ULxjI018cIRgIkYkmSCY8bPzP9mM6rlFJKKdVZooUR3KBDKpnCcff/GZeIJeg/KrsLe3WG8tICPvGec/ndI2+QMBAtiRAuDPGeM0dw8dnDqejbvs4ASqnT0wnMMVdljJl0hPfPNcZsE5HuwEsisrL1m8YYk0natZsm5lSnsW2LT3/8Et595QTWb9xNUWGE0aN64Tj7eyadMagXf5kxF8/3sTNzTXi+jwATBvQ8rvKavARbm/aS77RN+kScIAurNx7ymIZUDW/veZKAhLAyq4Yay1Dat4q967dDbU8sS2hsThAKOlw6+fCLFcRSST7/n2dYvqcS36QX0nhy7fN8bdyThCyXRCpMIpFgWK+VhANxnplzU2aFZ0NtSCiLtao7y6K+pu3CBr5JsaNpMXXJ7eS5PegZGY8t7nHVEcCybbtI+R4iAfZWNeD7Po5lkbQMXrFL884E/7hvJv/1rWuOeq4PjT2Db7+5qSW5aozBNwbHsgChMZXuJScShMCRrn1txRILqK77OcnkakQi5EdvoTDvI4gc2yVsfPE4NlZtJ1FnsPf1fHQ9zJ4wU88cSXLDLratq6RH325c//GLmXTRqGOOTSmllFKqM7gBl6s+dimP/uoZQnkhHNcm3pwA33Dtp6/IdXjtcslZQ5k0og8LV2/DtoQJw3qTFwke/UCllOokxphtmf9XishjwFnALhGpMMbsEJEKoH1D6TI0Mac6Xd++pfQ9zB2wgT1KuW7yaB6bsxTfM5jMEM/3nT+BniXHPi8cQNBycC0b3/jYrVYBTRmPssChz7WtaTUAVqv9RYTC/CDjJglznk+RSnkM69+dj11/Dt2KDr8q61PrV7K0aheFgWDL0N2JJQupjtXRM683tpXCxyKWCNGnbCMFkWp8vwgRwU747FskwRiD5/mcccH+JGDcq+eV7d+nNrkV36SwxCXPKeOSnt8m7By5Fx9ATU0Ty5dtw3EtIq6DnekJ2NyUaDP5rusJkWiQxQs2tRmCfDgVoXx6+hUkkstBklji0D0SxbXSiyOMKjz2+fg8z2fZiu00NK6kvNc3cWwLkSIgRV3Dffh+LSWFxzaMf1r3C1lQtYR1ic14xk93wUza5C8ZzKe+dAUlpdlbXVcppZRSqqNc86nLcVyHp3//Ig17GynrW8p7v349o6YefWX7rqooP8yFZwzOdRhKqZOZAQ4xn/2JEpEoYBlj6jPPpwPfA54Ebgd+nPn/EydSjibmVE4YY5j1+Bye//OrNFQ3MvGSMbzrk5dT3L2QD198JlOH92PWyo1YIpw3YiBDe3Y77jIcy+bS8rE8s30++RLGEsEzPgk/xTW9D72QQsAKIQcNeEwn584fM4Ivnn8VnucTDBz9V+eFzWsIWHabZFaPcB1JT0j6HiHXwXVskikP37eIhhrYXZtPYXGUwo3V1MfTSTLf9+k3tJxzpu+fx2zx3oeoTmwiaBW0TJpbn9zJvD33c26Pzx0xrhdfXMLfHpi1/7MFLGSkTVM8gViCMT6eJdhGKI7b+J5POOweNSm3vbaOz/z7KWLJFMXeMAr6rsKQIunF8IxPwAowqXjKUesNYHdVPT/436fZU93A9Eufww3V4jhFlHUTwAXyaWh+ksL8j2NbhUc9X9SJ8JXRX2Ru2QJmrVlAYrfNxOIJXPjNMYR1tS+llFJKnSQsy+JdH5/OVR+9hEQsSTAcOGobTSmlTgcnNpj0sHoAj2Wusw7wD2PM8yLyDvCQiHwY2ATcdCKFaGJO5cRDP32Cp+95Ccd1sF2bFx/4D3NfWMQPn/06Tn4DvbvX8qGeY7Gt8AmV84GBF9KYijNz9wpssTDG8J4+U7i4/NA9t/pERhCwwsT9ZoKZslN+uufXsIKzcGwLx7YOeeyBgraDf8AMlJsa+9A7ugnJ/NerpICd1bUYfLbuKcC1bb5/++WUfzDI608vpHZPA+PPGcKUi0cSCO4fprqhYSYBK9qmIRaw8tjS+DbGfKbNXHitbdmyh789MItg0GkZQhyPJylak0ImFFCXF6OhIUbIF4bvDWH50NCc4MprJh718z6ycBmxRJKCcAivsZy6DXkEirYTs2OUuKUUBAoI2cc2l9zdf3iF3XvqycsLUt6jGt9303EFXfLzQ4jYYATP23VMibl0/bhMrTiLqRVnHdP+SimllFJdlWVZhHTIp1JK7dcBiTljzHpg3CG27wEuzlY5mphTna5uTz3P/ekVIgWR9JLoQCDo0ti8h9eXfYq8fpWI2Ag2g4rupFfe1e0uK2A5fG74VXxg4AXsiTdQES4i6hw+OeRYLtf2/hxPbrubmNcACJZYXNbjQxQHjm+hlWsHjWBx1Q58Y7AyCbRZu0YwuWwJQh2+iWBJiooSC8f6ID+67Sb6dS/GtdMJs/5fvPy4yktfh458x/Ttt9bieX6bef2CQRevKc6nJpxFUZ8CHrr/TVbP2YTlpGhM+ZwxeRDX33r0nm4rd+7GbXVeL5ZH886hNCeSBCSKcGwJzeqaRtasqyQaTfdk21VZQWlpJYmkQ119M/n5IYxJAeDYxzfvoFJKKaWUUkqpU4vQYT3mOoUm5lSn27pmB5ZttSTl9pn4iXUkw43Y0hsRwTdJ1lT/lojTi+LQhBMqsziQR3Hg2OYR6xHqx4cG/pidzetJmSQV4UEErOO/I3lxn8HMr9zOMxtWtaxKWhrqxojyBwiYx2iIvYFtFVEcvYWC8PTjGoYwIO88Vte9mB7Kmjku6TfQN+9sQEj6zTgSPKjnXCKROuT5jEnP6Ta0ooz//so1VO6sZce2anpUFFHes+iYYhrYrYRVu6oIt1p/wvcNnjFEbPvwBx4gmfRpXRWLF5/J0CHLCYea8bwIvmkGE6cg7w4sS+eGO1Ge7zNn01bmbN5KUSjEJcMG06vo+OZzVEoppbLB932WzFzBohlLiRRGOOeas6gYeHw3RpVSSp2GjOmQOeY6iybmVKcrKS/CS/ltFhMIFsboNqoG2xS1bLPExTMxttY/ccKJueNli02vyJATOoclwlcmXcCtQ8exfG8lJaEwE7v3yqxQ+iV6FH6p3eceW3ITu2Or0os/+Ckscch3y+kRGsPjWz5HQ7KKgBVmVNG1jCq6qiVBd8YZA3j++cX4vsHKzE2XSnmIwKhRvVvO3728kO7lxzZEdJ/3jB/Fy6vW0RBPEA24pHyfpkSSK0cNY87aY+stB1DWLY/uZQXsrqonEglQW1fCo4+/lzMmzmD0qD04Vgn50dvIi1x3XPGpgyU9j28+8zJzt2zDz/xD9vd5i/jmZdM4b1D/3AanlFLqtOJ5Hv/36XtZ8PISPN9HgKd//xIf/eltTH33oecGVkoppfbRHnNKHYfy/t0ZOXUoS99YSbQwgliCZzVifIv8A1ZetXCI+1U5ijQ7+hYU0begKKvnDNr5XN77f9jZvJi6xHby3B4IDjN2/ZRYwlBdnyTlN7O99k9srqriyiEfBGDY8AqmXTSSGa8ux/fTVy7btvjgB8+noODE5vPrX1rMz667nP97/W1W7aoiGnB576RxfGDyBN6/ds4xn0dE+NRHL+KHP32a+vo4xvg0NhThWHfy7sveRSjkHv0kWZLwPOZt3cbepmZG9ujOgJKjr3h7MvnPuo28s3kbBaH9E0fHUyn+9+X/MLlfbwKO/hOhlFKqcyx4ZSnzX16cbhvuGw0QT3Lv1/7OhIvHEI4e2zy1Siml1MlG/+pSOfGZuz/Cn7/xT955bgEAZUUVlJbvwA74bfbzSVAampyLELs8S2x6RibQM5LuTfjCtu/QHE+xuzaVHjorDvF4isWJJ+mx/iLOGNgPEeGDHzyfc84Zyvx5GwmGXKZMHkTPXtlJOI2q6MHvb7mGpOfhWFa7VwkbPLA7v/rfW5n19hqqqhoYPqyCieP6tpkbr6Ntqanli089R3VzM74xCMLFQwby1Wnnt8wZeLKbsWY9ltDm5xR0HBrjCVbsqmJcr/IcRqeUUup0Mue5+UDbf5PcoEtzfYy18zcw5rwRuQpNKaXUyUB7zCl1fCL5YT79mw/R3NBMrClBUVkBu5peYeXeX+CbGOBgSBGyu9M77925DvekUJvcTk1DEhFrf+JIHCw7zt9mzeaMgf3Sm0QYNqyCYcMqOiwW94A55XxjaE4l2VhTTb/ComNK2BUWhLly+qFXz+1oxhi++/IM9jY1kR9Kzy/oG8NLq9cxsVdPLh92YsOcu4qw67YMYd3HGIMBgp2YBFVKKaVC4SDGP9RfVQY3qH+yKKWUOrKTeSjrsU/8pFQHCOeFKe5eiIhQHr2ECd1/Rln4fAoCQxhQeDuTetyNax/fXGedKeY1UxWvJOkncx0Kxe5AjCTb9OYSy8NLBVi/sylncb24fi1Ld+9ibfVebn/qUT7y7OPsamzo1BiMMezeUUP17vpj2n9HfQMb9uwlLxho2WaJ4NjC08tXdlSYAPjeXlKprRjjH33nE3TFiKGICJ6/v6yGRIJu0QhDu3fr8PKVUkqpfc67YQqWZeGlvJZtzfXNRIuiDJk4MIeRKaWU6vIM4Jv2PboAvf2kupTC4EgKgyNzHcZReSbF8zseZ171Wwhgi8O07lcwpfSCdg/fPFETSm9g0c63MXYc33exLA9LfFavmECfkqIOLXtz4x5e3r6cumQzZ3UbyFndBuBYNqv2VPGjN18HSrEF8gMB1uzdw5dffYG/XH19p9TVhhXb+cN3H2P39mqMgQHDK/jYd66n+xGG73q+D4eITRCSfsckzHy/mtra75OIvw1YWFYRBYXfIBg8u0PKA5jQu4LbzpzAA+8syKwcLBSGQvzw6umnzHBdpZRSJ4chEwdy413v4uFfPNXSPgjnh7nr3k9iay9upZRSR9M1cmztook5pQ6hOrGXpbWLSZkUw/KH0zPcu837L+96mnf2ziJkh7HEIuWneGHnExS4RYwqHJ+TmLuFBjPI/hRzdv+DosIaYk35bFg7jJ07e/LdG8/osHJf27mSny1/Ac+kV1B7acdyJpT05dvjruHJNSvwfIO1b2StCAWBIJtqa1hbvZchJaUdFhdAfU0jP/ncAyTjKSJ56Umj16/Yzk8++wD/+69PHbah36uwgO55UaoaG4kG0r3mjDEkPI/pQwZ3SKw11V8hmVyMSAEiFsbUU1PzZUpL/4rjdExPARHh9rMmcOXIoSzdsYu8QIDxvSsOGoqslFJKdYarPzadc66bzOp31hLKCzHy7KG4gc5b9EkppdTJ62QeyqqJOaUOsLB6Pg9vfRDfePgYXt71AlNLz+PKinchIqT8FO/smUXQDmFJejS4Yzl4JsXM3S/nLDEHcO24S4gu7sf9/5nP7roGepcW8d/XT+LMwX06pLzmVIJfrXiJgGUTsNJzsRljmL93E7Mq17CnuRnf+MRTHp7vs3b3HooiIcIBl7p4rENiam32y8uINyfIK4i0bMsvjFBTVc+yuRsYO+XQSTZLhG9efCF3Pf08dbE4nu/jWDbjKsq5euSwrMeZSq0nmVyKSGFLLwGRMMavpanpMQoKvnTE440xzHxpGU/8/S2qKuvoM6AbN3/ofMZMGnBM5ZflRZk2RIcJKaWUyr3i7oVMvqrjbigqpZRSXY0m5pRqpSnVyCPbHsIVF8cOA+Abnzf3zGR04Vj6RfuT8ON4JoVLoM2xjjjUJatzEXYLEWH6uKFMHzcU3zdY1rENR4x5zbxR9SJLat9BEMYXTWFqt0takm2Hs7puJ77xCdn799s3JPKNyjWMKe3Do8uX4fnFLQmnPY1NhJMuQ0s7fg6zPZV1+N7Bt05831BbdeR57kb26M4/3nsTM9atp6qxidHlPTirTy9sK/tTc/reHhD7EEN7LTxv21GPn/HsIu7/7SsEAg75BSF2bt3LL7/9GHf96AZGjuub9XiVUkqprm7R68t47DfPsnNDJQPH9OP6L1zF4PHHdsNKKaXUScicvF3mNDGnVCvrGtZijI/TKtFkiYVvfJbVLqFftD8hO0yBW0Sj10BA9u8X9+OMLBiXi7AP6ViTcp7x+Numu9kR20xAQhhgZtXzbGpay239PtPSK/BQArZ7yKH8xhgiToCmmiSOsUgKGAwe6bnbgknhXxveYlHdBsK2yxU9J3BBjxFHLKs9ho7pw4u2hTGmJem1b8W3ASOOviptUTjEdaM7fs5Dxx0MxseQQqT1ZdknEDjziMf6vs+j979JMOQSCKSPDUeCNDXEeeyBNzUxp5RS6rTz9tPz+H+fvw/LsQiEAix9cyUrZq/mG//8AoMnaHJOKaVORTqUValTxJESQ/ves8TiiorreWjLfTSnGnEsl6SfIGAFmdb98s4KNWvWN6xgV2wrYSuvJXnlGIetzRvY0rSOftEhhz12WEEPSgJR9sQbyHPTc7ilfB8RmN5zNP9Yu4yeks8WbDwMBVaQEjtIQ+kOHt7yFgWBML7x+dXKZ5mxYSWBDYXEkikuHDOQC8YOwj3ByZ7Hnj2YASN7snbpVgJBF+MbUskUUy4dTe9BPdrsa4xh4WvLef3ht0nGU0y5agJnXz0Rx+34y6RlFRON3k5j458xxkHExpgYtt2LcPjqIx7b3JSgob6Z/IJwm+2BkMPWjVUdGbZSSinV5Rhj+Of/PIobdAhG0jdQ84qiNNY28e+fP8XX/vbZHEeolFIq6wy6+INSp4pBeUOwxSbhJwhY6aGqnvGwxGJs0f7ecMMLxvDBAZ9h5u5X2BOvpG90IOd0u4huwe65Cr3ddsW2kTIeoVbDKEUE3/eojO84YmLOEovvjr+Wbyx4lLpkM5DuGXfHoHMZXdSLId13MmfTFlyxcYG+biGNwTo8J0GRW0rATl+Cdtc18OLeRZRs7IWbDLBw/XZmLF7H9z5w2QkNHbUdm7t+9X5efXQub72wGMd1uPCaiZx71fiD9v3Hj5/gpQdmIpYgIix9cxWzn1vIF3//EawOGL56oGjenTjuEJqaHsT3awkGLyAavQXLyj/iceFIgLz8EIlEqqXHHEAilmLgsPKODlsppZTqUmKNMfburCGvONpmeygaZMOSTTmKSimlVEcSQHQoq1KnhpAd4r19P8DfN99Pk9eU2SpM73HFQSuz9okM4L39PtL5QWZZUaAUWw7umWZjU+gWH/X4/nnd+Os5H2ZpzTYaU3GGF5RTEswD4OrRw3l80XJSvo9tCUnPo8GuIxRwCDjpy0/S86htiCGOhVtkiNYHMMawZOMO5q7eyuThJzYUMxQOcOX7pnLl+6Yedp+dm3bz0t9mEikIY9npJJwxhmVvrmLZm6sZc+7wE4rhWIgIodA0QqFpx3WcZVlcd9tUHvh/r2J8QyDoEGtOYIzhug+c00HRKqWUUl1TMBIkUhAmlfRw29ywStJrsN6wUkqpU5af6wDaTxNzSh1gWMEIvjr8m6yqX0HKpBicN4TiQEmuw+owQ/PHEHXyaUzVEbKigCHmN1HkljIob8QxncOxbHpG8nlg45v8fv0aXHE4v/t4bu57Eb++4Wpu/MOb1McSWCKcVdGf9bK55dhYIoXBIBjsVPqSJCJ4vmHBum0nnJg7FmvmbwRoScq1xJDyWf72mk5JzJ2Ii64ajxtwW63KWsbNHzpP55dTSil12rEsi3d9fDr/+ukTQAg34JBoTuAlPa7/3FW5Dk8ppVQH0R5zSp1iIk6ECcVn5DqMThGwgtzR//M8s+NBNjSuRoBB0RFc2fMWbDm2S0RjqpnvLruP+mQTUTuMweeVXXPZ1rybr4+4jYGl6cTmvz56NrtjdXxqzr00peKE7QAiYBwfNxkk2BxqOacgFOeFD1dkVuUVRQ65WIZYFgWlRx5K2hWICOdPH83500fnOhSllFIq56688xKMgad+9wIN1Y0UlOZxx/dvYeIlY3MdmlJKKXUQTcwppSgOdOP9/T5Nwo8D6WTd8ZhVtZT6ZBN5zr5Emk2eHWZ1/RY2Nu5ss29ZqIBvj72RX618lj3xenzbEIlFCa8vARuQdC86x7a4cOygLHy6oxt9zjCiBREa6pqI5IcREeJNcdyAzeQrxndKDEoppZTKjn295q6882JijXHCeaFOmS9WKaVUjujiD0p1fUu37eTxBSvYXd/A5IF9ede44eSHji/51Jmq401UxZroHS0k7LidVu7xJuT22dK0C3PAlVBEEIRdsb0H7T+qqDd/mPwRKmN1BCyHhtoUP6h8mV3V9em51gIOd91wIT2KO6e3mhtw+PJ9n+DXn/4ze3fUIAKhvBCf/NltlJQXdUoMSimllMou27aJFkRyHYZSSqkOZ0CHsirVdT2/ZDW/fPkNDOBYFst3VPL80tXc/d53URAOHfX4zhT3Uvx04eu8sm0NViax9cFhk3jvkAmIHDzUsqvoFylHaBufMQZjDBXhUqDuoGMssSgPFwFQ0h3+8Nn3sHFXNYmUx8CKElz74AUpOlKfoRX85PmvsWXVDryUR78RvbCdzo1BKaWUUkoppdTxk5M3L4f26VantHgyxW9fe5ug41AQChIJuBSGQ+yorePpxatyHd5B7l4yixe3rCLqBIg6AVzL4p4Vs3lt+7pch3ZEZ3cbTaEbpT7ZhGd8Ur5HvdfMqMIB9Ise2wpoIsKA8hKG9S7r9KTcPpZl0W9ELwaO6atJOaWUUkoppZQ6WRjTvkcXoIk5dUrbtKcGz/cJHJBkcW2bt9dvPsxRuRFLJXlm80ry3SBWpneca9k4YvGPNQtzG9xRRJ0Q3x79ISZ3G0nCTyIiXFVxNp8bekOuQ1NKKaWUUkopdSozIH77Hl2BDmVVp7SCcJCU72OMaTMUNOX5dMvrWnOONKWSeMZvScrt41o2VbGGrJe3bNNO/vLyXNZur6JHUT7vnTaB80cPbPf5ugUL+fSQ92QxQqWUUkoppZRS6tSmPebUKa28MJ9xvSuoi8UxmW6qiZSHCFw7YVSOo2urKBimLBQl5qXabG9MJTize5+slrViyy6+/tfnWLW1koBjs6u6nv/992u8MK/rDe9VSimllFJKKaWOSIeyKtU+lZt3s2HpZpKJZIeV8Y2rpjG+T08a4gmaEkl8Y/jsxecwtvexzX3WWSwRvjjufFLGpzYRozmVpCbeTL4b5PZhk7Ja1t9enY/vG/JCQWzLIhx0Cbk2f31lHr7fNS5OSimllFJKKaXUMTHtfHQBOpRV5UR1ZS13f/pPrF24Ecu2cIMuH/rBrUy5+oysl1UUCfHTG69gR209dc0x+pUWE3IP/9WvS2xgc/3zxLw9dA9Pomf0AhwrnPW4DmVqeX/+33nX86+1C9nSWMv40gpuGjSOHpH8rJazbudewgG3zbag61DXFKMhFqcg0v7Van3jsyfeQMQJEnWCJxqqUkoppZRSSil1RNJFer+1hybmTkPGGGJeiqDtHDSfWWeV/6uP/YENSzYRLYoiIiRiSX7/pb/Qo38ZA0b37ZByKwrzqSg8coJre+NMFlX9HIOHiE1l8xw21T/D2eU/6bTk3Iji7nznzOkdWkbv0gLWbKvCsQMt25Ipj3DAJRoKHOHII5tTtZo/rnuRumQTAOeWjeTOwR37WZRSSimllFJKneZO4sRchw1lFZGQiMwRkUUiskxEvpvZPkBEZovIWhH5l4gEMtuDmddrM+/376jYTmcvb1vJzTPu46oXf8/1r/yJxzYtbpl7rbNsW7ODjcu2tCTlAAIhFy/l8+o/ZnZqLK35JsnSvb/FkgABuxDXysO18qlPbmJLw0s5i6sjvG/aRDxjaE4kMcaQSHk0JVLcfP44bKt9l4W19Tv4+arHaUzFiTohwnaA13cv5e7Vz2Q5eqWUUkeibTCllFJKnVYM4Lfz0QV05BxzceAiY8w4YDxwuYhMAf4X+KUxZjBQDXw4s/+HgerM9l9m9lNZNHPnWv5n8cs0pOIUBcMkfY+7l7/OE5uXdGoc9dWNWJbVZpVUANux2bujplNjaa0+sRHPJLCt/T3GRARLHHY2vZmzuDrChEG9+PpNF1GSH6G2KY7j2Nx52Vm855wx7T7n09vewRhDyE4PkbXEIs8OM2fPGlLGy1boSimljk7bYEoppZQ6bQgGMe17dAUdNpTVpLthNWReupmHAS4C3pvZ/lfgO8DvgGsyzwEeBu4WETGd3Z3rFPaXNXNwLaslcRK00z/++9fO4Zq+Yw5KlHWUviN6AYZU0sNx7Zbtnucx/qLRnRLDoThWBGM8jDFt6sI3HgEru3O8dQVTR/bn7BH9SHk+jn1wovR47YxV44jdZpslgi0Wcd/Dse3DHHl8fGNYXllJXTzOiLIyisOdM8RYKaVOFtoGU0oppZQ6eXToHHMiYgPzgMHAb4F1QI0xJpXZZSvQK/O8F7AFwBiTEpFaoBSoOuCcHwU+CtC3b8fMRXaq2t5U25KM2ydg2VTHm0j6HgG7c6YcjBZEuOnL1/DPHz0Gku4pl0qk6DW4nHOvn9wpMRwyLrcXhYHB1CbW4Fr5iAh+5qvaL/+qnMXVkUQE18lOwmxMUX/W1e8k1Op0Kd9DRAjY7uEPPA7b6+r58nPPs6OhHkEwxnD7xAl8YOKErJxfKaVOFdoGU0oppdRp5SS+n9iRQ1kxxnjGmPFAb+AsYHgWznmPMWaSMWZSWVnZiZ7utDKooBvNqWTLa8/zaYjHKQ8X4FrZSc4cqys+dDFfuf8zTLx4DP1H9eGWr17Ltx6+i3C0/auBZsPEsq+S7/Yn5TeS9JvwTIJhxbfTLTw+p3GdDK7seQYFbpi6ZBMJP0lTKk6zn+DmvudiceK9MY0x/PdLL7Gtro6oGyAaCBByXe6bN593tm7NwidQSqlTh7bBlFJKKXVaMaZ9jyMQkT4iMkNElmfm7f1cZvt3RGSbiCzMPK48kdA7pYuUMaZGRGYAZwNFIuJk7tj2BrZldtsG9AG2iogDFAJ7OiO+08WdQ6dy15zHqI0301ifoCEeBwuiywK8020zZ43p16nxjJo6jFFTh3VqmUcTdso4t+LX1Cc3kPDqKAwMwrVPvWGsHaE4kMePx9/B41vfZmH1eooDUd7VezJnlQzhH7x9wuffVFPDxuoa8oPBlmG3TmahiieWr+DM3r1PuAyllDrVaBtMKaWUUqe8fYs/ZF8K+JIxZr6I5APzRGTfypC/NMb8LBuFdOSqrGUiUpR5HgYuBVYAM4AbMrvdDjyRef5k5jWZ91/VuU2ya1xpL342+TqkWmiMJYgkAgzZWkaoyuWnf3mZDVu1DQ7p4Z0FgYF0C4/XpNxxKgsVcOfg6fz2zI/zg3G3Mbl0aNbmLoylUtgiBy8aYlk0JBJZKUMppU4F2gZTSiml1OmmIxZ/MMbsMMbMzzyvJ92e6nXEg9qhI3vMVQB/zcxxYgEPGWOeFpHlwIMi8gNgAXBvZv97gQdEZC2wF7ilA2M7bfXw8ymaF6ZXuHB/giMAdQ0xnpm5jE/fen5uA1RdQirpsfTtNVRX1tF/eE/6j+zVaYuDHM7AkhICjk08lSLopC9dxhhSvs+FAwfmNDallOpitA2mlFJKqdNL++8pdhORua1e32OMuefAnUSkPzABmA2cA3xaRD4AzCXdq666vQF05Kqsi0kHfeD29aTnOjlwewy4saPiUWk19c3Y1sG9jhzHYteeuhxFpbqS3dur+fGdf6K2qh7f90GEcecO5ZM/vhU30DkLhBxKwLb58vnn871XXyUWS7XMWje8rBuXDxmcs7iUUqqr0TaYUkoppdQxqzLGTDrSDiKSBzwCfN4YUycivwO+T3oQ7feBnwMfam8AufsrW+VEnx5FGCDl+Tj2/pHMnuczftiJzdFVXVnLro2VlPXpRmlF8QlGqnLlT996mOrKWvIKI0C6V9qC11cy45E5TL91ak5ju2BAf+69/jqeW7WaPc3NnNW7NxcOHEDA7tzFS5RSSimllFJKdRVHX8ihvUTEJZ2U+7sx5lEAY8yuVu//EXj6RMrQxNxpJhoJcvPlE/nHM3OxLAvHtognkpQURbnk7PYtxOClPP767X/x+kNvYTsWXspnytUT+cj/vh834B75WD/J6vo5rKmfg2sFGFl4Hn0jY3I+bPJ0VV/dyJpFm4gWhFu2iQiBoMvrj76T88QcQP/iYj4xZXKuw1BKKaWUUkop1RUYOiQxJ+nExL3ACmPML1ptrzDG7Mi8vA5YeiLlaGLuNHT9xePo3b2Ip15fSk19M2eO6su7p42hMC989IMP4dk/vcKMB2cRLYpgWRa+7/Pmk3MpqSjm5i9fe9jjfOPxzPbfsKVpOYKNwbC+YQETi6/g7LL3tNl3065qXpm/htrGZs4a3pezRvTF1V5SWeelvENuF0n3qlRKKaWUUkoppbqcjvlz9RzgNmCJiCzMbPs6cKuIjCedEtwIfOxECtHE3GlIRJg8tj+Tx/bPyvleuG8GwUgQy0oPjbUsi3B+iJce+A83/dc1h+39trlxKVubVhK08lr28Y3PgprnGVV0AQVuNwBeX7SOXzz8H3zPgBhmLFzHmAEVfOf26biOJueyqaisgD5DKti6difRgjAJ39DgQSxpOPuc9vWoVEoppZRSSimlOtLRVlhtD2PMG8ChEhrPZrMc6+i7KHVkTXVN2G7bBJnt2MQaYpgj/HJsaVqOj98mcWeJBUbY2bwOgOZEkv977A0Cjk1BNEhBJEReKMCS9TuYtXRjh3ye092d33sPoWiQXfVxNsZ8qpI+sUiIV2dv4OEH3851eEoppZRSSimlVFvGtO/RBWiPuU7mG5/Xdi3iqW1vU5dqYkzRAG7qewE9w6W5Dq3dRp07nEUzlpFXHG3Z1lTXzLAzB7X0ojuUsJ1/yNSziBC00wsPrN1Whe8bwkGnzfsiMHPJei4cP6hdMRtjeOOdtTz63EL21jQxYnAPbrnmTPr3Pnl/DtnSe3A5X/vLx/nipx6gCAhHA4SjITzf56nH5nPmlMH069/tsMfXJvewo3kjYTuPPpHBWKK9GpVSSimllFJKdRAD+F0jydYempjrZA9t/g9PbH0T13JwxGb2npUsqdnAj8d9hLJQYa7Da5dbv3odq99ZR0N1I7ZjkUp6BMMBbvv2TUc8bmjBFN7Z+xRJP45rBTHGkPCbCdt59I6MACDoOvjGYIxp07PON5AXDrY75mdeWcL9j8zGcWxc12b+0i0sXbWd//nqdfTpqSvKrlu3m1A0SF7e/jq2bQvP81k4b+MhE3PGGGZUPsq86hlIJuWa5xRxS9/PdlrcSimllFJKKaXUyUSHsnaixlSMp7e9TcQJEbIDOJZNvhOhKRXn+R3v5Dq8dus5qJwfPfcNrv74dIZOGsSVH7mYHz33DfqP6nPE4wrcblxR8SkccUn4zSRMMwVuKdf0/hK2pHPGg3t2o6woj8ZYsuW4lOcjAtMnDW1XvMmkx7+enkco5BIOuTi2RX5eiETS47HnF7brnKca2073SjyIgO0c+rKxpmERc6tfJWCFCNphgnaYulQ1j237Y8cGq5RSSimllFLqNNbOYaw6lPX0s7N5L5YItrRNbLiWw+r6rTmKKjtKK4q56a53H/dx/fPG8sGBP2d3fAu2OHQL9kZa1Y9lCd/6wKV8677nqa5vJj3vouGOy85kVP/yw57XGA8vPotkfAYiEdzwFdjuaAD21DSSSvlEwoE2xwQDDms2Vh73ZzgVjZ3QD9uySCRSBALpy0Qq5eHYFpPOGnjIYxbWvIEg6XkCM0JWmKr4dlImgSOBQx7XXsmkx5x565m3cBMFhWGmnTucfn10KLJSSimllFJKnXa6SJKtPTQx14lKgwV4xuAbv03yIumn6B0uy2FkuWVbLuXhQyd7APqUFfGnu25i+aZdNDYnGNGvB4XR0GH3N8YnVvsNUvFZpAebQ7L5KYJ5nyAQvZWigjAAnudj2/t/Dolkil7lRVn5TCe7goIwn/jcdH736xdpbIyDAbHgAx8+n/KKokMek/BiyAGdcEUEQdKLgBx6cd52SSRT/OCnT7NmXSUi4BvDi68u55MfvpBzpwzJXkFKKaWUUkoppbo+TcypY1EUyOOcspHMrFxK2A5ii0Wzl8CxbK7sdVauw+vSbMtizICKY9rXS8xOJ+Ukv2VeOmNSJBp+hxO6jFCwhCsuHMVTLy8hEnaxbYtYPIWIcN1l4zvwU5xczpw8kOG/v50lizbj+YbRY/tQ3GqBjwONKJjEtub1beYDTPhxgnYE18pub7lZb69l9bpd5EeD+8tKevzxr//hzAn9CQbdrJanlFJKKaWUUqqL0sUf1PG4c9CV5DsRXto5n2YvTq9INz408DL6RE7fHnPZlu4p57dZLELEwRjBSy7Esi/ivdedRSBg88wrS2lqjlNeVsAHbzqbYYN65C7wLii/IMzU84Yd075ji6ayvO4ddsQ2ZnrICY44vKvnHbxBTVbjmj13PbYlbX7GAdemqTnB+k1VjBh6bElcpZRSSimllFInOwPGz3UQ7aaJuU7mWg63DbiEW/tNI2lShKxAm+SCOnEi+WAOrlMBRNI9vhzb4pZ3n8mNV51BPJEiHHL153CCXCvAe/t9gbX1i9nYuJI8p4jRhZMpDJQCb2W1rLy8EP4B111jDMZAOKS95ZRSSimllFJKnRw0MZcjjmXjYOc6jFOSG76MRNPfMSaBZBYcMH4jYuVhBya02de2rYMWgVDtZ4vDsIKJDCuY2KHlXHz+CGbNXksq5eM4FsYYGpsSlPco1AUglFJKKaWUUup0cxLPMWcdfRelTi6W059QwdcRPPAbMX4DYhUQLvpFS6JOndxGDKvg/TdNIZFM0dScoKk5SVm3fL78ucu156NSSimllFJKnU72zTHXnkcXoD3m1CnJDV+OEzwPL7kUkSCWOxoR/bqfSq6aPpbzzx7K2g2VRCMBBg/sgWVpUk4ppZRSSimlTjsncY85zVSoU5ZYUZzg5FyHoTpQfn6ICWP75joMpZRSSimllFK5pIk5pcAzPivrNlCTqKNPpJy+UV0ZUymllFJKKaWUUh3JaGJOqepEHT9b+ReqEjWYzC/EuKLhfGzQDTiWLnKhlFJKKaWUUkqpDmAA3891FO2miz+orPjLhieojO8lYoeIOmEidogF1cuZUTkn16EppZRSSimllFJKdUmamFMnrDHVzPK69UTtcMs2ESFgubxeOTeHkSmllFJKKaWUUuqUZ0z7Hl2ADmVVJ8w3h+4yKiKkjNfJ0SillFJKKaWUUuq00kWSbO2hPebUCct3o/SNlNPkxVq2GWOIewkml47JYWRKKaWUUkoppZQ6tRnw2/noAjQxp7LijgHXELKDNKSaqU820uTF6B0p57LyqbkOTSmllFJKKaWUUqcqA8b47Xp0BTqUVWVFn0g5Pxr7Wd7Zs5Td8WoG5vVmXNEwXEu/YkoppZRSSimllOpAXaT3W3to1kRlTZ4TYVqPs3IdxkkrEU+yadkWgpEgfYb1RERyHZJSSimllFJKKaU6kCbmlOoCZj87n3u/9neS8RTG+JT3784X7vk4PfqV5To0pZRSSimllFKqa9PFH5RS7bV1zQ5+94W/4PuGcH6IcH6YHet38ZM77sb3u8aYd6WUUkoppZRSqksyBny/fY8uQBNz6piYkzj73NXNfOQtvJRHIOQCICJEi6Ls2V7NmvkbchydUkoppZRSSinVxRnTvkcXoENZ1WEZY3hy5UruX7CA3Y1NDCkt4ZOTp3BGr565Du2UUrOrDrEOnk9OBBprm3IQkVJKKaWUUkopdfIwXaT3W3tojzl1WP9asoRfznqTxkSSolCITTW1fPn551mya1euQzuljL9odGZ55/3Zei/lYQwMHt8/d4EppZRSSimllFJdXjt7y3WRHnOamFOHlPQ87l+wkLDrEnSc9PDKQAAD/HX+/FyHd0qZdNk4Bk8cQGNNI011zTRUNxJriPGeL1xNQWl+rsNTSimllFJKKaW6LgP4pn2PLkCHsqpDqovHiaVS5AeDbbaHHIf1e6tzFNWpyQ24fPWBzzLr8TnMeXY+0YII0249l1FTh+U6NKWUUkoppZRSSnUgTcypQyoIBgk7DgnPI2DbLdubUylGde+ew8hOTYGgy7Sbz2HazefkOhSllFJKKaWUUurkYnSOOXWKcW2b2ydOoDmZJJZK4RtDQyKBBdw+cUKuw1NKKaWUUkoppZTCAMY37Xp0BZqYU4d14+jR3HXuORQGg9THYwwuKeHnV17B6B49ch2aUkoppZRSSimlVGYhB799j6MQkctFZJWIrBWRr3ZE+DqUVR2WiHD18OFcPXx4rkNRSimllFJKKaWUOqSO6P0mIjbwW+BSYCvwjog8aYxZns1yNDGnlFJKKaWUUkoppU5eHTPH3FnAWmPMegAReRC4BtDEnFJKKaWUUkoppZRS9VS/8LJ5uFs7Dw+JyNxWr+8xxtyTed4L2NLqva3A5HaWc1iamFNKKaWUUkoppZRSJyVjzOW5juFE6OIPSimllFJKKaWUUkq1tQ3o0+p178y2rNLEnFJKKaWUUkoppZRSbb0DDBGRASISAG4Bnsx2ITqUVSmllFJKKaWUUkqpVowxKRH5NPACYAN/NsYsy3Y5mphTSimllFJKKaWUUuoAxphngWc7sgwdyqqUUkoppZRSSimlVA50WGJORPqIyAwRWS4iy0Tkc5ntJSLykoisyfy/OLNdROQ3IrJWRBaLyMSOik0ppZRS6lSlbTCllFJKqZNHR/aYSwFfMsaMBKYAnxKRkcBXgVeMMUOAVzKvAa4AhmQeHwV+14GxKaWUUkqdqrQNppRSSil1kuiwxJwxZocxZn7meT2wAugFXAP8NbPbX4FrM8+vAe43aW8DRSJS0VHxKaWUUkqdirQNppRSSil18uiUOeZEpD8wAZgN9DDG7Mi8tRPokXneC9jS6rCtmW1KKaWUUqodtA2mlFJKKdW1dfiqrCKSBzwCfN4YUyciLe8ZY4yImOM830dJD7MAiIvI0qwFqwC6AVW5DuIUovXZykMfz8pptE6zS+sz+7ROs2tYrgM4WWkb7KSi143s0zptJQttMK3P7NM6zT6t0+zSNlgn6dDEnIi4pBuEfzfGPJrZvEtEKowxOzLDJCoz27cBfVod3juzrQ1jzD3APZnzzzXGTOqwD3Aa0jrNLq3P7NM6zS6tz+zTOs0uEZmb6xhORtoGO7lofWaf1ml2aX1mn9Zp9mmdZpe2wTpPR67KKsC9wApjzC9avfUkcHvm+e3AE622fyCzMtgUoLbVcAullFJKKXUMtA2mlFJKKXXy6Mgec+cAtwFLRGRhZtvXgR8DD4nIh4FNwE2Z954FrgTWAk3ABzswNqWUUkqpU5W2wZRSSimlThIdlpgzxrwByGHevvgQ+xvgU8dZzD3HG5c6Kq3T7NL6zD6t0+zS+sw+rdPs0vo8TtoGOylpfWaf1ml2aX1mn9Zp9mmdZpfWZyeRdFtMKaWUUkoppZRSSinVmTpsjjmllFJKKaWUUkoppdThddnEnIj0EZEZIrJcRJaJyOcy20tE5CURWZP5f3Fmu4jIb0RkrYgsFpGJuf0EXY+IhERkjogsytTpdzPbB4jI7Ezd/UtEApntwczrtZn3++f0A3RRImKLyAIReTrzWuvzBIjIRhFZIiIL960EpL/3J0ZEikTkYRFZKSIrRORsrdP2EZFhme/mvkediHxe6/PEiMgXMv8uLRWRf2b+vdJraY5oGyz7tA3WMbQNll3aBssubX9ll7bBsk/bX11Hl03MASngS8aYkcAU4FMiMhL4KvCKMWYI8ErmNcAVwJDM46PA7zo/5C4vDlxkjBkHjAcul/Tqa/8L/NIYMxioBj6c2f/DQHVm+y8z+6mDfQ5Y0eq11ueJm2aMGd9quXP9vT8xvwaeN8YMB8aR/r5qnbaDMWZV5rs5HjiD9ET5j6H12W4i0gv4LDDJGDMasIFb0GtpLmkbLPu0DdYxtA2WfdoGyx5tf2WRtsGyS9tfXYwx5qR4AE8AlwKrgIrMtgpgVeb5H4BbW+3fsp8+DlmfEWA+MBmoApzM9rOBFzLPXwDOzjx3MvtJrmPvSg+gN+l/AC4CniY92bbW54nV6Uag2wHb9Pe+/fVZCGw48LumdZqVup0OzNL6POF67AVsAUoy18angcv0Wtp1HtoGy3p9ahssO/WobbDs16m2wbJXl9r+6tj61TbYidehtr+60KMr95hrkekmOQGYDfQwxuzIvLUT6JF5vu+Ltc/WzDbVSqbL/0KgEngJWAfUGGNSmV1a11tLnWberwVKOzXgru9XwJcBP/O6FK3PE2WAF0Vknoh8NLNNf+/bbwCwG7gvM9znTyISRes0G24B/pl5rvXZTsaYbcDPgM3ADtLXxnnotbRL0DZY9mgbLOt+hbbBsk3bYNmj7a+OpW2wE6Ttr66lyyfmRCQPeAT4vDGmrvV7Jp2u1WVlj4MxxjPp7r+9gbOA4bmN6OQlIlcDlcaYebmO5RRzrjFmIunu558SkfNbv6m/98fNASYCvzPGTAAa2d/FH9A6bY/MfBvvBv594Htan8cnMxfMNaT/iOkJRIHLcxqUArQNlm3aBssebYN1GG2DZY+2vzqItsGyQ9tfXUuXTsyJiEu6Qfh3Y8yjmc27RKQi834F6buOANuAPq0O753Zpg7BGFMDzCDdPbVIRJzMW63rraVOM+8XAns6N9Iu7Rzg3SKyEXiQ9FCKX6P1eUIyd28wxlSSnjfiLPT3/kRsBbYaY2ZnXj9MuqGodXpirgDmG2N2ZV5rfbbfJcAGY8xuY0wSeJT09VWvpTmkbbCOo22wrNA2WAfQNlhWafur42gbLDu0/dWFdNnEnIgIcC+wwhjzi1ZvPQncnnl+O+l5T/Zt/0Bm9ZUpQG2rLq0KEJEyESnKPA+Tni9mBenG4Q2Z3Q6s0311fQPwauYuhAKMMV8zxvQ2xvQn3Z36VWPM+9D6bDcRiYpI/r7npOePWIr+3rebMWYnsEVEhmU2XQwsR+v0RN3K/iEUoPV5IjYDU0Qkkvm3f993VK+lOaJtsOzTNlh2aRss+7QNll3a/upQ2gbLDm1/dSHSVetSRM4FZgJL2D93xNdJz3HyENAX2ATcZIzZm/ky3U26+2UT8EFjzNxOD7wLE5GxwF9Jr7hiAQ8ZY74nIgNJ320sARYA7zfGxEUkBDxAem6ZvcAtxpj1uYm+axORC4G7jDFXa322X6buHsu8dIB/GGN+KCKl6O99u4nIeOBPQABYD3yQzDUArdPjlvmDZTMw0BhTm9mm39ETICLfBW4mvRroAuAjpOcy0WtpDmgbLPu0DdZxtA2WHdoGyz5tf2WftsGyS9tfXUeXTcwppZRSSimllFJKKXUq67JDWZVSSimllFJKKaWUOpVpYk4ppZRSSimllFJKqRzQxJxSSimllFJKKaWUUjmgiTmllFJKKaWUUkoppXJAE3NKKaWUUkoppZRSSuWAJuaUUidERHqLyBMiskZE1onIr0UkkHnvDhG5+zDHvdnO8q4VkZGtXn9PRC5pX/RtznujiCwTEV9EJp3o+ZRSSimlOpK2wZRS6tSgiTmlVLuJiACPAo8bY4YAQ4E84IdHO9YYM7WdxV4LtDQKjTHfMsa83M5ztbYUuB74TxbOpZRSSinVYbQNppRSpw5NzCmlTsRFQMwYcx+AMcYDvgB8SEQimX36iMhrmbu53953oIg0tHr+XyLyjogsFpHvttr+gcy2RSLygIhMBd4N/FREForIIBH5i4jcICKXi8i/Wx17oYg8nXk+XUTeEpH5IvJvEck78IMYY1YYY1Zlt3qUUkoppTqEtsGUUuoU4eQ6AKXUSW0UMK/1BmNMnYhsBgZnNp0FjAaagHdE5BljzNx9+4vIdGBIZj8BnhSR84E9wH8DU40xVSJSYozZKyJPAk8bYx7OHL/vVC8D94hI1BjTCNwMPCgi3TLnucQY0ygiXwG+CHwv67WhlFJKKdU5tA2mlFKnCE3MKaU62kvGmD0AIvIocC4wt9X70zOPBZnXeaQbieOAfxtjqgCMMXuPVIgxJiUizwPvEpGHgauALwMXkB52MSvTgAwAb2XnoymllFJKdVnaBlNKqZOAJuaUUidiOXBD6w0iUgD0BdYCEwFzwDEHvhbgf4wxfzjgPJ9pRzwPAp8G9gJzjTH1mTlYXjLG3NqO8ymllFJKdUXaBlNKqVOEzjGnlDoRrwAREfkAgIjYwM+BvxhjmjL7XCoiJSISJj1p8KwDzvEC6flQ8jLn6CUi3YFXgRtFpDSzvSSzfz2Qf5h4XifdEL2TdAMR4G3gHBEZnDlPVESGnsBnVkoppZTKNW2DKaXUKUITc0qpdjPGGOA60o23NcBqIAZ8vdVuc4BHgMXAI63mNjGZc7wI/AN4S0SWAA8D+caYZaRXFntdRBYBv8gc9yDwXyKyQEQGHRCPBzwNXJH5P8aY3cAdwD9FZDHpIRTDD/wsInKdiGwFzgaeEZEX2l0xSimllFIdSNtgSil16pD0NV0ppTpP5g7sfGNMv1zHopRSSil1utA2mFJKdT3aY04p1alEpCfpO6Y/y3UsSimllFKnC22DKaVU16Q95pRSSimllFJKKaWUygHtMaeUUkoppZRSSimlVA5oYk4ppZRSSimllFJKqRzQxJxSSimllFJKKaWUUjmgiTmllFJKKaWUUkoppXJAE3NKKaWUUkoppZRSSuWAJuaUUkoppZRSSimllMqB/w8ZYBgk9I1qGQAAAABJRU5ErkJggg==\n",
"text/plain": [
"<Figure size 1440x432 with 3 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"%matplotlib inline\n",
"from matplotlib import pyplot as plt\n",
"\n",
"from matplotlib.cm import ScalarMappable\n",
"fig, axes = plt.subplots(1, 2, figsize=(20,6))\n",
"algos = [\"Sobol\", \"EHVI\"]\n",
"outcomes_list = [sobol_outcomes, ehvi_outcomes]\n",
"cm = plt.cm.get_cmap('viridis')\n",
"BATCH_SIZE = 1\n",
"\n",
"n_results = N_BATCH*BATCH_SIZE + N_INIT\n",
"batch_number = torch.cat([torch.zeros(N_INIT), torch.arange(1, N_BATCH+1).repeat(BATCH_SIZE, 1).t().reshape(-1)]).numpy()\n",
"for i, train_obj in enumerate(outcomes_list):\n",
" x = i\n",
" sc = axes[x].scatter(train_obj[:n_results, 0], train_obj[:n_results,1], c=batch_number[:n_results], alpha=0.8)\n",
" axes[x].axvline(constraints[0])\n",
" axes[x].axhline(constraints[1])\n",
" axes[x].set_title(algos[i])\n",
" axes[x].set_xlabel(\"Objective 1\")\n",
" axes[x].set_xlim(200, 800)\n",
" axes[x].set_ylim(200, 800) \n",
"axes[0].set_ylabel(\"Objective 2\")\n",
"norm = plt.Normalize(batch_number.min(), batch_number.max())\n",
"sm = ScalarMappable(norm=norm, cmap=cm)\n",
"sm.set_array([])\n",
"fig.subplots_adjust(right=0.9)\n",
"cbar_ax = fig.add_axes([0.93, 0.15, 0.01, 0.7])\n",
"cbar = fig.colorbar(sm, cax=cbar_ax)\n",
"cbar.ax.set_title(\"Iteration\")"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "tamil-material",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.5"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment