From 8cd4adeea690b6b6f998e07a93d44a0624c2b7c5 Mon Sep 17 00:00:00 2001 From: Guy Kerem Date: Mon, 31 May 2021 19:13:08 +0300 Subject: [PATCH] feature: add tutorials Co-authored-by: gal --- .gitignore | 7 +- docs/1_qpu_db.ipynb | 799 +++++++++++++++++++++ docs/2_qubit_graph_calibration.ipynb | 506 +++++++++++++ docs/linear.png | Bin 0 -> 41293 bytes docs/merge.png | Bin 0 -> 47133 bytes docs/quacalnode.drawio | 1 + docs/singlenode.png | Bin 0 -> 79500 bytes entropylab_qpudb/_qpudatabase.py | 43 +- entropylab_qpudb/_resolver.py | 8 +- entropylab_qpudb/tests/test_qpudatabase.py | 6 +- 10 files changed, 1348 insertions(+), 22 deletions(-) create mode 100644 docs/1_qpu_db.ipynb create mode 100644 docs/2_qubit_graph_calibration.ipynb create mode 100644 docs/linear.png create mode 100644 docs/merge.png create mode 100644 docs/quacalnode.drawio create mode 100644 docs/singlenode.png diff --git a/.gitignore b/.gitignore index 788f634..90e13ad 100644 --- a/.gitignore +++ b/.gitignore @@ -131,4 +131,9 @@ dmypy.json # pycharm project file .idea -reports \ No newline at end of file +reports + +# DB files +*.fs* +*.db +.vscode/ diff --git a/docs/1_qpu_db.ipynb b/docs/1_qpu_db.ipynb new file mode 100644 index 0000000..05058fe --- /dev/null +++ b/docs/1_qpu_db.ipynb @@ -0,0 +1,799 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "# Tutorial: QPU Database\n", + "\n", + "**This tutorial requires version >=0.0.5 of the QPU DB**\n", + "\n", + "## Using the QPU DB\n", + "\n", + "The QPU database is a permanent store built for storing calibration data for Quantum Processing Units (QPU).\n", + "\n", + "It provides the following features and benefits:\n", + "\n", + "* Persistent storage of any python object related to QPU calibration info\n", + "* Metadata on parameter calibration state and last modified time\n", + "* Convenient addressing of quantum elements\n", + "* Easy revert to previously stored parameters\n", + "\n", + "In this short tutorial we will learn how to use the QPU DB by looking at a simplified example of a QPU with two superconducting\n", + "qubits, two readout resonators and a parametric coupling element.\n", + "\n", + "### Creating the database\n", + "\n", + "Below we can see a simple usage example. The DB is created by calling the `create_new_database` method.\n", + "This method is similar to initializing a git repo in the sense that we only do it once. Here we initialize it\n", + "with an initial dictionary which contains some basic attributes of our QPU. We'll be able to add more attributes,\n", + "and also elements, later on. Once we call `create_new_qpu_database`, a set of database files will be created for us at\n", + "the working directory of the python script.\n", + "\n", + "These files are the persistent storage of our DB. They can be saved to a different location by specifying\n", + "the `path` argument to the function." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "# %load_ext autoreload\n", + "# %autoreload 2\n", + "from entropylab_qpudb import create_new_qpu_database, CalState, QpuDatabaseConnection" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "initial_dict = {\n", + " 'q1': {\n", + " 'f01': 5.65e9 # an initial guess for our transition frequency\n", + " },\n", + " 'q2': {\n", + " 'f01': 5.25e9\n", + " },\n", + " 'res1': {\n", + " 'f_r': 7.1e9\n", + " },\n", + " 'res2': {\n", + " 'f_r': 7.3e9\n", + " },\n", + " 'c1_2': {\n", + " 'f_r': 0.4e9\n", + " }\n", + "}\n", + "create_new_qpu_database('db1', initial_dict, force_create=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "Notes:\n", + "\n", + "1. here we allow for the possibility of overwriting an existing database\n", + "by passing the `force_create=True` flag. This option is useful when experimenting with the database creation, however in\n", + "common usage it is recommended to remove this flag, since when it's false (by default), it will prevent overwriting an existing\n", + "database and deleting all the data stored in it.\n", + "\n", + "2. (For experts): if you need to create a DB server, rather than create a filesystem storage, please let us know.\n", + "The DB backend is currently\n", + "the [ZODB](https://zodb.org/en/latest/) database, with plans to be replaced by\n", + "[gitdb](https://github.com/gitpython-developers/gitdb).\n", + "\n", + "The keys of `initial_dict` are called the *elements* (and are similar in nature to QUA's quantum elements), and the\n", + "values of these elements are subdictionaries of *attributes*. The values of the attributes can be anything you like,\n", + "or more accurately, any python object that can be pickled. The different elements need not have the same attributes.\n", + "\n", + "### Connecting to the database and basic usage\n", + "\n", + "Now create a connection to our DB. The connection to the DB is our main \"workhorse\" - we create the DB once, and\n", + "whenever we want to connect to it in order to retrieve or store data, we open a connection object. Note that currently\n", + "only a single connection object per DB is allowed." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "opening qpu database db1 from commit at index 0\n" + ] + } + ], + "source": [ + "db1 = QpuDatabaseConnection('db1')" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "and let's view the contents of our DB by calling `print`:" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "q1\n", + "----\n", + "f01:\tQpuParameter(value=5400000000.0, last updated: 05/30/2021 09:24:45, calibration state: COARSE)\n", + "\n", + "q2\n", + "----\n", + "f01:\tQpuParameter(value=5250000000.0, last updated: 05/30/2021 09:24:19, calibration state: UNCAL)\n", + "\n", + "res1\n", + "----\n", + "f_r:\tQpuParameter(value=7100000000.0, last updated: 05/30/2021 09:24:19, calibration state: UNCAL)\n", + "\n", + "res2\n", + "----\n", + "f_r:\tQpuParameter(value=7300000000.0, last updated: 05/30/2021 09:24:19, calibration state: UNCAL)\n", + "\n", + "c1_2\n", + "----\n", + "f_r:\tQpuParameter(value=400000000.0, last updated: 05/30/2021 09:24:19, calibration state: UNCAL)\n" + ] + } + ], + "source": [ + "db1.print()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "Congratulations! You've just created your first QPU DB. As you can see when calling `print` the values we entered\n", + "in `initial_dict` are now objects of type `QpuParameter`. These objects have 3 attributes:\n", + "\n", + "* `value`: the value you created initially and can be any python object\n", + "* `last_updated`: the time when this parameter was last updated (see *committing* section to understand how to\n", + "update). This parameter is handled by the DB itself.\n", + "* `cal_state`: an enumerated metadata that can take the values `UNCAL`, `COARSE`, `MED` and `FINE`. This\n", + "can be used by the user to communicate what is the calibration level of these parameters. They can be set and queried\n", + "during the script execution, but are not used by the DB itself.\n", + "\n", + "### Modifying and using QPU parameters\n", + "\n", + "We can use and modify values and calibration states of QPU parameters in two different ways:\n", + "\n", + "#### Using `get` and `set`\n", + "\n", + "let's modify the value of `f01` and then get the actual value:" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "5330000000.0" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "db1.set('q1', 'f01', 5.33e9)\n", + "db1.get('q1', 'f01').value" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "We can also modify the calibration state when setting:" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "db1.set('q1', 'f01', 5.36e9, CalState.COARSE)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "To get the full `QpuParameter` object we can omit `.value`. We can see that the cal state and modification date were updated." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "QpuParameter(value=5360000000.0, last updated: 05/30/2021 09:24:35, calibration state: COARSE)" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "db1.get('q1', 'f01')\n", + "#db1.get('q1', 'f01').cal_state" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "Note that we can't modify the value by assigning to value directly - this will raise an exception." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Using resolved names\n", + "\n", + "The names we chose for the elements, namely `'q1'`, `'res1'` and `'c1_2'` have a special significance. If we follow this\n", + "convention of naming qubit elements with the format 'q'+number, resonators with the format 'res'+number\n", + "and couplers with the format 'c'+number1+'_'+number2, as shown above, this allows us to get and set values in a more\n", + "convenient way:" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "5360000000.0\n", + "7100000000.0\n", + "400000000.0\n", + "400000000.0\n" + ] + } + ], + "source": [ + "print(db1.q(1).f01.value)\n", + "print(db1.res(1).f_r.value)\n", + "print(db1.coupler(1, 2).f_r.value)\n", + "print(db1.coupler(2, 1).f_r.value)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "while this method basically syntactic sugar, it allows us to conveniently address elements by indices, which is useful when\n", + "working with multiple qubit systems, and especially with couplers. We can also set values using this resolved addressing method:" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "QpuParameter(value=5400000000.0, last updated: 05/30/2021 09:24:45, calibration state: COARSE)" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "db1.update_q(1, 'f01', 5.4e9)\n", + "db1.q(1).f01" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "Note: This default mapping between integer indices and strings can be modified by subclassing the\n", + "`Resolver` class found under `entropylab_qpudb._resolver.py`.\n", + "\n", + "### Committing (saving to persistent storage) and viewing history\n", + "\n", + "Everything we've done so far did not modify the persistent storage. In order to do this, we need to *commit* the changes we made.\n", + "This allows us to control at which stages we want to make aggregated changes to the database.\n", + "\n", + "Let's see how this is done. We need to call `commit`, and specify an optional commit message:" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "commiting qpu database db1 with commit at index 1\n" + ] + } + ], + "source": [ + "db1.update_q(1, 'f01', 6.e9)\n", + "db1.commit('a test commit')\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "Now the actual file was changed. To see this, we need to close the db. We can then delete db1,\n", + "and when re-opening the DB we'll see f01 of q1 has the modified value." + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "closing qpu database db1\n", + "closing qpu database db1\n", + "opening qpu database db1 from commit at index 1\n" + ] + }, + { + "data": { + "text/plain": [ + "QpuParameter(value=6000000000.0, last updated: 05/27/2021 09:44:34, calibration state: COARSE)" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "closing qpu database db1\n", + "closing qpu database db1\n", + "opening qpu database db1 from commit at index 1\n" + ] + }, + { + "data": { + "text/plain": [ + "QpuParameter(value=6000000000.0, last updated: 05/27/2021 09:44:34, calibration state: COARSE)" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "db1.close()\n", + "del db1\n", + "db1 = QpuDatabaseConnection('db1')\n", + "db1.q(1).f01" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "Note that the commit was saved with an index. This index can be later used to revert to a [previous state](#reverting-to-a-previous-state).\n", + "\n", + "To view a history of all the commits, we call `get_history`.\n", + "\n", + "Note that the timestamps of the commits are in UTC time." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
timestampmessage
02021-05-30 06:24:19.796403initial commit
12021-05-30 06:26:20.205781a test commit
\n", + "
" + ], + "text/plain": [ + " timestamp message\n", + "0 2021-05-30 06:24:19.796403 initial commit\n", + "1 2021-05-30 06:26:20.205781 a test commit" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "db1.get_history()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Adding attributes and elements\n", + "\n", + "In many cases you realize while calibrating your system that you want to add attributes that did not exist in the initial\n", + "dictionary, or even new elements. This is easy using the `add_element` and `add_attribute` methods.\n", + "Let's see an example for `add_attribute`:" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "QpuParameter(None)\n", + "QpuParameter(value=-300000000.0, last updated: 05/30/2021 09:26:25, calibration state: COARSE)\n" + ] + } + ], + "source": [ + "db1.add_attribute('q1', 'anharmonicity')\n", + "\n", + "print(db1.q(1).anharmonicity)\n", + "\n", + "db1.update_q(1, 'anharmonicity', -300e6, new_cal_state=CalState.COARSE)\n", + "\n", + "print(db1.q(1).anharmonicity)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "### Reverting to a previous state\n", + "\n", + "Many times when we work on bringing up a QPU, we reach a point where everything is calibrated properly and our measurements\n", + "and calibrations give good results. We want to be able to make additional changes, but to possibly revert to the good state\n", + "if things go wrong. We can do this using `restore_from_history`. We simply need to provide it with the history\n", + "index to which we want to return:" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "opening qpu database db1 from commit at index 0\n", + "QpuParameter(value=5650000000.0, last updated: 05/30/2021 09:24:19, calibration state: UNCAL)\n" + ] + } + ], + "source": [ + "db1.restore_from_history(0)\n", + "print(db1.q(1).f01)\n", + "assert db1.q(1).f01.value == initial_dict['q1']['f01']\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "Calling this method will replace the current working DB with the DB that was stored in the commit with the index\n", + "supplied to `restore_from_history`. The new values will not be committed. It is possible to modify the values and\n", + "commit them as usual.\n", + "\n", + "## Next steps\n", + "\n", + "While the QPU DB is a standalone tool, it is designed with QUA calibration node framework in mind.\n", + "In the notebook called `2_qubit_graph_calibration.ipynb` we explore how the QUA calibration nodes framework can be used\n", + "to generate calibration graphs.\n", + "\n", + "## Remove DB files\n", + "\n", + "To remove the DB files created in your workspace for the purpose of this demonstration, first close the db connection:" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "closing qpu database db1\n" + ] + } + ], + "source": [ + "db1.close()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "then run this cell:" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "from glob import glob\n", + "import os\n", + "for fl in glob(\"db1*\"):\n", + " os.remove(fl)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Entropy", + "language": "python", + "name": "entropy" + }, + "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.8" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/docs/2_qubit_graph_calibration.ipynb b/docs/2_qubit_graph_calibration.ipynb new file mode 100644 index 0000000..6ad8931 --- /dev/null +++ b/docs/2_qubit_graph_calibration.ipynb @@ -0,0 +1,506 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "# Tutorial: QUA calibration nodes on a graph\n", + "\n", + "## Motivation and background\n", + "\n", + "This tutorial explains, with a simple toy example, how to run calibrations on a graph using the *QUA Calibration node*\n", + "framework. It is based on the code in [hello QUA](https://github.com/qua-platform/qua-libs/tree/main/examples/basics/hello-qua)\n", + "in the [qua-libs](https://github.com/qua-platform/qua-libs) project.\n", + "\n", + "The basic idea of the QUA calibration nodes is to allow the quantum engineer or experimentalist to build up the\n", + "quantum machine config required to run an accurate and updated QUA program in an iterative way and to break it down\n", + "to a manageable series of small and self-contained steps, each within a `QuaCalNode`.\n", + "\n", + "The problem that `QuaCalNodes`solves is the following: in multiple qubit systems the QUA config becomes a large object\n", + "that is full of many parameters. These include IF frequencies, waveform samples and mixer correction entries that need to\n", + "be kept up do date and well-calibrated. Furthermore, when tuning up the system, we're often in experimentation mode\n", + "so we need a framework that is modular and flexible. `QuaCalNodes`, together with the QPU DB, provide a way to build\n", + "the QUA config and modify them both automatically and as well as manually when needed.\n", + "\n", + "## Prerequisites and assumptions\n", + "\n", + "This tutorial assumes a working knowledge of QUA (see [qua-libs](https://github.com/qua-platform/qua-libs))\n", + "and familiarity with the QPU DB\n", + "(see [section 1](https://github.com/entropy-lab/entropy-qpu/blob/main/docs/qpu_db.ipynb) of the tutorial).\n", + "\n", + "## QUA Calibration nodes\n", + "\n", + "### Basic idea\n", + "\n", + "![linear](linear.png)\n", + "\n", + "QUA cal nodes are `PyNodes` which pass the QUA config as input and output. Each QUA cal node performs a calibration\n", + "measurement and modifies the QUA config with only the values that were calibrated in this node. If needed, the node\n", + "can also add operations and pulses that are required to perform the calibration. This can be seen in the figure above:\n", + "We start with a root node, which is a `PyNode` that only passes a bare-bones QUA config (QUA config v0).\n", + "The next node, time of flight calibration, is a `QuaCalNode` that measures the time of flight to a readout resonator.\n", + "It updates QPU DB by that value and also modifies the QUA config (becoming QUA config v1), which is passed on to the next node.\n", + "The next node does the same, and in this manner the config is built up with fresh calibration values, which are concurrently\n", + "stored in the QPU DB.\n", + "\n", + "### Anatomy of a single QUA node\n", + "\n", + "![anatomy](singlenode.png)\n", + "\n", + "Let's look more closely at a single `QuaCalNode`, here time of flight calibration. The node contains 3 methods which\n", + "are performed sequentially when running the graph:\n", + "\n", + "* `prepare_config()`\n", + "* `run()`\n", + "* `update_config()`\n", + "\n", + "The first method, `prepare_config()`, is always executed and can be used to add to the config things required for the\n", + "calibration, such as readout pulses, integration weights etc.\n", + "\n", + "The second method, `run()`, performs the actual QUA program and the analysis, and modifies the QPU DB accordingly.\n", + "\n", + "The third method, `update_config()`, takes the values from the QPU DB and updates the QUA config accordingly. For\n", + "example, here we'd modify the `time_of_flight` field of the resonator.\n", + "\n", + "You may be wondering why `run()` is optional and why we don't just immediately modify TOF in the QUA config. The reason\n", + "is that we may want to build up the config without actually running the calibration - for example if decide that TOF\n", + "is sufficiently well calibrated and doesn't need to be re-measured. The decision whether to run a node in a graph or\n", + "not is determined by the `run_strategy` argument of the entropy `Graph` object.\n", + "\n", + "### Merging configs\n", + "\n", + "![merge](merge.png)\n", + "\n", + "in many cases, a node can depend on more than one ancestor. In this case, the configs will be automatically merged,\n", + "as seen above.\n", + "\n", + "NOTE: If ancestor nodes modify the same config fields, the stored value will be **undetermined**!\n", + "Please avoid this situation.\n", + "\n", + "### A note on flexibility\n", + "\n", + "The framework of QPU DB and `QuaCalNodes` is very flexibly by design. If you want, you can add arguments\n", + "to the class `__init__` method to define run parameters, or, for example, create the full config in the root node\n", + "and only modify its values, thus skipping `prepare_config()` entirely.\n", + "\n", + "The recommended way of using QUA cal nodes, and the config, is as shown here in the tutorial but we really value any\n", + "feedback and modification suggestions!\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "## initializing a QPU DB and an entropy DB\n", + "\n", + "Now that we understand the basic principle, let's look at an example.\n", + "The following code, similar to [section 1](https://github.com/entropy-lab/entropy-qpu/blob/main/docs/qpu_db.ipynb)\n", + "of the tutorial, creates a QPU DB. It also creates an entropy DB and registers the QPU DB as a resource." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "# %load_ext autoreload\n", + "# %autoreload 2\n", + "from entropylab_qpudb import create_new_qpu_database, CalState, QpuDatabaseConnection\n", + "from entropylab.instruments.lab_topology import LabResources, ExperimentResources\n", + "from entropylab.results_backend.sqlalchemy.db import SqlAlchemyDB\n", + "\n", + "initial_dict = {\n", + " 'res1': {\n", + " 'TOF': 240, # an initial guess for TOF\n", + " 'f_res': 6e9 # an initial guess for f_res\n", + " },\n", + "}\n", + "create_new_qpu_database('db1', initial_dict, force_create=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "in the following lines we register the resource:" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "opening qpu database db1 from commit at index 0\n" + ] + } + ], + "source": [ + "entropydb = SqlAlchemyDB('entropy_db.db')\n", + "lab_resources = LabResources(entropydb)\n", + "lab_resources.register_resource_if_not_exist(\n", + " 'qpu_db', QpuDatabaseConnection, ['db1']\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "Now we have the databases ready to go and to be used.\n", + "\n", + "## creating the root node\n", + "\n", + "Below we create the root node. We do not (in this case) take values from QPU DB, but we could if we wanted to.\n", + "\n", + "Note the usage of the `@pynode` decorator. This is a shorthand to building pynodes. Some more details on this technique are available on the main Entropy tutorial.\n", + "For now, it's sufficient to understand that the decorator takes the `root` function and turns it into a `pynode` object with that same name. " + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "from entropylab import EntropyContext, pynode\n", + "from qm.qua import *\n", + "\n", + "from entropylab_qpudb import QuaConfig\n", + "\n", + "\n", + "@pynode(\"root\", output_vars={\"config\"})\n", + "def root(context: EntropyContext):\n", + " return {\"config\": QuaConfig({\n", + " \"version\": 1,\n", + " \"controllers\": {\n", + " \"con1\": {\n", + " \"type\": \"opx1\",\n", + " \"analog_outputs\": {\n", + " 1: {\"offset\": +0.0},\n", + " },\n", + " }\n", + " },\n", + " \"elements\": {\n", + " \"res1\": {\n", + " \"singleInput\": {\"port\": (\"con1\", 1)},\n", + " \"intermediate_frequency\": 6e9, # this is just a guess, will later be modified by the cal node\n", + " \"operations\": {\n", + " \"playOp\": \"constPulse\",\n", + " },\n", + " },\n", + " }\n", + " })}" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "# Measuring TOF and updating the QPU DB and config\n", + "\n", + "Below we see a sketch for an implementation of the two nodes we discussed above: time of flight node and res spectroscopy\n", + "node." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "from entropylab_qpudb import QuaCalNode\n", + "\n", + "class TOFNode(QuaCalNode):\n", + " def prepare_config(self, config: QuaConfig, context: EntropyContext):\n", + " # here we add a measurement pulse\n", + " print('adding a measurement pulse...')\n", + "\n", + " def run_program(self, config, context: EntropyContext):\n", + " # here we write a QUA program that measures the TOF, and modify QPU DB accordingly\n", + " print('running QUA program and analyzing...')\n", + " with program() as prog:\n", + " # measure TOF\n", + " pass\n", + "\n", + " # execute and get results... let's say we found that TOF is 252\n", + " print('updating QPU DB....')\n", + " context.get_resource('qpu_db').set('res1', 'TOF', 252) # here we update the QPU DB\n", + " context.get_resource('qpu_db').commit('after measuring TOF') # optionally, commit here to persistent storage\n", + " pass\n", + "\n", + " def update_config(self, config: QuaConfig, context: EntropyContext):\n", + " # below we update the config from the values stored in the QPU DB\n", + " print('updating QUA config from QPU DB values...')\n", + " config['elements']['res1']['time_of_flight'] = context.get_resource('qpu_db').get('res1', 'TOF').value\n", + " pass\n", + "\n", + "class ResSpecNode(QuaCalNode):\n", + "\n", + " def prepare_config(self, config: QuaConfig, context: EntropyContext):\n", + " print('asserting that the config has the calibrated TOF value...')\n", + " assert config['elements']['res1']['time_of_flight'] == 252 # this is what we expect\n", + " pass\n", + "\n", + " def run_program(self, config, context: EntropyContext):\n", + " pass\n", + "\n", + " def update_config(self, config: QuaConfig, context: EntropyContext):\n", + " pass" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "## Prepare graph experiment\n", + "\n", + "below we can see the syntax for preparing our short calibration experiment" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "opening qpu database db1 from commit at index 0\n" + ] + } + ], + "source": [ + "tofnode_res1 = TOFNode(dependency=root, name='time of flight node')\n", + "res_spec_node_res1 = ResSpecNode(dependency=tofnode_res1, name='res spec node')\n", + "\n", + "from entropylab import Graph\n", + "experiment_resources = ExperimentResources(entropydb)\n", + "experiment_resources.import_lab_resource('qpu_db')\n", + "calibration_experiment = Graph(experiment_resources, res_spec_node_res1.ancestors())" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "## run the graph experiment\n", + "\n", + "when we run the experiment, we see in the printouts the expected results. Note that the `prepare_config()` and `update_config()` methods of `TOFNode` are called again when running `ResSpecNode`. While this is not the most efficient way to run the code, it is done for robustness reasons and will be corrected later on." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2021-05-28 11:18:57,709 - entropy - INFO - Running node root\n", + "2021-05-28 11:18:57,716 - entropy - INFO - Running node time of flight node\n", + "adding a measurement pulse...\n", + "running QUA program and analyzing...\n", + "updating QPU DB....\n", + "commiting qpu database db1 with commit at index 1\n", + "2021-05-28 11:18:57,724 - entropy - INFO - Running node res spec node\n", + "adding a measurement pulse...\n", + "updating QUA config from QPU DB values...\n", + "asserting that the config has the calibrated TOF value...\n", + "2021-05-28 11:18:57,738 - entropy - INFO - Finished entropy experiment execution successfully\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "calibration_experiment.run()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "## closing the QPU DB\n", + "\n", + "if you get a \"can't lock\" error on the DB, run this cell to close it and try again." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "closing qpu database db1\n" + ] + } + ], + "source": [ + "experiment_resources.get_resource('qpu_db').close()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "## Remove DB files\n", + "\n", + "To remove the DB files created in your workspace for the purpose of this demonstration, run this cell:" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "from glob import glob\n", + "import os\n", + "for fl in glob(\"db1*\"):\n", + " os.remove(fl)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Entropy", + "language": "python", + "name": "entropy" + }, + "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.8" + }, + "toc-autonumbering": false, + "toc-showcode": false, + "toc-showmarkdowntxt": false + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/docs/linear.png b/docs/linear.png new file mode 100644 index 0000000000000000000000000000000000000000..69eb3035f2b322cf2155dd162064af344f195afe GIT binary patch literal 41293 zcmeFY^;=b4*EWoS0SXF&SXd~a0=q*oc6awy(B0j=Ra6vF!R`RNzyK8kl@JjX3%f-y zumIr_3*}q;zV7FEzVCSP+b z%;ZQmtDHa+aNlH6>eM=w^4~rX5CohAf+s;xd=PRR6a$6>UvPLb8U&I4+h3+png2T= zJQ)NGkid{BbY`c;p&bXs0)JD?PL&b(4KxGaEFSPB20mcWY%qK_G7-4MSgl5tNF}G~ zfHe@|P-HR`0W>Gj$b1HU90Uhk8+8U1@Qb8U7%YKDa9X>?1hf#*pkz=o3{7!zSusNWM~w@gWgII`5kF~Fz{C0xcNXf!eo zk^xnK2wEhDC$=N?Ho6d{hfo!G3WjgyAT?M89z((4xqu8kz=xtV2@H0!*=V5<^)e<; zh$W(QVzizn<{6Y&Fqy?v*cb*1k7z@KU=pu^B!zkT5{ZS%S0bEzBNa_oxj-0-T%$wz zjZ{6)Jr06pQRo7v6@hokfj@*Om{{i*n!sQ()L`P;bRHtm%B2$FG>J}QLXi{%3RR*K z3RQYHRwvbW4qA{2v6Nm1HAqc=@fOY{o7Z?Cgy(^+x@QlzBFp?)gL4wgE!E(g{D z1@Y-R6BR-O%mK?0(4lxLLxi#*JvcANs6)v`F10~xL#b#ks1eGidFg(>hDjD_{U9sd zN>zDWLf|=@k!-|6gm$^y=Fy>SP^FHB(+Ln<8VQFoi^Vjena&X7`DTWKP7$-5KC_H! zb$YEbybWtG>$oVDLyGlq`EEi1SFxx zFJyax9xx(Isc}1%7%oQbu`8fPA601=+CW;G(WPVw7-k%eBV%K^MxjK^fcwoZECFW( zaRnH>k_$2+(NeD_FpNk>21bR!@G7kYY1IQQDyhdnfKxaky@%&_DPSfB1jZ(*1i&o@ zO~^tMEo`z#p%zMQ5;}vA0R(_Yn9M>9m(PHT&?uIXgjNgPJ_OwFLNb&T4T~Jm8I4lO z2QU%qLot9yhz_k441+OM0*e7+)R?&#Jr@MBGno)K9|=OE#bzQzz=oIwI22BR)Ch5E zkeqDApnY5~M+F1m5YQI9R}Tea1Sq2q!(f^PSg*&9<2a!t51@d6nPUZP1P0~6LUaTv zRw@>d8A=#1G0`Jt8|Zqk-Re?1bZmvn29iTqXol2@HQTgAh?ZlP2+;vKxG)-(%q#~q zgGl!P7(pa30j$JQK_0GA#6X}GMh(uaH2C;7D&2`A+8HVZoP%VlZRWs!sdzr{?N>SU zRt_JLgk7!dv7^Zeh#qLYfhwGt)fO6dl=tW3Y%uCD`FIGgveS(2Yir zl06O@4(agEl(A^rJ ziUc(am`IF5!y{_o2)K!)bmP?k1Zis$hs*8ZwTEL(pszD#t=*5p-&?h=8?2 znFgSTR)_+IL#qLt^h@D5xR35Id8HV*S&U_xgmjihzy-miVjDq=)E#5cj7z}4++M8}B(-}@ATrbB zCqkV*55qvSIn7jo5TFQJHP{U0%fuuDU5!u(R63PfDUiU>QohBjXl;)Ua?8LuC@8&;jv?$Y7Tb z;Xy&UAPh#qJJgj{s4~5T7Do>qH6%OqYq>6p56EK>2|o zv?#d(;+5lVFbh$`4vZ;4x@}&DS7gy}Ax;{b3lWlJOcaHMC+ay6sldbZv-LEH+oeT7 zTwt)AuhwfNa<|;6wkwe&gk7!lh`CNT4XlN;At)q=q;fEDV7pE(!=S-72in4S>$G+Z zRPEAf^h_KJ$v~rh0gt2;5>Q6A6ztcy!8DxArhuAZ)lq7uW+pu|!mf%S;r)ISv-prXzrj0pq2(cziC>tmZ(mcn$(2W#JqGq0>xJ z>y;$7j0_|5lx7v(1uzXIM}hWP8D5CZ&htB%ZZ`r!=4oMKCDKX8BW+S7Sp`wk$N-2- zEmWIYVB^@l6rNHC0h}t9?Qp3$R<7Mf#mc386G{m-*d>04O~$9Q0Q@8xX)+7Jh;-t} zTulJca7Zo)s?j2$UL#=EWW5(`(oro497?Fs18s1almkI{NIX4+?dAdm6bncbq(xbX zMxt2=1y~8u&!vIXV1Np-$Sj{IJMiQv*6)E4p&Xp0CQ+efW)vm9-PVo1J9cHQY~D;=HmSlIuk5| zDAXK;l>k$jJVq_Z<3>toC=G@0pfOZn3muDs@KtJ_!ihvun0_(cX_qs+XexrC2dEiV zti)5ONP@@!mI}#o7@MQPszpkt9Kko~Icy3Xu5cKIMub z0HY`V4_E#_5N9JqM+KvCa4H)mq#b`A7I}9OPo2b09RJXfCc=ACi zig#Ffa)<&jFb{;I0l9Dvi3#O!^T;wZ(F(9UD}}07OPngHRL8J$n0$tSDV5-86syCb z^HGR2x5xyz2qKljGs%%mAsOmKp^#Lxizig80M|oAKowrN32*kg*h(~(goB#JQixlD zG9!E<0)(b=Bi&Z2T#C}GL0U3c2le_?dPpD`!+OD7IZZFpDUe(h1j3e4DH^lYh}RRi zXtIhQs0M|B9qN)qxc* zwF;+JLb+U(&My$t-~>O&pe1TVfyjW(k@sr53BoPj0#DNL6JL+7#qx-B!hh#DD;iBn1>Ry;-N<+4CDIzeh8 zTb+74gszc_H4u&^K)=vZe}GDu^Z~0NX*5oZUh2jI3kQpgRu%%`#yDw2qzUDb2pJ3s zTB7k{5jv!S0uV=@!)G)>MNkxif`iMk9zG6(!nsUlm<|ajKhcSio9Id!U1#(D$0%q5 zk6!2#SjZH%mM!OjxN?dK<}l&|J5dIlDH5mDf>jnUH?R~8oN2;?^0RxNH5as zFq2KFfcyT>4^a*Un~V+;4bQ+iTvosX5D732#Vi*gDIShrPN&PH1_nZ{qD&1wn| zJ|6|GG1wetj0FvLkdX?qg+LaG@MIQI3&-gZLY@Q3=EMCoozUs_6Yx};LWyJh2nM^1 z2ghMt3a7-(;zIalrkpJBkb(Hc1m+PC9*xxp!a8(TkWMHJ$d>Kq2#^8DMlcCNqMM@Q z3Lt!_1TGO6K}I=SEb5R}j_^byN5D(P7K_g4^HX^$t&t^BV)%Zrk1Q6rkqR>k zV5WYK#^F?IQChYFiVwJ57RJUC0nr%|%K`E`4mKLF1FTaCAT<Q@v%giiAS-aIV`!=qIDWQ79U+NggFT=qR%7} z`Oze~2vB9QiRUHw%>sx}qBnZ%B$F7XAw&3Nkce&Ix-0-QAes?y1DC`CtXk)%tNacQ z)uA+5d{ioMPmCj@HCBzB!VhQ_oRl z&F4e)aE-twXIZUIs?W_s5Hu8)8?a|4%jXi4p>T}b#!_&^I*uHV;=%$+FCqZ5M6`%O zCQ=OumRCqu`h_|@#mNPz9}$cNn2;ZQrR{CNv!>Es!oe^utie8)1UzJ;6|%c0~xN9LRzqvt=5X3=HUmfXy*sv07lmC<+j}^I2>Oi~#alVGJYIrNX#?{uGlD z1h5CL3a{m2-4qgRay-u4xGoMLLm}9h>o`LNivuP;By9{R;ad$VRWLD zs)b6qIwUXynWN^L#6a9c;5lkj9f}QMk11kcqY*sS}3~?$PPCwYCVUcKVv)S%LvBWy6T}QS6nuXef!lgEkYFq|Y7Nk@{p$PTT_jd9DME;3l-Lre7*l~P9)DOn_lTZ$r> z33eyoj45Ib3n5YIv=}kfBHWT;wgRB_y3ln(~dqZxcA2uw#{O=O&chH4pXs+lX1TW~x-80u$n3{<{M0a9~ONW0aIkP86P zg@qAlY^K-C)-yq91xJV?fruuOO-5pnG)y3QM3nN$dI^Sypn8NFjZ{uz_z`+82Pv^= zP#_2o1#w87c9I(^al*772$hJGGhI-pRAUzj$u0-pC1shoNQP6T=a4J}9!r5o`-E78 zR_Ua>OiI9>um+@FP4NZ%1HmE3qG((U((WZ2m=34cfhYN}NE?w3Qu~=IFcZon2Y5Nj z8z9CskWfQn(l8(}(-U|{ffwl1(b*QRk}Q!afjHR5!P9LRnbLuiTby(Yjb%`nIesMY zim^t5-l73xsR8s?NE{Zw+sRiOIaDs4<7ZmXG(FZv*K2iLut@6x+s$+VlEV;-i9D>y z;pNbANTrgi^=J@ylhUqbF`O*8S?{46*iOAkYZs6`Zju#6tfo(D! z2?;k_;Rux4M&qGiE+btaX1GN*r3cF6$P8wpm}C(c^%8{5q15}q2rp49l>k#4L{7Fv zDX_`lMw$~yQaNx4y~)h-dk8|mj36`EId~X{VFAhc7z;s)HiFSyxfaI6yNz6~)lOyW ztzH|G&2(_>uKy&cfrTkh1e}r}Afk8@ztW>b2m&x`HIm^T79L8+=w&7!A`rpK^+YMr zXA{w^TxS4NL=HW~D%Y@lK;W(yyLk>g%)o$2gf_QAgCc9>e4wJE_4}d(ZS7HSG9v1(9PDB7x{r994N@y8zCNwB$R1gJ^;d|3R=k@0E zYo1*hxqsQhF?R=XiuYbgm$xK!yi_c|_~Ub%iBp$Ou%pS0B z`KXIqT2dQ5*D{@M*^@kU&HAFbEzh@Vnmaq@ztW-q{`vlD!RYn;852fDUBw66$*syg zPun=$Zig4LXJnGf`T$om4onlOd~A04s=+DgyDYEDwkGq{sn&Z37%11rL1D3}39*}t$`<$PkNt3WKiKv0 z{*8n%EDl$^peuuaJblFMd0zexHN}jl4m*@8V39YCpQ}*f~ z6zpj)(bhGbyb^;j#$^2cscHH+n3U`01Y<{7jaOpOn95)Oh-qT^$-dZD~An$Ba)8k5>MQPM#&6xnlpl zw^xPruT!ji{-8-oNv;!|h|GA|e0bmdbB^~RyAEf*Z>(9}r(eG%Tel9O)9FsGLrBex zZ{LoXxk%Ig?k39du3yKOXYm_;eK@$&`nS^uv%DM*3}02dIR)%&V$*k^26l9GG;DkP zSls!earNU9s?b@pX0eOqgrdcsFHZ&Y7Ib`;ye>U^?%ZoY0u8^ft&eX6HW&RWJ1eX2 zC&RlNTdf|?;FQA~H%6T{J=>%;1o!T(czMBxa(|AwaPcBWoI3>CD{qSD%Jq#Cv#PJ$ z-UKx7?_Gr$*ZasQcJbEk>@}L^#j$r@$TO)Rdr!@dQ_p)|Q z+X6R4=dN5?J%4fU@aX0c*Q*l4<{$IkTwNP8)ep13y}t3yu;%ygvn}O+glD%Jv%^MA zu6Xro){plQiGO8eW|_%?aA>HeXCZGa9PI$w3`$~^On(yW1FiG9v2OMy?h+x7SR^twep zMpj7FfXK+P3xB-1770+EF_xDXb}j;R=1Je?mlr3_nPDA1+1cmOv9!pc^sSI_PfkS4 zn>0*T$^84m^J+JDKNU6q7c6#q#-v$^rDvUIwoDKmn^cBGB5MFyjc?H3-Z`CgZQVG+ z4qfMuue%KN0Ru8t{64s0?bCtH7qX{^+}|xI6fQ5Tyr21fs<$;rQL`%QZK|(r-@>2; zG20NPp}l*n*~ey~U#~m)=TH@(8h7?lBI~Agb+)fQH0;^VmTv0{%#(U3(4u3rmY*kf z3qQU;Y#epNfaYp&rhJu5h*FhQK9t29t&=!q?N`UYdntJy`?B)`J(K+{GSsKr(g76%9QtJF(f|= zZ);8_pQ<>Ny=c**q5%=5Qs*~*C9Zbm0N?lKv>oSZ^_)Va<>j);C)N+1D5M8XC9N91 zXA3a>;5p*+ZquH$RYfh2i}(KEG(9}J{p`CZCp8Izg8Q2KC&dcV4)`_@w0pj5Z!msM zWJicM;v@0wz#q8>6YI};TJjert-rg8dNFR|{lXci&v<`ip1ha1yqrIL_b77m?6O=y zqgKrJRqJ27P7T#kM^5$gFC2n>4IhpgH7RmjUD}?kJ&&8k+#dN$Dpl1Vb5^a2-pf9sk*oGIUoGgmSTuppQ!4i@)afhk z?ZWhUee9658}*>z;~Mes0@Jh84Qrj#BWcd4562F7PfBc!>lYNc!#U)`rHD9c!R+!f z?SkOcYagz3kYi>YcyN8L_|Z_f{?M66*Pfp!uU^Onysx!3L==8*;w zKFk`@Ej+DVcAPE`+zVT{aBL>ELXcS4J=Q%-8ryHx#Khf&)w_}!rxq+^A4%=? zen=N3+}kwmTg$8IVHNYH^|-KO`UcRI^>-RZzv<)rdo^MC!ndm__WDHLf!vtGd!x3+ z+>i6ZdJG>YI@&WlDSLvT;Bp~)HfR<7@GZyg?Q3^bSM`hGs|IYsu(!P$o_wHXCxDp) zXDLatT*Z?Usy#g{FG>YHciwB%*Jax5_K4;%%$1;tQ^Mj8)$NhDt{;*6b>!8_pMyU!1Umd zK?6**90(wf3w=bV;V&Sk!Mz8fCd60nm0XS6bY7SlUz`a5+05LsB1J;v=ROI&;slD+ zei@KH1$0PUzaKfrFI>H`J*a+JMD`Y)INqRi6^7@ zwOtdIvlYhd%30kR%g24)ytTFd4s6kkm_rX!UcXw>0^mna&<6aEyAS4MQwxstoUn-0 zf8(!v)k?OgTli6k)No3>MeKQZ6Pfa;lR2kZe2uULR94IYo$fcdrpq5-AmuhHbsWT z4k%jw_NX{D_uHMeb(D)C+9>b+nI%8YeXV}q6ro7z+oOER{d)&l!E5fr(Q6;}?kdLF zx6G#WyA=_eONh(uvH$eno`ZWFzOgu(qK{mBrn80Gqy`+yX&Y#(`WJ}$?YeQZQN!niaGNp3w@ucIbZ|Vyx$C|oz>z2UX zw=8C~VtC?3;cor6rn~mo@HF$*Q@Cz@W4~y7OF|AWOivtDxmR>EY2w7FJ7K|b-cx%= zC=>T}_wQfWb9FlW%#kDf8B+$Wsjpk*UbBBqNYh4u>G>Z#KXHQF?Mr|PPI-#igq^TU z6hdxo5;$tFQ-lBi!T-NvQDPl6mot`ZUXU>FWmaX&d{p<$v8~hMB1X&V`s6GlDxH(| zD5j0+Xe4$1PFVvbg~i0YSyIelZiyLo>Bi+gz8kqRU4H1p=@R8cF*fylLwgdG2RbRJyXgDJbs7F-cK;Ufj3T%+_HV>*fYxq(sNhN zF)D*_RXadexAHc;1H1{r__=)9s^tWwv)`C8iUH9Bv(^-mdu9_yq2juC!^rydU!A#l zC3?lPnY;Ea4!%C9c**X{gQ?1OA=;CG3h4EDYg)C>UEi`!ZlC`A;$rswmk}L^=mc%v zV7Kty)wN@@x8?sc8?lxHZk<24yQOQ6_h)cryJ^6V;q80v6azoe6dI}MQ8JyUPKaV> z0|O4>e?43?ch=mdm2=HyR{JT8t+!#&L}hS)>-g$*L_*D_KR2gb@J0rmdGz;CvogCh zDr66Sbk3lbje~)hgV(KZzO&#@DAo=#pC(258J@FD1M$kGWfR;nsbM zFz$B(5P)H4nkKh}18h30RIoy`Q^-(JZvXiY^RwzZ{*iKI9My5RlTD>S~Xg zHFfb6gCa^tF=PiOa{8i?#!=j6$XuYM`Sc`a2Vjt-n9h@#{(?-+Cjvmwg}2 zG=iqya3RpA>13Nn!%v*qGb{AXy`P?@bDE(1bLG`d$x*JdV<$47?hZ`(rS;3N!lqYc zz3fAV=}9zQ(IDAt&SOVg@}_>r3o8#^J+i-h7XVZ1FFymRzY%i3q|LUx+}QhAY}4He zj^*RTiQ7tm*BI9$UzTS0lvQ0NXx{$!?4pv$p{g&>5_TR#{(FQw<5$+dew(pq^x2=S zCCgUwQ#Pk{%<8B%4Q352{B;65@UeK?0->XC?1<(MQXvoxI~S79y?whq2sQm{MDH(x zgv0X>(($C4OK-EnW2dz*J-i%TfO?Xn@T{Xoq)H!7ah*j0h99)rUU=~K+*E&ak28-l z64LJX8W*a0aZb7;2RCY3duz=-QAUE`a<8|v$CZ`IZ=*UQQYSyZS8_xTfKbrtbp$W| z)WX}2)j{5$z4wwA&D&FDXp7^-x;{s?eu(3AZ~gY{d(oL&IT2Y$dpf;%yMBF7mVV>9 zM=Czx0pXb>_{3Eiz8^gsR$4$WfAy|vN$YcD(#<&=9}SB3ai>km^V#B(#=jeT_Q^av zAJ*senxX`o+kYq9+Ouc&=ux0Sh@Uq(6_Zm!p1dQ-rqICBjrnnv>ti3hnfd`h2okQI zvL$JBL)Wx^ivTzc>06V1hrDD7X>{tCkbxX<_vBP;AZ;N3(0#N1&5f-*Am0ffbfg0J z1_55`Gb`SJYlB1EpBJ41Wx1x^JNvrzp9?_+-+@dFALCn~k6KfIEv|LnY0QbX$$j&W z@Mo9jCsmHEj64Xq?F`r7BS((*Tn+qV2|H#?oqzg2*Q@j0K>L5Mht8ctr%&qFzyIAG z3VdAep=0Lg)*^3y*MICavfOj_*Y~MT-MzRcq$OFTQHYMQZCkbbjk7MrS^W?4|g7rmFf+%i`%3 zcMpTpJ6(gSSM2+;?{UtfmR+_-vLBBo{!F6H+F5>S;a7+4?VU}0oG6o&NouUWmNx|{ zS17=`yKy(RfE%Gfs`1_l@Gn`C#@@SUo>%L-!5yrL&b6x#KnlBzvW@y()bAoTsOB@>Seb!_lCOPVbE!XlU4s!`)W5Pd_I9Q6-!w zc^mpU)!N;|YPr-<@~r5?nI6kltitTPb+pL(G~o^6+PI9jHMgXzs^U{FUAZ1{j~HID zW?CL-?i1p?a`nXFAy4Jcww==o%hj`9bh$H@Y~1eNGw(yg;|rhG6u};*Y+E6HFd=U1 zNXy^%*BrUqPj=5wpVsuGc-*_=PjlyLJfS(+K4yM-uTy=bh=QyK?c*!2-)%UFJl4L; zQn%0CKlkr}^FLPAOJMV1WzA2eofm(-e<3c>#b?YsA9Qk)x#IBDPjl4UX3q0;ein2V zslu7f={dV!CF3(_p|dVz4Ev@RUMV;iIlV_X24-v44@YH$Mf+}KB}1=djGYv9D|7Zq z-)e7kQnGYuciZW(i zoEHeD!eXaYT)!UD^73NjZ3qGp9kdN3%Pd;>^7GB@dkU)upT`^=osf2+PuYkkEay5( zyHN4K&oN$>9-CH+1k=kJTB z@;3|3MYpDBJQnYru|GPdoe^G#-fVijs6Kr6nDQmdcX5Jc*w)-_#e){S@GUDOoxXHT?l>|N z74@gIWZ)CnmucPM6E;?@+p3t6lRd{!cPM(BYvgj#nN`cr<`h)pOwCjMEA~TcDv+ZF zG`>Glu}8Nz_@9jF_MsPvH!7Y}aCHYHQvuP&(jNYqP!Ty|#Nw2p9@3YOQCR}qmbRyx zk*hBi7fp=`m(P!CI)IPu8{0SETQ5Nt+o&zMPs@NZf9!epm!j6f#fN*XepZ4@kQ@Q& zPd8_8TB#4c12R3CAJZ=Un@bw}y=o5~*KKI#qUCujzpiD}sz)V?Xx(o2K2zK9bp7CC zdw&<{S}!=pT+;AZW=rJRhHpQaofQ>@BH6q7fzZ|!26Tj zTILA}Hg-K5U5_KjH039L<4(%&RZ_6$`e2pyQ(0)oh^dRKo(cEhYL{*~Z9Q6q`uq1) zSgP;csuTT78=ict8l&F7Q1jtP@fZZJ)XSN)6+JmD6(Rh&<{-bv=O<_TOr3ISz*G7U zbJVTb7qfo9@948EYQmhwBc|UP{Oa%(ueX1BxwBRC28@h+6~6rhd&a!`6|7Ctu-_lQ zwlSLtYwOq6UmKKD^YrOZAW#}|!uxdI)UZlcN>1uy$p?QC6q0xT*O?z1yWU@#_O{T=(~s$v-#xa}&m1=*3tq|DUl6qe zpME>tzl;BZdFjD(S8LDwX$z7*R__am-QT%j#P6t*r(pxY`G=ac-O3L>3JaOIa=9;e z%V}|wUQ`?$%^bG8^5T??Uiq^#rcY=8)M*DS-;E0>M7mw zr?1MZI-G;FeyzAYro3rO%)syh&bi^aEB`(NSG@fYS|{823YFPF2wiT7ES2`1T_?O) zQ}OUA_i|B(Nt!8K`DtFS*o-@6UHERpHZ86%zG?_7v@=@YcRbKO>%3R@d`VkNHmk3< z?bn2;>vLYdk?mZRUA!-StfoG%HY<*Ftk1Dm4>LlR9Nh3<5OL+|$Mpj+m>pJUv;jO%&Qpnq(?&_@Rh`vAgh9{z)gzWh*(CM}J9#H$G=33%5 zj#SVdzTLhe<{I+i)0~R7yWgG#dt=(QPYkE53_U-2_1j_YIe(7-{`#(YxpxE-G9hIA zDwkE=vh?g654C>u9Lf0170E*toW4o1e~+Hc=v<&eT};o$T-{#NZ+cQ*w=PdhovDf6 z&04DYbmmJ{!A?(KQQ@wmB@6G~>d_Smj_tKS=b<)d(bT7*h08wNU3tE{F*gUiNu7S8 zY}v%9MEdm9xIj)#YHS!93OaIDYMI{yU-RxzXk^lI#gvE3>JoZ+%RfSiGqRU2 zdIi|^in>ihavtT>futb?xR2Ks#h>eZ`1gb;cNe&>zsz?m_T_{lNxjNNrl;e|6z4jO z;$`E%>F0G^sndUaczVdv@1NF9$jM%m-ngfvNd0%8x9X9zq|dBg+cw@;{BRB&%dMyq zN0REaI&g{MWl;Ii?J2~w5&G*fLywMA#fHB?Ui$eV=TSp?uVZ}=uR1#P_3K8>p~t7< zrcjW1Yb^p55^$oNwxB4#0J$zx_pI%q45EG1+!7W+u>GkiM^T({&Zte5?#qT+F zbzJD@!VOc;b!yQ)gR}dD#>o!0hxQrtFuX^@_;b0D8|5u^_vA6Zuk3urT}PdFyTY~J zT=lj2>rdxxXGh!DNM3lvtqt$AyR$d1-mlJf`eZ+=*py@m~5vU6J; zK&#f9D%WotoH}Jz)lY_NO23Gc>(O1~_g@y%cV{9VpH=#)o7LC9?-53MWi17kT|q#>0ZIKzb(^-!KpvQQeXKW+whg2goE4Hof=(tVqW{h!8^LIc^X%_ zw^!?urSmGX>qk9~>U@45sI1ghx$M(pP1@i;35$EOdQ~*GwZ^KMLo-R?I|#|@cRrBu z#-M&fz9seR*Z=j;U*opj?}Y8E<)78s{uzPl-XohegYJY~kGi!oEjwiw@hA(oonCI7 zmDNb9>%hXidDb{ufdiN{~ zt$5oWU+k`)N8fpVRuH2b>uUBK`t~!!>o}aV_Sdj?jFF3R2Q9njRZpNi6lao#mF~;f zfXR%{tCy6`naqrxvhd!cSxa1d_oY2UtY9{GP8zVNr8BGA(fp1l`vU6U@`xjz(7x#y z3+Wwy>qmMJi&7KbQoZE$d~4gsv4c`1L~-iyJn^Yt_ew_vuOr=lv55Ec2b3i!1hQ!( z^U{au6D!vf;8&M`_9Ojj4y zc<>f)n77Z?g8glZj!W>S=X=Y8ZbxqJ-E@EN$T3w_S;2w=x^GhYNkXag>77r?A#ZwK zdh>D-xG+U-Z0Tx9DR_kVa{}i7K5{8$Yix;tx$T1SDrZj=B$JY-1h?g%BPpwM)!L$E3HWW!VNP$ zNH3M1Xw;nRez$>guo_xKnz$iRH1J;8%;=Qf$C1bD4oPjZ%08{yvPIi1zZXN=_j`eO zIk)MqBgptUWQB{S3VnO2=DiT4WUP47Vp{~Y~w*x1G{^}gok zr@Kw>I@@n^-iyY}+5&LwgPMV38V}x#Y+k#rZ2RPpe*KO=Z=G3Cx%aYn!~3}0ub{oW znsE7zUCq|7eX@67A47PM4P+h}<+s~bP+Rv!rcx_Tr@c?#0-4))(xmpryXPXeAk1s5 zo?l_Zw~q0?yB(8VxcSzc#^b$Ti;u+pEwc^zbH1cv#kVPU%4jWs2~IAk)*PF8E~tI8 zX~yjgT=mqRt04tZQA7H!7NrzxZ{Y{oCN0|O9=<7>waGI@5(GrNnb~K??Wn1`Ei^q} zemc*;V%A1qDn*i7iCMH|vU$L*ywsth6_sP-6>Ucdwu!4E9VHRB8b3^(gOZl~IaR^# z#=7K7O?u|OvP9P|TbuGB@yp$YwKJ|x0`fnQpxC!U>EN#Cpt?sc@3 z3I)q5UK6FS=6}x2H`ghTKkS-p!2u03@%ge1+Yfx9=YD#AO za$%SIkKiB6>>lTGyPkDmMYGpjJrrY{?hmacJ-GK^f zz8E679*ue3y(_QyXkp5-nrGjw8J$Dd`^R78Y&rIDYT?IkH<7P)0f)LVFfCgcHJY|_ zV&(cJod?ZjnVK1KL;1g3u0EM$O6)(avn}tvwdi`*rrFUC>UqkC1tI@@eiAuivUA4q z^o##+WBTUDZJU|^3pt6LO)7W8=g9J1v>~uR!d_YUIW;@a6wM)z5N{cm(XswO?XJ~7 z&zPP?K%w&U!_Oh}k-f64l5NzZ}9KWl^xIIV{M zy!P}fs&D?Fr?Pu%7hIl~Q!1GDW&07@hi&blcp_0Q&Q5V2mOj~&95qpR88}m4Q6S(g zh!vbZB%TlopjsxIQ&;@h`(t$5maTir!m8)SJnGxGf7P;8Q9!nM&Gkow^aIJks0|r! zuSX36PEpe&>OvqeY7dEa^S=dVRt(p{Roq_*|-6dW|~+_#}M$IJ0~*Q?pphuK4$@2{fe?YvO= zZEi~40VWuBoP(bdvOjx&pU_a;Zfw?on3zM^C0%?~-+UP2;z3KFRWGdBmN}?`O|BV3 zNY7yJ*8JRjzVvrPvx4>XFkQ&J@IX?>_k_ ze0I%>VQW-zNyz$o4>(A~V zuE+`Uh(LOKygE5?mgQS zkI?^fd{9bikJigC25+Q2*<;SiOh^-d*UUbMJ2vUO>e*@2n4-?wl&(D6PF2>mJ-unI zhbTY(FDdnF`3+lNjy;ODD8yw5eOmo5L-XGw*kF?x$^D zG1hUYzbjC5v|>msfpdc3oXv{hHDflheAz zh1Nc4I+b~M{qq+us{c;=-tvkB6un&TNw~zwn?qxri#QL2Bx%&^^B{z7&9kdc9^&5~ z-UZZ^RUi1!^J>lNk<}^l?e)7iR+T&bp55oLaPQIqO2eP8dytFadG7q zup*F78;-W)pa1^n120fIwH;xK$jdhrY1c+2uxE(5CHe;u4`br{-@UYFKcO&tZc?Os z$$(Fhg9gR5y*;+1^8)`cx1k-VKd8C4(fss;s@B@}hVrJfYisj}DelX_S=HBH-wd`c zKnJR)E`e&uy?gi8P@nC4J31m&$DyTf-yh9sj z8{=i}oVF6c)uHL>=|6z#uFLY9Q#{S{gvjnIinR9+tp)yn^_f+3KHNLFdf^?Q1T1TR z^~Lo#EViP0XQ0Gvb?ns3H{STaeO%tM<>9fk93UO6_|f|M(wNlE3zJ{& z1Jv%|H)PkpK0TyI@379#KZaegG!+1jrVnE~BC356P)Rd>*Lit$NViL`GJZ2s?>%@B z#bh#|kZhsu5M5SM%fljz1N%dQVg}OmQU_ z)jDAOFr+#6q*eO?D6$$~=Qsn@qKzF@VtF;KUu>#);U;19&i0QFCd$5nY_CR2nUgjj zK73esF%7WS2g6T*t|iX+w6J(BP?e)-dvndU`TybUt)t?I(!JdTcXyZI?$$`q;1CEd z!QHJPxI0O34-njgySqCH5E^%P|B5;1+?iSTtXbc^|29xmRoAYn{r;Z!*;p_j*3dV` z-of&ii%n7ZFSYMQ8wkt>%sW$8xeB_~K#7}cYm|D4z>w(u0(vWhA3?36q49ELb~!-q z_xWtS&&g5Mzer261d;>$^D&bId`qGuQU}>&{ zVLCS&vZt2%@qX~L!{7=K3J%X8wsM5o}B*t41-FUTh^C*#o@B8@KzAchj36s zkHuFhWomj20sq3(y8w7uf}#R0BbNK?qx2#Y6nC!vo)r|rppRHA9LpOlM z$Jw3mcL&24 zQOZf1b$(kBe(-_;W*l+W=VWaf{&{jJe>pXJrrxDaR{)XYAD(z1i-ZCI4*d9YeroN4 z%h!BSWMxy|tL#nC5WuS9NR5zE-m=y~h>F?TZ^hAVD%%->C%dwIYJ4nHryU)?P^!cY zrhf`id^BLv8V`+35+JHAKRG4z)%{&O8rvA-`oA%3ylz)dA~lGNzO(10 zQJx}MelWr5b?#D;Gx{DK2g1?GXTRJzU#@%gqdu)N7bb3-CrNqoEv)b3nM^eggECCw zzimSp47P@yU`hVxhp~*E(9cM?jPI-mT*f_ZQ5I}CihT?7<`yjLfOLSdaun3U*f~R1 zqEU`SHa`G;16Cndu7L;`fM(+c_LkeeXp&^msr>=6GT9dMb2MR9|McdWzV-KCKth>2 z6&G(h1_wVl4bv$fB{28^$MRE|&oh~fUaWKgs5kjb^I%Fw-+Zv4dtwWKQNFK>_t+1B zs`cV``f5?nb@rnT5u0{U*pqV+2qXz{RQ^^hA-${h`dOEkb)5uJjf>^PC)E(E_R^BF zIw~s6p#jh4<&8>(;r^J*JM8L#{E9v@ZLOyHpEE_kX&PR%wLO;pj}v8_F-lrXlA9{e1e5dvvzlCVebp}@L%_MSlY%Zf#<{z95yPBT zdeFoiMgBsss-8W-t$msP>ne`>ogzX-Bb_UV%RyHx*Gu zCG^@hVQ{j+`_pse06Sk7EuBqi1FmPTfTm&&=X8Ru-bI9dX*hQ7QN*AOz@mYWy|@_n z{~aBXGk6;~P&{VG5U)P8!hWUyz&}zCN-;>s-t+XhIB585*YZtKlLVtp&NKC z(wipwB)0?{uh>f5Z0h4XuxkNBO&OIoQdS|^iPKRI-*MAj_s|qxA8DCN8HR>} z&vEp-Kx6w0(|J@US|ap2=k<+Tb&%=;Id4lj0Wx(CHw@P|0z~%SnEn?YAb`+8+LFhS zY+83`=bR=(rl#T~iZi_L-n!G(+UAg+u?{(taw@f*%t%#}M9dnU(oW9)UJNstUYD6cx+$+m(BxE%1r z8u~>DCPw8%&J-R&|59syjpuI+b6oPiTWSeBBpPPw0Jjk}#ivpE4al0~ZEU2!eNCnu zF6->3HKe=@a*m%*_=0MMwd#_AbS&0GHrQ%nd63_(o8;A^vMY>zZc0xse!?M5vS^of zdp}*=t;e7Q_+lQyFnj6&y@wc<3mf3a(U$X+` zPk+krc*d1L5xrGbvBWWVXpi+hvNk!1gAFS2I=fZ833Jzp~}; zSUj9$e}RLfKIldtf80fQLHidwb^eeO|H<(6{O-r#vwE3yD0i!E{;Wag{^6=HCW?>iSheJ z4#HTzu=|e7+3N5@?^OI1zlt>Du>S0kl30{%EO6jP5WM!({KFx6K0EPbG6K0ss~$&= zU(mGZu(iqR26K0%7}v|qmQb@|37yPjh3$*e)rWp1mQO4@%ZZ{rD?P{^6{+cKoOFo+ z(w$uY4ab;-%-2Vg|5w?>jwz{sIG*UV75({5UmyXyJ!>QmqyL>+XcT8^`gVVtjIwIm z$0lxFe8S?{8=Ly|`=bZ`dXq7WdD$Q(iOK3u)Cwf?@WP?WGIhXSdx8!1o*oP$w-nGo ziD}o}WoJQ?<@z*pW#A`Jn9;~v~D(^S8|KNx3`3F(b-X_;Rp%@f8Z}@(W98wfgry3A`+h^c&lc> z=wylu3bX-t6U|g8@m`nYan+OgaSb0x=0nEI(;)>HqKgkR#u%W);pEVf8GJ|2dqCI1 zv>iRLoR}`T0zRqdahWRf9Rn*q4ph6OG?@zjg%A57^RTVO`-KF+a5e^u<+bi+lvF2P z5rd)8DSGuzUNn%QhaIUVYoJrtK8tt=)*9orb6(0y(mJXHfRd$vmE2+8p-P z=4yT zvyw-4jF1cY-AS(iUz5Y-;UpCDylvOR5A<7;3r+>YRx}acw^05i9ozP7hIt#EL*46y zJXOTB-VJj87MCwAI?RRnQU;6OQz#?mF(Gcx-YNB#nf_X*Gb2!-1^X3zd!h~D!_#E6 zXA~h~rrKj64cGf`(9IDK36~S`J4KT};e8*Ub>9X!)o6ac4({6h+b)2lX%i%X4Yx5; zVu+xUz@`ROx}z8kjowwT>#@^?eM!V2(ODrAhNo5UEA$8jb+)_iTYD%>v{U)F8vqhG zJS7dwR+{lW$VIwMBJ5yx|Q+F5bPK=yJsNp@q|QsccqOZ7I>lHKG?wr21HAsOf@ z2{J?h7SA@swO{xVanZ*nY=Vc9LBv0clbJ#qs?m9{G|=~~(Ar<@iw|BE3W2JBIU?zd z^;)~PTfTKkr=N=G+l^osYqXu#0XyO@*um- zcAQDkO7blAjfGa8x#!s^E3#&JFqV9&=uZ1EJeMmat;Ilkb(q+3c0Z>3wj*l60XZu2 zO=^cVSH_DIt`~iUhA{-uxh=TWbM&;c4>d9Esym(uJ~&?--(zY2L^2hT@>##}Yi89b zzySogJn-hqwh^5T-vMzs6v%sA)2BaDaGT?$*2Dtff~u^3D=cbhBb|CXwxGChsb#b} zlCFd)VlNcXT8*y%J89=GoKT@LU8yUFr<|=?1G#|I4t^dTHDl-I#_2d6j`F=tPW*i8 zvQqDpExfsQ*VbLGf|a9Mfm$`* zvaqn`Q5i;d5Ox;M$^78dZ}pYY(g2v22yfvwpLkg16{5tmjrmpJTJme2Y0m4r3sI9T zs$cqVKmY)j+=SGuQ9yN!c(_83b#^~mxRT@a-7%MbJzqf*fq;+sHC9LRkb4{V?VAw^ z|1Glo>11S1u^*73uQvl3`lNpGKQi>_^{jEFFDKth9m`V)mWqMslxn%sWUu*X4{l;V z+oR`Y<;&qxt>os&?I<7iPG5kGn>rH@B!@G-rhk*Y)Yh71vd-Hq(B{EgYxx!Eg= zwCJ;I`U_%|v3nOoz5dsNO<1MGo^CSGcEK+YK^i-98EvuJT-QjIV{l>*2G5KL$u9mE z7;L!YyMcLoo4YuWp@s>b7+N{#?F_JPu|fs&m-NLB&Fx;5?*G*(XYw%g$3ySB-#BIx zgw0B1(lp+k%#kG<`#uG6?j}&S?!?9>j!J5iMsA3DyZf&}x{KCgDzO`3qPA89yqsrF&>bf8^``C_wkYM%*H+M=8GM-X>`Uxh0`&h4DMlc6i(hPtG;XU0(`I82%vJlVVRpU2@BZkdFEl`DSHW_L*l!Bz?*+q~x9@E1J+s#&)L zVHbq)(>hUMiCfiN7WN?ALSgQT)V7j|bkRqDtC@lb z2rG0GP!k&%P378nlb~_>ZX+cBj>-K4fG8TTQ-)>5%NdCH=H?~P@Bc{BZbLEu@^FjH z6q)vTJ>Ycsa1mWq_EE0ZnE5;f*@MOi2>}HwyL9{~EhxL?3(}&KG^d5mOy(xL@5czc zzB@h?GVEnpnj{)QK{$8byO4v;19JN3Y=&aM4VYAzT$y73bzXZ#Hc`TaBP$pip%2aX ze}!kyESC0(z_-7&w6)h(T0GX3|A9vLaFpb%Z7f4z&uV?hFnq>I0QclGzfB_$t#`b(-mg z>P`J2rmr**)yU1g3$nPZ2VmkwE{9+DeyDq1+r0vBXB{Ja0`z!xnMf{&TmAkH%iXa` z-ZR9<{f)AYAe0H{wKntC{1bkZzwz)eL7cTP!9jKPFuubI?uKA=gd=MlEn1+dUhoLw zsDeur;+JCCjEi{DY}n!CsnK0lIygK=%P3BoNLp=@@e`vmX}4=v>*0!Gn_oB}x%_VG zTv+d{FEE`Wq6AV%o7kiV@pKXAu;+-kuHWh3-rgU5S=8N;is;sW5(H5R)X6S%<{hh+ z&+exr9S|ID?ar+NKwDr9i4hUVDj{n$K*ukiV3EY;ctAahO>uee(ZUBY6xu3WRDWW|@3ZGtDon|Ew6k+IS- z8c&YiJLtyepEc;p-^7(5kUX8ABK8umer~-&4_$4+(9%u=f)NJh^Pk@Cf*0!_bQDHq z9Bb~vi!3p0fvjfz@bU-x8Ug~EgxF_#+w=51e>Vf1Ut>|-?n%bAjKT~xT|KuWKzi|2 z)Xz61HUC(XkLBv)4JfM?BviNHTm&|Ku{Tyil1V=-t;Gs3sE}B1W>i``5j__27Rt@m zf=-<3_2eZn-ZoZd9o*!)ArYa$Q)Z0EjrWo^hOD{z1DI08Ij7>&vy5Y~yc%SUt8p_3 zn>iu+wF|7qQkp^AceQ z7<8)b-k!{QjTjd@6LCz=K*CXFHiCDS32t&f?p-kSd(uu!@hjB;ddEIF`DwK1+~{XT zHnC<5_OF?{{}GMN4mwB-Ix9;@?Ks9q<`qy5kvMS^@($8J=#VKkmXZ|SE`KDvV?O`9 z3^8bYT+jyyJjpUki}lttx2OVy@XYqhzz2Vp?5Icq zQMKn6GGho=AINZA2nd|2FgGjfag4VjVkzx!d_>m4ujK@|>GZOK^=@HG+0^19s|egDl7O$tgk!RLEPgyEf08WpyWLE6%;Dz};K4(`In}Q5 z12RSgz z@n@E?3r^Y}&|ZTnz-_Q@49eIo{MqbwV7xzDY+Y3B4)o6$a+v2FmiA!g=))^R?hIwt z%hh)TsViKlz>Nx>jg~CSpmzPTCF757b&Z|`9&b(cLL;J7ny9iMYd_!H?@A@dRD82W zLPdsu!Nl9Sd3ndoL~Agyg02RIPDe9uyFxxj?9GrQ#NIes&aJ~+LAoR8tdDckZUhP! z;+?-OF(HDoro^g z;QQT1Fq{zmf{r5L9Qwj@dz=I9xXjD3ofQ0zxbkuBK+1TOrUSd}usCK04H)4|v!rWR zqj5Tf>P@4@!S&O?t=SccmLLxvvAvtsj5v{qn9|nTTbqzuk&<@)IK_2`y1_!DAd$|<)F0=j?1Z^E|SlhBrvB$*po8XZF zNxoPPGW+Cji9lF{x=#mB#wv4rx05Z^$ydivO%T`7(Gh-QyHt+~4Tlmw!pO{w(ie%_ z1LXRB;z~Z@XY}cgP7A_j-#-J06i)aT!BThjV>8g@Qiw4wpG=T~^OksNe_h|U0ZG%k z#*bknhhzOwOg6KD_s#E7-nfh)(G-twtZ9@zW)=w(`%u`(P?OO@6Dhb z_0mCeRw+^Z*4FJ)554i=mV?u z=q5nlV7Hksll6#}L6w@e!~;5=5;fU4lOd`ST%}*s<^Put$>NA2e@-#~BZx9EWd%;L zxyH??84r$Zo;Cp4s~fZp>H)hx_6p)*n&JJUqnap97x;*3nE6sJfEiZVauD7d0WDC! zOPuI;icpQt$3VK8grtcnT-aYg6pnskwEdG3eA%hJYiXVZ-_x(q^;LDXyK@pFtI{x6 zcI>4-g;}qbA7C2;0($5uXa$M3kaqejdhk{9G@csWZ_PFsNko64!z(=}S}t)Ht%o=K z&33>2ciMMV$(D-_t?zlIqjzQE01kyXEGMt<9kMhcnf@NyFS68pv4Wt1i2-6aCS2(O zdmj$ZZK};NiwLG2WuxK600NLRmb799E_~KX7+d$Bd9(%xgT81)i7MNpO3S5cnOw;4 zW+R$s4_Cim5JGlW<}{zVw*eFEK%>SAoMjyA@DML87a=jMaa(Z~3bAi?EuUNB5&XfP<@@f1kt7 zIGr!P&1m1IDkG*j`ctp!>bzqSfZ)Bu#+>ECmmN5dHgoDr8j{cHuy^koWU(H70(+X^ z`gm%fK=2oyu2Mw&?7JBZSgTK}lrKsi=L4Cr2fWgjs2xqJ)->PguDzy;@)&s31yJhr z-Cew9r*-~?h6~%bxyC#SsWtBmB3j!(lU3FnBqA=vo-E8jTLdpH+)8D+%9Ia)R`VgTmQF6OY1`A*WBDEB?zt_>SbfJ( z{Qz-mXmqo^=@PvCS%*kjE_|fZ$+i-my!t9{1PMM({4%WuQbk>#KQ9_OpncC&R{{LM zFd6X+ZjIOMSEut|vEWKc0|$dV)w=aY?*&p0jwvV*YFaJU@uzC6{K@>CH;aq7I0O4h zED6XkzGet@^vk4%+wGiI7#O zWdJrAP)wBc(Mk3zr_(J{)A;bYB_R9*56f1sR;+Z`U&3#%^|vrKPn!kncjrZnsRab_~Gt zoKmNw*&Jw^Y?)pChUneZTC$Hm8=UtZHUYQ?9zT4NmD6?T6ky`^i}13W?6;ss4eQ?u zKcM0!m&RI4NlABa%*ivSabZf4$U_QA!}9y$&pbY`IYWxcm*GO*d2$2MUZP=* z>)k%9wOt~_E*J}wYQLouDjH^B$%^jKYfk8C^}LXDL!fy5D*trm;e=F7iQb&}Q|mv( z8cJ+g8%81q$~JK$mUgC2ynSvr-gc?bqa~~~5_AFb@j^#IFJg4HO{Ihqi{%5$Ph9yr z*6?v3_Zdv!Ag9ln#&8#3RpU9F#jnp}fYf^HX@nPjP1-RhC&w7w{`LR$clPAAoq5Af zEF9B+Dj+%6^$}zPwY)>jI-LHPsy6t;+pKhas8>z#G0nRC{cGK4_Qe zHlU%Ci}V&Krn`3hN>!0~?RirGkNtX~_PyVud-b1WoH7Dm^#>j>nx4B%A7=>HbFc09 z9%xN;S1U-0q8w9Hu@$WE-4=d^fD0U8nwq-IyQF$i587F}(wyq>LEYqhc348z|3uHp z2)7jXxBFc6%C#=?mw}Z!q+!*!rz;5F38-Xp|7BoPRtQiJve-HqFZx)IfP_C-cp>N2 z>Vv*BP{~njF-;t@*NX5f@Z(!l#;?|=8O?V{S#Q5ts+0%AMdgud8@6ANplLKso{!}I zQKfiQa>OzKzXlT`ZFIeTu)9zJ$2?kN&k$5_g^m=_87t~w)b&-cik)lza>MjlmL9N7 z1p%nWkI!9!>>9t%#Fk)9nkKS@k^TJqT=%A>YPHtY`wYYq~pcl@b+e{2Ofoh{Y{2UJe#3NtIvZ* zXLwCG3k!=BgQs$ZUK3<{JM=q^eB=Zf2<$JH$e07r%lzK_d-@2o+G7A$pF(}M z4EtlIdJ)FI5R3#o*6O)5U!ETYXaQjzP=x3KYGeQ_*L8cg;j}r3>2v}V zwx(J=T{xVow5p98owp*Z29a>+DVU3O>Z}oM$^f>t`yU`=K3y#s_U+`$ zC1PcJ94`wPH0>5R2`|2y;Oc|+7OSbHV@VdCuivIl5zon(6it$ydS8w~9U%R`z zTe9_C9fXp9*9((27`+@?hYFWbJ)Ewtw3I0$BSR7+y;BYAt+>t3RG!Q_^_HN0R2Qe? zi`hRgNbK~WGY9dgGkTy)_JNBDLaD%Ozf54UHaQK{tj8=MYd$X9qnKa+G&qpMp_4I- z$ur5zdZCjct?dy9n(!^J5fj9gn31aVt6sFbN(+^gwy+(GTnCq%+1HjIA;9ZiM4L05 zXa+$Y{)~=cHf$$}r&ErF4+Ok^fv;p_$K#=QUzA@Y*ZuuH5>voi3*U(pxhCfqRDUoS zjG!5!t6M}170ZgXg3rWM+F1E~yMfMZ(8`a-iiCk1^#K=D>z~jO4~?EJF%ow5Sq=>Z z%tr$A^75)OEWe%Ip=ijTzB~Ue{QpK^rgODqU0s>=3~nJ)E)JVqeA4mOA*wmIer)MP z_c5d5s7RA;Im8n3fg0#5Y|XrYFD_h{?h_zdn=RAEX40&{al+8yjc%9}&k^c{%`Bi3Iho#6wPXU$Z=-S zoh?_v$VWbSK0I)ZO6udI<;@uPXOn5c0Yov61i)2@%Swp7A%Y^NS^N!A;O9d)Wk^u-`l40BnDM<8#@OA;5|cV z1{7A2V)g6RXD;2*NoX>SDRjvO>J@t0{)bBr9a5|9FPVX*I;?Olgd0tO{4M-FgRGl+ zl;cmPB+?rMxeG@x>(!C}07(%NeN-qxL8-rk3I1w@_XrPX;>Ue?#wmnyUyvmlzbSvQ)R;jP{_J|-sRGJC(D zrMB5SOkWiK|AIAxdV*7}F@&k_EE>M>z>$5T{J)eA^*Yw)7%34Hal8Nj=qdPpl&{Xh zrq9|e9*jYUYrf!8{$E5W!RR)KlWPLDw3W7MD47^wSfbFWEHy- zZ1@>KPZyw>^LL)*>J*-^jp}RZ4(&h_tYR8B<{7}77W&Tz(fQ1M_mG91trT-~WPf#( zVrp%x_;#;(UWuxDxB&RsN_`^F%nv9)fQs2=G+va%aP$f!>T`L9slNdhKkGhU!)Q^k zdWB4n(uRb7LK*kh>?@cu$o>J|h-A|Z&aDA6D@79x`p4XaSKLvX+A~BQ!Ufxy2&Y-) zvP%9>>h%L`mH8M^^>q}oj+tBw0FhcPDEy_w#Ym5KnyDB|=ac7|es%H)O2#*QfNczq zPxo?~Ao+p!6k1|Ihy_{K;SU^C^z1{ke$yp_bDxhPZO=HZLCY(G<#YU2;+1)~u5F zdTRi8Q)Kh3BV#&!e)_@@tOQ|i?=izB`Mr)<2zrngh*6KDk#m~^NH>vb^mk6ZuX&!31)O!1=R7OW=?+YeyJ`2-Z`mofeyxST8D41;@*N+^!GB}LmsgC?x~2CLn0!c z5dQP1k^~0z?TsOYMJx#*?Laii%V6i=4Ni@~JWnC)nFisPu_%1bWaC5H$d`azGo+W5f zj0W-_7!zt}0;28U_v0Dj=Hu7VF;DnY9M$2`vB0{FDBV=K7+81_kVyoXFi8pudX$_s zRmUn08K*DE39eOQsZ>eq+_wo~3aO=Ux;AFF-M2;5MHCBhz|O5+e;Pzk5###xH4XV& z?s`^)5TuS+j2uh?0_Qz}g;W8R%j`=O0U<8*st4uiHF{{WAqHp_u4{-xlrgzhI&r!l zINZtN(5dZVpx)zhU>f%;9})DwK8Gy*xfn|DaY>PH_)bpO72hlyJmfXUlLGdwaI6sK zkFA;pUpZdE>4NN5;t#lBvUY^dJ0UWlPb%b`1}Rt1Nr-^ZDlP;QlQ3q0&1dcWk%jq! zAkV6<`!=^R(bf?4)!|2J^itVY`X-9erst&MNB9SX@DO8)BBsa{(!+{Ho1H%?MNun} zD{b?CY;N}dwDHnLl7>f8QBLo_v<~=5i-{S*nWqS>UfdRO-DG_k|8nB9bC4&~Ln{kv zf6iHaST(tY56x5m26C(#skoZF1^LE|G-OjHo8dKT{E|SE*A~ha=Xs@yvvYCCku%ADPI~+P#OZO}XR~f7kk^fL`beEH zNozovcC>1pYu9B%nxwh+t|&Rd^DW{E5#CHHkCij!cQAKEyS<(e+8OhTn;Lgz#i5=U zp9a1SuFUv~6kZ9$B;Z;!NGz@8$rjSGJj-)u#Sin^T=)eTiexn}z4~U^?-9!tCSg08=4Geu?w!AX2YYc>7U2`2 zmo6vUKcQc&*zAr7Ydi?@$byW}Cn#!EX}8i!c=q51#NBUQ?hz!VWK1q=X%>Iou#YO% ztfM!eS)jZ9otY61viCnQqg1$U{Bu4sV8@(=tgc!58y76Lkd>+&2=T3+B zTnD>h!P3*%C9G2G`1X=a1h-A-DRc_D1(CDKc>}E=dN*od;&HP5#1eG#C(a|s=r&(p z)b+9a?Xuug=yRSqWSYl8fn4~_Nl*7wza7l;O5>Y4#^eyAzvqM2#?f8EOL=|`^Xwzm zxsr{!HWuoYDoBdH6%hg>ypWX#_CtLxcvvRh?gM`@TfNPQA74Ez7c6jCUs{wf6z&X# zkbYh5u3!Qhn$84RKg!c_4%UKXqYZOV0*svojF^%i0|MGq#el^&JcAl z$;?3U0NcvIRSVm@vm(b9ZduS-q2k9zXGc;LRFtoj$^vDXqGU&DPgH0JlMc0DLiii& zIBzrJ&(D(RuGYWbI0T6UAVP$Ua`whf{S$`s%}BF1`!coJ24uNwkLF)d=tX+dDg}j5mVe>Je zwrbex6`fV61tCvEe zm&Zl@>Wc7C4~%EN4*>)-DO_AOb^A-567DD&ABK#wA=dUn`9^x;&L^u`*fHW+>CdM^ zAfM-tU!l$RyXW}*wrJ}sQ&>j{t+^H)RFR%k`#e`}dv9LC);bX*zVJDy)|;wE6E5nHruIsxRT;HeuV?H<%|j-K zF1o#Krc8D2Wt^U#Kr7~kw`7wP9`XsvK{Xy*2@j+J))z{ttTXannG_}j4(Us|r> zpbDahL5?nbp6z zs9V~Y$yr_t$6?R?`O-~nt{tONmvB61o!NYj(RD&K`NKFubp`ZM7pCa*?0j(<1=v&~Ig^{m~T*MSLTnmlmXv}4RyoUSINaR!rhG0-!I zgfvF|&8l@$M6CV6p2fnohXObbZE;538C!^06QNS^U)#W>IZ~$~1~q2nf-P}9If_v# zh1LRJ5n38-7(c|g3oeCt<>+s92=ZHp%5Pn}+Q^TLE9r^s8vCpOs zrvP`1FD-B`-MuGz3VQM~S*JU!uQt$EUw3UX;v!JRfozGHWaFUzDadZ5aLq?6c(VIA z>vwE)XlVDEk|EAZ<~&vyc+t^k0?|P$jWExPaHUvD)M+oklHf$AjUEM+^TYaGzgm)j zi@Eph>04lliSE<2o(?JsMJ(mpyc(*Eimw$xw2)a(HbB{f%4feiP5{*%!m{naKoJ}0VjVACFUOj7i z=+K2GVmA6jv3dav(BTHpJ`vtd5_YQoQmsq5#P~7` z_6QhSi(rGi0=D%s@$3=K1;_@fGc{l?Kars~WC~oa>Q^sGj5+VMkfZwu4zMnVsnSBv zmTPG>)r8D~zx%dsk7q^!)!KD{tfW#G`rP@ZTCq|bdK%`;`vm#@>crE)L@;*pbMm72 z4!gv0wZy_>7ABRUs9z2$p~Z9ivzn_4*DrIEOht@{mvpf+2c!;@gvf1ONmCp$(6vt(4UMyI9kVm0@w} zKZ@c9irfJzuBR=}Fo`o(@Zyz16HeRv)atIoVbfA}8)f=f6Ak1(^78Vpb!ZZxCtUiy z*zxhPIJ8&$kh;CYg&o42Z*U-(pil1PyXp4%L8nSa#~IEn$uN#0n{e`z)6kNp`tM}6 zEc|&q!*gmJK6%ZEfr$xpU>$`4U=5BlphLOU_vuvw2Q1(7jghUYDEv}D5Q{tKj{)l&v%;(r=OBwa7z!J^(FKyz2;B0Y5msY`^N2Nt$IO;+%{ zybMPjzKe^?S=jb>K$`)qoblc;_S?5_la?PCt8XM~e*MDwNy9^yxXK|Q28G~_e?~uk z;e#8ji*B&?cV>Y;V}dBemZzZ-&+n^j_)T_O*9u*wQT75+AJQL+xUmMN!>b7J$Me~l z0WRA`_ME3)-s;-1fs6esT`k?Tje(aFxskf*Z^VzRI882Eg~R>dXJNFnI&;;N^t|IH z?=r`hQTj+e(&>x__b&_7(Crp!jK;OI-TzvD2x+%?E_PD*6)wXOa2js;UIaZ0w(~?0 z;e4ANpUvC)_}wt^Gb7|eDfeAxAzRSbkzpKII~LeI$EeK{Tv?DTb$*O$`7PJA=c!}@ zh2E`2jN`i3%H>;Xz39Ix1YJgU31PZ2`7YOAvg3kdkv(t7s0)~T13wvlM@7aTWa125 z;(Zcy;I8_ zMgWi6ii3l^%lraUb&8@oBvdM*Z6;_ngqq?V3Xo|VWsboJlqq}@YGJUoW0tICq{(Gi z&&l3`bOjB5rGy5S-AMahTsS1~CuIQJZ>>)EGEjG5Rg!fKfOEc%{DwVBf1%nhB$yI# zJS;1kyU){v|2C3WGHWxZo1nmsG7+e1;Ic99CnbU*aVRS*-rJ+%xsz03+@3&*y%Vvn zCe>~1y!{~D+jEvOQR8-kd8o(3CD2niT+N8B{HXm+@-IvXB|AS#SI!#vMg$9(9wWqs zi%Y6UQ{da@T>K6|tbXG7WEO-XN|k2>M_|S+W}X+#K9qr}U1J)UDr>Fj$Rn z@t*3Wa6C9WLYqVriJw@l%W>8&ow#0to3u5)Ejgbr<6aU8!cIIIAnEBJX!JlSqrW#+ z=r-XrK4dn9y)C;lMud-&w_rA4at{B%Xiu7sY!_Z&E#6yW-vy(3+_gTf$2;#79yWI{ zgI5l>qg?Y%d)lQRU7Gh|g3>v3r-{{EQ|-WO?FBAN;sGHhtgjlle7ZwP;e&bm9?7@S zITZbKo<{GOXmm=xC7~z$iJ;Stw}5PhnP%oB1@XKGVbdyf0$EX&=LP;JeU_-HPKq>I zfPbu6JiDyGHNKkl)rw@dGwtBFtTLr?NHuiYf_SMCSea@fYN9(}r1m5zLH8qlhj^Az zSwsZ7IKh8gTe3TqY@9D=X=Ij)Wl&^ zWi>R!b=L*86ftLu4p9SBSltfjp#CvD?V$KSuUJYQLelEC#7f#;dnBk#)O3O7&*4SOqt|{l>mIo1mt-wRI zv{^vOI|oRcs3H@9tnYGv4jBOIl$@_dQyJ8Yz7FOKxb9*sFE3A48A*H_Y%uD9W8a^x zu~2@^7bS~;_IrA)Ct&#()(W*kCDJmzrjNFoKkcWu&rb0(+nk@%xHOn!?pO}Fdc4XP z#qD|<#mo*3MbUYfl4ZYx!DM5FT=yWJp;dw`uvE=4urUrVQ7A?X= zXm5_~uxQB4bu=CRkfJ{W5)GRM21S-6-vnk20)T<8s?D)V7R7-0;52xX`4@aTEVBqH zzWQs{7~lw8P$K`S`G{pb%O zc9f}+g#{e~J%iQckGFuWBMivXeu#%4(Q8(a%$I3Hv$3%Or+Dk4QhOo`i1`u-miqc& z;o#s-FE4RCg@6ai03c(*DsT8`BtXP~6(hX5y#j)$Oe(pO{hWO17FV!Fs1BLivJE>s zJQt<9PfX~~qZcUB`K#S}d1(Iudq3OlqFsK&C<0oZlxVIpwj1`sXd@Q7JD8e~w%}|s z+Qn)HU%;;H>(dKr|L#V$Q%M*@&%+Ow(g`KYK0(WU{fqXnzdeNr7pjy<>&3clAd*sE ziQ@HGr?mWP*B}~_ga8wZfGM%Gj5HiskX5iRU?6(6GAU$%?pi8701W}oSd!vK-G)ib z+Et&spwvq)1zZw|P_f~FMU`TKwM;001$0vQ9LSuv{PYB z556G&1|}uhHwRUV7*V}F=b_PejF89nx!g^Etfg5-jXYQ#-m=m|-JT@ufpG(@-kO(P z?I}nUEwN(WVmBx3Go?1k$}dSv4IHwGP{UO!vU$J6hkWXN4JI}uJz3DYFE+ntH zZpks){p4D4eXT9$PQoQp=`$8Ovbq%&hfWfmru!us@2A?^M%T~fmg#BbmWr2q%O7uD zS-~q0e$84sYv~5Y-m2|XBE`pvbH$2e&Bq*+K2(302LltJuB+n}p+|ta z%;nV0%w;^A^ahq;A_ihM=0Q42qwZB;pa;Wo145)T2l%kYj>&zk_=1QqM9(sD^lO0} z1+3`ofgZPCAyS9J6nP4%kdHOFyUL@3xJ!ZOLfdbg3K67RcPR?k zXUBGbN5-@yVDyh~q}E%;+-7xmkB1L_z&s|Ot;uxcjxSp@`1Ea{r~c<9rRwgi`3N%X zS#bORY3@ARnhLr#3`mt;q!~gBQUn1(q}O2R9YheMH)&D>3eqw34gyjFgd$a?s)!^= zkzS-K5RoPd0cisA4(H1`?>{*Clwf5&=h)BmSZrN;2RIz=C!o+9}-fkw-5_zR4t!3(qBpeCdL#+^IVHe7;y@US-tLHcG_)2rVJ#-lVj4?!!4yC6Sp6nC=i~OhA$`8mvRw0Tu)2~G9zr}>b}hN9xonvw3{`1ZoS>D7 zo-vWELf=$uy6WTMAu_D1Crc4G>*eW*hxCrPXKZx%-;1P{iZA$Q!u)5AjrMr7grI;ucUvUb(w z8x6l+?d~=0yywq9c6Y0%0CIOlg>@W19^yA>5_~egAnOpRy zvgEctxiA%yP+dioyJEo7s|H#WLQQ#*zA_vlj6$gV_V=ha@j)S)-qQ|M0PK|gaG_i^ z{=4>2L1lH50Kx5Y$k+CI&^UMtOpuvwFqFeh(f?j<!DdX@drl<+oE-^u-}^4t(v#v9&mDq_>i+rGLhUy&F_nI_B)h@dHL2$lVeYp#~P$MI%w6m zBl)v&ukF_!Svt3Vtk|oRTzG#KGjvW(%h{@zhO`jPM?DSl0kgh*;C8&c%5C+fd7?ta zP@+B8q~6A+39?dSEydDpb%}t5060Q(d9o>*{dTQ*5aiu62LluvLI-dBYfO-!l}=fe z&_y5S!gVs)FvR8sJBXMNq`^kMpZDDX3IlJJSK(6*gp9{u>ETQBx7EMP`Te_5^~)$U z$W2r_`;jRdCJ#wYS1d$n$a@mx9rbvmMb`H(>tz-{1{~H(WMuX;j`woLLfFbpNMe}x zSzekJ-grMfeN8ZyC^6_>f)rqpQJFDO!n75+@~3+Y4Jwu;|N8%g$G+Qn9JdL8uWO~c z61SuhH59oW9G0v;b2M+ZJ9MQz^5BPN=n0>Avfpy2%Wv5ddbXBw7%1&NOPs#EtRDR; zSSYUFKS$S8S9zCHBO(U-O$$`xOw2&Wv9X!3qPZW`W%|9)bv$dUqy-!B*}Z^y$BHwp%Sn`I*kyZzcx~~*&MVVY;%WNA^TyE6YG$=ox^nxV)$uc>VMmV- zb1_p*)0%63PfT@72}v(r5hdrho()XmkEvbtarItTW88&Mh#|uS$nUodc87?6M6Ve? z0P8NT45W)5B<1V84CQ&UeQl@UPYbc`;yuiA`Ltt&zg$bIpfZYvUEUxMahXG^yw#Ux z!BV0>&NtZ6lUh(YlE%onWY%`lS<`2}FJsGiycGoZ7}xgmPC^0YdrO+sZTl z;J`q#<{}U(dYn7mlEuQX8=QrAYiz8T3~SV`Q;-{hEM-${z}esYuh%T+ed1tHuMZl2 z;TxAD$18Ll0mQL;gkLk?N{6)k6aRzwNqEG(mJg^K5zv9zRu$$?8;U!gH}2!g3=Qa7 zHk>;}M)o>Jq@-WERPM_95usGoDSaI;(mdE<17$~TC0-R8Ti;F7-ZgE7H zE60`Sskh<|p+42*KL?biS^|9qt-J-iyuItaOeboNPbD0`XB!S{?sm(>|Gu=p<;?KT zTcxMO0(JZHM9o`%!OVIFJ8r1A&9Ck4;`-G(RR2HUrG@W?oy6%?79Azm>WeYciXq3u zyOu8MXS>Jae>!#@n21rT_esMk|918N{ele(m_m<51yi95ldVy@BO6)$E!NhMp15EK-gnVI2v(D|eQs>V(J!Od0CBQZWJkSI-OEpE1$m`4b<^PhUb7xY-ftg+^ z*|1PH5=a-9K{=fJu3u_V($w3e5>L3~B&d#Ug6ud?_MJ$Es{GMnKR$TIr7;53|f;M@J{})7(6*a6}9Ow`?De!xS2KD=eN?wD_sqsXp~;H zKtQUF<&!k}X>Tlii!p;?ni&ES{d5MrfpKdWj>3CK`wygnfU+PCkRyd2Ti^0tuza&p zb+^H`@D>0xvR~+@L7+SJgv~_eJ_K(}^JpD!x}|VJnXR)L|Jw0)R&wpf*YAES_RhXc z-FaAXT4gQMK<>&X{=$m#9g;xO?)QVqO6Pd@M|Li6Kd5=9qQw9P;v%dF{2?^RC+zI) zVSz@t5yXt?MC=c=j9}FH;#-w^uTyZ{A^{nrVD%k~>2cWxGV%-iWgxbqw|F^$v!{wh zGoAtfXcOQ_UO<&Ed~z|1<=UC>)LpxG2Hu#Z=#x(~BNTc=uNmCV5)j6> z`7V=y0ziJPTu|>pN=Al)s(JPfG&QR+fhHWBR$+O3{+Q;x%Qs6TgMuz-&i?8(viuRp zr}x``C2p}kA1gs~?K<5aBTxDPF(Hlwcqr<+?)mwvnh7k%w!EUEdPlmQxkxRD^n0yq zuwvkZM6Dkq?%`RwfnQ%2Dx85S#-^!O{aWY<)O}Je`x`9d9q53Euo=_rxA%`hLRQNY zCib_iO4C^D@?{Wd0%fLU^|H~#G0^rhZxOJoyRd5Tu$BSsW0YI9vvAB_$#YGT?~>9# z->88MNY9G5B2CxW=Me_r(B?qqk9H%z%I=Zg0F(cF=^b}xcO8Yeop%Ofv(7vkNv!MD zWiiZqg>gxDAlD5jbW1oG3n)3I-H4bN&iGG%tbMjA=~^qH$~-x8m{=a%-Y^xm`lBm- z2p;TiGvG-4+tv>zo3E9m+9ayZYu)PI1ImH3SI|80*gGr*$SPvtf5j|>9r?*8ZFD*& zxV;MjZ;{#%ij$+k(DhbqK7F%53S!T&fG>Oz1|{nXE+$(ZOlE5f9pO$1`XZFpd->Sk znlH9fJR7S0X&L0myEK5xA!I8x<6zdf9cjSQGIh4~Fgs$RDbu}UG^zBOT3!4qn|?tQ z8TDn;coSfZopt>#os{b^OE`mv%%4^xjb%w{R?%mUR_R(`Ytx0{)9-I1Px;u7{qFJPHgot{J@5WB z4(qW!DpxHDJ~vktvVBJtx%ksgkw6_|V<06vZ(W+D5tQd-fV_THpX7SOi@%gG7K2J` z?$`}7cZph1ui#JMGg&_@y)-vF%Q01Bu93(pHd<-O{ln=BW)5uF#C(9YTp*|!3K|+3 zj`B$1LvG96u>+C-of-|si9~|7G>q}Dtxy0-D!ZgQ!&g9^jpett2g1_~j$2%J+GJM& z$JF?hleU`ELNnUtt+;h)ZxP#zuYU*-g&@775+Ug+rp=R60K;9rH1P&jfOIfC3WG~O zDI&)g`A9&I$*|jjLa$t=3&1*3v#_uc*`ZLA&B!8oCg%v>vUDWDGadt6h2M zM#e{g*yTHgz?kH1IrdE`AIL&`DKl%-{S(8>XXZ5E@E8f~`gy5KMMB!?y6`^f+ zQw(XiGS2W_PbKvT^DR9Sr+M1{y6*b)z4;zL%Kti+2)}oq^DT=;YEHwK3J{)MFZ7eJ z(To^+GozesLt9am5&?rwNoMh{6O#ZuG@E{RUX!S1ASsY$q?AI`=o#9O1hf$7_nY#h0HB6t13J@xEG$_*9sTmh7z`Equ2LOdiHG%5pjIb{ygtq6UtuGNnEthmkNvN+Up< q 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 z z)z;6A8Z_nf;-@$F7@n4#sisdGrKBb$cZB!f2{=MoY}=fnCCwLx`TpaJ`2*VFGyX*t z!Uq54hqI-a>n+ z|FoUg{Gxw|VS+CQM|POkoMbH49Q==z;xj&V|8GQTA24DRvIZvoJ7U|o)Ig^{t-yQg z2EOI2v-aQjA9V%(zWsk)M9rTSQ9xpy=q~;{H$ZAP{T=xKMrwzY>3Fx3=l1-F zO}x@))Y3!|{eg7nyrLz2Z&k~OO_2}4RPS7HWNz{X_=7k>Il_K5zkKW9nEw{HWAQ9m zq(f%?eeSroaapmT{2s69~*m|U4J%0?K(txpVafx z`s-~wIx*)H@BTy){}c1#u(n5rrM8~sZaDpZ{%7IRLyw){Z4ep8u(WKRNcx;AG%FiFYNR|5Yy+cRH^;iX$cwV z!6oMpUFF!H?}+YJe0qovrF(Iuejf4JDa^8-U3*lVp^UM=S{80i{YZW@$GS_3fPYeZ zvOZ5e_22s#;^+kl)Sk|$==`%PwQO{2M4!tm`p+@&oXCFsEXtj@~|7hzSSen!AqH7EB+`a_#2;GG7j@sG@h`p<$ zMLFv?wIp;tIWp;w=J#xuK+1TWdoXw(`OlYd(%oBu=hJMa!zRHx z-nJ_SEgYHhr@`*HX|S@2dCP`RN*Ok#8nJ6~V&3lO0}D&0b0#nJT=Bhrax&}TVp^xa zz8g9WR6gN;I}-#+$i&r`EZ6)A)DtsWpG=fL>eF0oJ=dXT47%%IYkZwIix% z&F%1XapJz#OU#BVtk%iIi(A)ncT1xpZ%@ASNA1rZjerDeKhKDqahyl(Vn1ZIvHh@wRe%s;gF>Yk2kP_|9-^&Gbc?*K^kXmTG4GG2Zy- zc4SV*g{VQKo#mRP)#Zt&AoRnT?b{I!TJK|-A4Jg0KUU`c1r9`LFiV*Q9>Jd0eY{-sQaEA*dY`gn z)uiLG-(~@`{Wbkf=HZB^$6hW-TboKNP`^pSb?MXaEd|$fnKftDs9~XQ_py7o=csl~ zzV*xK8I1LHKH5xeNZUVQxw%Yo@LYdE=4w)tf2iF;F?4CX7>PLbI4J_szc#E#SVj86 z@y}i??IdEXuX@vcVddimdA2q&qU7$Ty+VA3wo$&ee8{|JrfL(BaUrBZ6%Ijtj(+U9p}6CtJK|kaQq%a`nY*=;q|^&(FK#Kn03^S>Lb1C`exF9e z3irLbIQHb?yhRDYc0a$H^6U-gr>q>aI&ynAUEY_5u8p$#z4>42qG}nzYuhPx6VJwH z=iQhv^G)80HL<%MNZ*`)$UR$g7Zb6Bl=HUfAA9))!NtVVk?Y#0WqXwb`>S_bxzHp3cj#w^XY-beO+c|K!@p4Uc-!Z^C!hM=9UVKK(y}4t z()t=%ukKB45{}u&4DR~<9>MnbWb451&Xb#|gVAbN&d+&W<4U$|O1}DzlU3z>_2d@C ziYnX5QcvUV8d~}&e8$HIkHWDq4R_v(hu8^^H#968+AIGfNH+NYt;-wnBy&jHH2;ro zvJJO~al9i)LGSTpZ`?7RhinjsS_JrmoK}7bPqKZhIN4Aau#$K{5e1_rw8v-cKup?Ev^S!_P*tEWuy-h{WnjG7&YclY zcV38zit0IfZ*w%XOE>LSLBzm8w`Lai?qq!a@N+aKSl@0PdRH$~PTSeIF5xqC+}{je z-pjH$wp}mqZ~{nsT}nV4%Cc2%z`nj&*!k9WM)bR^z~FTLAjZ+atG0bcuM7`7J~F)9 zk2jws=awa3Z45mB)o3iex;b0VJ@~$t?_!6oyL%v4R@dols->aq zmgSOqpY%lEx=x-8+Z1Q+{66q&>V-qoJdeNo1~^|{>OE#-&%tRq^~u57nz{#hi;FXV zrj8BYFl*TQHE&rz@EMKkx}AEk7%(mP;mgdV+9OAf5d413g6{q2fS7nDaTbl1QE=a! zbEy64t(ro4_MA+7R-RZ?_58Ly(E7m`7M5+B*5qxjzgmCN^C7Od=cajMMOPIUA2%MV zXV(5Sedy&6l%BnvGyU1W%X^KP@q6hZ?h+7LC6Wf^^sQXjwx+s%J`nX($Yqi?>(8q) zDtkQ*Py01%*)YnU35)hkh1;J^T-+a?FsIGexRTGUQ!4Jnil625E_i-o$vB6#Dkh_J z+VIsa#l7OTDD+SF4c?L45H{}7ohw(qdmEC>4?Phn?A(4255S90w05i0rkq>(ee}}g zBcsKY1+(O*aT%LwrUG#8YQW5DkdGqAmTcO7**0-Ma4rpIqwcu5q zPJjDoO2YLi3&L9WiK1d34IFDo)%UtvB<}e+q37%sg%>DCp6q)IxwA{!>34}?dnToJ zJ!(&EiItcBd-@ZO3F>=eYxbN|FWz{l-|73w#A<}M-Z!oVyC`<`feZVOh22m+5USno zv*+q`+}&o!wT+PGVYS10_1pvrAK+`4OBg$S{?*sEQr_yAy=|_iA7_6h<*ZoUxP32r zSW?N)O&rLy$L5AKZ_G=26e+Lg^_BDKSm&qla(C?PidVik(VnJ?$rlsw8IHL4QnUnc z}kC_a6BQvX4h5}bCgdA2_?BFj6YeB|LvYm?#izUHWn zaul(kGWq$2M#Aq~GjliK-`$(Ba@EDBto$=VS^7fsn4CisVmZwL>FCeZ)WAmBJ!s?vF__0%l=F&4}P^!+B>c-T)zSq}2T09_Z zXYRy`)jfo8Pr)Kw8{kU-T z)$mTa1xpOWevZ2Jd&b+rN8e3|iCpky;#~QvgN}+!W_mLSP;T6SWQfo7y|N}{$G)-4 zu?NmfcMf=bMAx=%_P_(=AC3vt|8G&!GQv7bIIyC9MMXDv@rE&fJ6Aj@^L>7xeQ|x& zAkAAJvBvna?@iw712uE9U76=s%^mQJyLr#hvArYb$4)P=SY0`AN&e)GF^y+R0@5j` z-=1|Gt;hD>r1O>5O}Z1F0>Yb2pyb(E58pXPtNC@)5i~ z`yLPEq%@Ed?uU<1|MM-pO-*6-$z5Zz57197AK55tyP@Ru?6l+WF0NkXy0OhFTD+ln zqHOZcmZ?ijC*E)2u8KP8$;eqGGnS!M4JQ&&YtnpdX6)@TbDAe_fDM^ak|;f)j;TiM zEklv|vnhQ;{Hk9dbpOxD`YD%|@43n3{hQ)@S0!{ybXWG+`k}l#^95<;kQy zqYkgky>nceLHm|Sqa@7xW8Gq8eTA5e67ji~HI#&wXg{9ZwUX9QY<8Da>htTp}9$?PiAvH9eaF^xCx${`0% zAKsBKk{#CLJXJ-f!%Q_~h@2OLDd{GS;=UT3b85jPZ)0B};E`NhRo9 z3tyZ#-|}Vf_cQ137D)#&2R-auQ;qzc)tuQfWBsB!QPStYHYjrcq`nt^x`nNhZSv9G z8=iYOcjoGj02U%j*B|T0&GKv>a``Gji3lt#51Z93KBQ8%zr11CQ$Eh+X{^ zmL%EN5y#)B&SQ<%##uJePc~PLU1i2?c`4o_ja&Ts(I|24TbRAw;7z~B^=>?KY6hbG z+iT^vzI}c?+qP&Kw9~&+k1rcql6K<5h4*tu*zI+kJ!ftlg!Bzh68r-(?@QZ||J+fR zJ9P1*5yyx6D)-e_@7iCvE01=@`}=u)!!Bk1%%qLE!Mmd~h#9}~$~SfzeYkLNeCon4 z-|UH#+s`aow{XF+(R-(#9N9eMs+IKQpAzEDcKMj2uP9{|Qstx6!p8G;6Bn;tA77as z{ST)sn=$YIyYl`+_ren!p_|C2mrcW;4x1Du(Y%AcD|on+b-Fume+4$O)9n3a=S7pA zoh@MW{l03?BiwM!mtV!Q_%Cnj7w0zjd%9@%gz~73Id_E6!?tRaI6E00Rm3l=$d}X{ z|Gm<5kl8pi|Ck>c_4{z!yvlcri388Y#U1nZ1J@ zD`uMZOIoHps^spbNw#s;M76Gm#ylA_b&Dpim$5Cb>GjrCGpD`hm{#tEAK80k=*6d~ zmLg>abJ1nlj=18Z)_wc%SGGjH>T?K|az(ml#*-_F`}2pHc3=w3aV40zpcuMjTK37P!~+mG#fS6BFRWzO6IzQMbuuf-6So8<>$Qqs@NS0W!hdslcnxN+R5 zGM#!%>8=%OpvlAg-}&KLDJ_eZeE4y4Y@ul`^w{a}!RN}$V;&wkN&4~ZaPKScrf*7I z7GEDVC;GszI}4{49GzbD^g(su%NK879Y{L3YhjPHroirfX$dbL>^Pnswdm`kZ@VlV zMzqNLM+@tlm>YKAJRCiBa!tWA`k1_e36e=^Tg8hM#~UtGRNX;Ew4{#R@-@15?;Vee zs{MvRCEsQi9_PLuhR^u1IsShBFhGFGsJ%PL8RSmsbM8KGDPP1Y-cz6ScxLn(NYonS zk+9Xw*uM9-(>_hN-X6&>8eaLng(W-wBP*gHb>wB_zkjI6^*s^kpIBXvAPWMe%_B{) zJ>;X#nZI3~_ehe8z73C=d*g8Cmpcs0xf_ys&0k3L{cv=LYYUp6G?$i}($Y_AS{~fh z&{rgs>F7r^)x{v>`1ULNTUW~27ui*HpE@q?e`}B=Wus)|wqu-yn|?1Woc>fn)o40a zb@uTJ8-A_~(!Xsub#n{D=6-|hqS&%!FUq$MZ^gJijU`1^>9IZGo7zW+11 zJhgXRs;VIF=9ojF+~s;?ppVz`G;2b|_?4cWm)EUg^trsD^lR@i>Hg6k(-q~KWD-?XfL%}Da(PQQfDCj$S{`0z>ly#*e@?y6dFHe4OxT*WC zaTwyzl8*-=h&{Y^$a=*2v%MmFkTc>>E&mQvKE4CYuXx4K64T%{A4P9-yY%cXj8d1h zBYph+>t${I(K{!uUn&QYr#f7_jH#^6>{LEN%7VcohBp-pb-A#Z2r z%j*ZS4m@4zn1=h8@YDCaxI$x2vk$heJsh*RdDq0x!I#`EPFDB+a8a+=n)So4u9U2f zz1;k-C;ZyfliiSSkx>%e@(H!Kc+Ak6j{LVK!<6uj-J&mC`k*DR+e4py;D62nlvd;o z-Ynn!7?bgS@cHxjzKx>YJkBY!>*eKz|60agxR`uo&m`GMlW|}5!Oky7-_O#k-puKb zIq2)0`Se>!Kk!3SCqpRNscmHCmqf7SM_Vu5y^M;wzHv^`fcuH}&CH?u*^C)|S7biM zXVCIaebEmL3HbUZSj;2Teo^B%)B5nf*vv_%`lbEGL@um)nnShTT+;Xk&*?n?JJ6o|PeA%y~P)xHzxJyC;Xb{yu$tPQ`_Z(l>o*_udh+sxVW#Gj8Cs zs(Nc><^2YQwF}-h+OyYJ7s)o%|7o6*96sn?!)|bx!Qb)=%icJ4)zLu=8>q6>91`b%FE@QjWowQ` z-YWK(CjaB_1-984)w$czAnQj(0nl3BBM5L}RtY6<@Pm_%VHp`2i*bW);y?m!d7HL{ zBTAMm{IEqjyMfkbzQgT!^MimmP-`7{MLH{LZs+iFPTKEz1JKqXjMYg|5M}?ZAf?uC zLSv6f?mio1*5Him!z+5OeS5Uy!g-3j$8YD~J+b^$&zrBy@1C%wZ@@U(weQq@;!bw# zm3#d+Zr!>x)V6zQL~LmRB^!@jIziBBZjWl|fMD~NzLn`SX2n^Qsk`n;J!sLHlJEZx z5N%o5H3b}ZK;BhkJpt>D2oL2Oy#@b-a|)&jN39w$_yX)YBfQ|u5;J=@uPJB44s4sq zJH=pQS^wZ*oc=r5P3;-@l;7&o&bb|*7}l;631mR4npj=RlgH)eF1d2{Tu0xncq`}Fnlkw0?exCP4VYf@!=e|QK0U5-(}cY(DWP=n zzd0ZQ9Q!=I_-ooW_QsgLj2EcW4>8`B+{36K>ie~Za&1HVMDf0UncrVVuS}BlhU+TJ z8tWP0;LVbEt4^TUm`lk7)NkSl^66{`}rH;(TcwJp1-DEXg%{#lwjBZxGL?cc!} zkb{}OgLn2ys^%vqE6Wf53E{oQTNhinLI&OLN5$qS%fzva%wJ^;!%}H2Ku+rw49hl3T zcb(q3Chd5^$<7DX%pNHlIiTCg(=ordO)Y&j-zAywyk5U>!ONOu*Y7@g?Lp}}+G>jD zlb6IiufMxDw#N!bX|G}AS@F~`ZfJw-TIaSahNoJ(r95ps*K#Dh@k&|;(kC_f`D5!r z)K;lXug8pkKmNk1N1UbSo^(ReHI$o=+5dj-u=XRh=RnM?-GZHoS5wBy&IFM^zPy?H zbY|<6cV8oWf$fyf69GlxtY0u7JpK8Dmm^NvZ-;fPnX+`;dbm^L!7u7VOXGcb($*LI z{aNnL@clKP@r@b#|7@n{(5>}wTAug(^vS23+v(=--(MA|%r8Eawu-G)AeW@Nv^1{k z2j=_G#z!IUtT~HAxRVCy^J@R}=f7CC$J1+bHpm7pyLhqf+Ksm_T)#YcRPWhcpPre% zP?!2Ydq9rXM#f2QE!>88n*g58X>bHw^uUhQa_2HDx&`CSx{{`GNB;Vo49&E)YrKVym^$Vc znDpRNhcQFaQJwo-dY*OkINn>{GWDqWVej-AU;9=cGwocnC;rNC#_DO{RLJXlMeC>@6)gkAmAH-2Jh}_jLBEbRyX90Gl$Q%xTq~f7&nY{`_3?u95da;#drRh4cFd zvZ0}&w&oVt(}sd$YsYF7uWxKQ{4VZEmn%KyO#Bo#q-;&b14h;5tg}FkZX8HY`&h+U zcFOf?&-r^tW7f8npZ31v7})Q@-p}m#iGXf)owzz>ad_M1eVZDSC!f4AM?bAP^t~4;I|rg9Z)+*Wm6R9D=*MB@isQ1%d^4 z4=y1$6f-|@`y z`|Jq%qV8@nO_bNKU%w2zzaVTT4gjQ5sd`C54DxKLssvdi?Z4LKVnJ(DPzSz_@USqG z)6L;@Zp)Y$ORhJy0LDt^cOvJu7z+Bw$Z`9@pva_TWHZg)Sp0FTfPC{l`>XlrxjRMY z_i(*ELM>nBdg66SHL<=SeV!%gO6{;vPl>~=KCRN*5dfeljd|=yK#x(&B#@q5U1aC4MUr6a>|w8>his+ z5*mo4aKVj|_JcqmL+M_hVn{ri?IQxLo>gfm;ev(E6dM>>#cMn%@_i~Y% zGT?kqt>rPM9A#x`J)A^WLqTJ+8uo8I*M}9}&3Feaul0oDU)%JW{Z!nc4DRs1)zTHJ z!J!ac6DEkVUd5n*kODMQe6`cRkZcyPnVOY~dh+b->^rMnqR%i%qbl{A%6xUT;*KP& zw36I(LX!z>0Lk~6PEH|amXW`5y0@rUPTUlVHk?X31cTq)lzDgyJ$)24?)2Mx%;dEr zkmG2T^ESJ!GHjz}t^cZ&S;mHeMJ}vzMIqv&vHYVSfu#?Aecdl;dFPxf;!6OA{|8v| zKIh!!H?V4X9Gvu9SPr7K8ko3%AVqiSbKp%7zyT4fN^SCY$p1(rxq5hL5g0t&U2o8K ziuhiZBK}IG5FL1YxDwT5{X%hHDjq_st68q4G&57ApVBwm>F+BQQm$30mio6Z8ZU+A zQ-2Aug1Iyu4=amiSy6zDZnX)5$H9Cs09Kh|<5FKLzemNw(k>qIxjL%EEG&l5Lgj^E%I{<2y`TjSYO3lc~n6&lvSn>UA ziOwG`8UhLyedDDqp))D4IpMd>H!1zq-$GbeSfx}YKPtehn#Iruuw&7&Rmw@k!-+2J zdi-u!doj|aiUpJIrk}ds9~!oNpu_EH_db)}?Oyou>XYMYr(p`wMwi@|IGL%KqLWSJ zc(|-p#o#wxue;=obk*p@t9S}gqffMT{JL$)1niZHm#%=jw7gJlHvX7Oa{;ntrI2l@ zii5tIT0CK@4~4_j0G_B-PxFgOrX?Z)Lzv1uSBw@NwLSak2{DB^6K9gb(NfC{osp5z zh`d=Zdf-I5-g<91&5?C`Y*jD72W4K7qNTFSTbT$6`U{MH)JN`oe7HsZFpa8Phw2Vc zv%JgW`KZMEU#HVQS7SkE9gmKVMm`itjXY$q)_K9q+=JMb^Ii@d%kI@L;WC?9K9#ev zWN^#bgiM2JZQ}Lc;hp-T{f~~4dTRAIaMQ1LT*^7ZBQvt5sb(Nr;Q|;eK1!kGpce_- zYoi}!Os!Q)xWwju^#`&QUpO06M0`EAA~wJ6xcQSq{D{D-p{bj!h-oU0TFEw!I87(i zSjYjJ)H7cMPen~qiP}o(Cm_%o70fIi-5S&apSx4iD?+Kr?L%Q5ymqs+UgZ5F0a%9O z753~un}^Jj@B?=ewy~Bs-K?jR2x?gW5ixe17<>ymxNPapy#k-5^|Zemfp3~kEH=Kk znF7y5{xf6#JKpy*WhrH8-=hCATegaBShk9nNB8aR?tXj7M3NnKo-B~Uaj+OoRnpb7 z&y|$HowjwEx`BRsPOC?s&G|{%)&2BQ?rZ&d`uZ>*aV~h7z}{EQub-;c#TTpDnH!~9c>3j z_?9uXE*sJ*{li$VDxW$^n52H?iqiRWY)$p8!hTt>r2GpxB0ckD_&B(YU*+p-Ye5r` zTSYocm)I8~$Z`0wL>wS18hFD`UqYPBU+?dmYwNxH#%ln|ZrmA%LBhA=t57lLVmX0D zQYjM99ar-r6MVVK`T3Rh{^ZO@i<>+{vc(u%4-B0~$bb=N366OxiwHm1g#tw{IZFDap<+NF0gYyEhv_#Yo z4ya^o#TZl&g$x@WQifz*fUA}!y#SGhx_D4Atob;l#KSojOL@=a*=wFO(c+mg*MwPrE<{dHZ(y0FlBJ^;ny49===y>7{K)W(X zI>ft?6agxWbUMkYTyJrHfNf%HBGTd%TFIc@jf$VWm3Sb&Xrbw57GEOKFVkSsOij!f zqt1;80-L|<44w>65rsn&ElcaEe+}n_xG|y93L-Amji`B5_>bOvr$&?cS6Z7N&K?eX zqTMCz$+5?TIb4+B#)1m!K1-w%wLz>I0|I%DTvxQ}y)T4tp**2-_4QOICksOEd!-Wg zQb-62l0gI%6IB-UjInjGeOO>C9llPdO@e^P`q-BznkbBmgT#s-45BWx``4kxWxlUTVu?pWAgB1T5T%B{DoZc<8>Gr!TC`X7r_PoxzI&n=pfqYur~L{6G42qi zGWqM53e7KR4UjTZAPn4j)hBs8aXYoMxO)X6t4Gr42qDyJO5WJJ4+^3G(9(99AcnUf z*+K=YGNJ6b7^Q9$2kRZ%|4Yz{^Ki+w((zR7t86d`M0*E>=s;load!6A?$ko}B!oAM z%zizq2Q!2FYq0*nYo8ao>|B;eIEc}@4!Q7ob9VEE4u{W`{!_X(O10-BXil%&#e1;lEaKpj> zKVWU_DZUy z3bqgr%Hbln=@XwL=C+WfXHzWH55-yCdIOmcyreR^j?9zI`ELkjz}yrWITE^O$lzG-+swlADgFvhC zrs?PysR9etj~nLgb8UVb?R(-w9F-Jan;+CxKDpt0zv7zJaq~nsYpOsM+0){KyxqA_ zY{)Ur8nNF*uIM1pRUqTO?S|s~OG8NQW3PTy=ox9SIr`jW;?Cw4lpmF) z%rGN9eX7~uqdOV!yzImG7D_SnMD$*OoBtRdMgsy7jo2S+YbGy9_!RLQ38Le~LZT8E zakP$GBhnu7OZ9{}NDmy82()vxot#h3**2XOVm%tr(+>p3G-0JI3!q+8#<~hL7o#z= z1`LJ+_#8;^gy!aE#)4^lTq-n`ijKtfIDQzHsl{;WXti?YGfnx7i58Xrka|5b z@pJlVNQ5$mliW1(Ko+4@FBjC|X8H>CglwHJ_v1(G;_CSL_=R8W4C#`hfiU{cV*N*T zdiQ?Z7Nw2osL0gYhmPR-My3<@}JgUO&*95WOo{|+E^VYA8`kHPx z{SE%R_H*NkTlkRq&=M6R#gngA!)oBb!HROBE{RzI}u8~n$XCJZ_?t>BNE^4EjWfJJ_f`7QFaO!jMus{a!UDLaj6su3b8M1VSJ>#^xKj-fX2kf)r} z|DQ#+BhFxHFdOkt6!xtyW9POn!4AE^4gd z_Wg|bzi7Y7gF#!{r=RgFzm2DxUeLkt?VSgzO?YOXrdJb7Y>V}6a>SlL1P;kK7TtC zC+0*^%O8c}J&(aU);>}7o&X(Ob?SwR$VCG#V$o(T5n69I#XqZDs=cp90W;;ss=`$` zeDjb?4g`dX9~LBcX~ij5{vW|W>b^8dtO7T49dPxF*phlHBUIWbxcHA=*c=s>fMC(v znW?|7LO=3(n$|Z+f}}Oke=IPkVCQ;^>=W?5`VUKOFN`CL4Xa5!X>zK$>cc=nj?DMb zorWYP608KPH<@HEJZ~7?mMQzpgdb-H>p!ze8jXJj7PP{Q=c;|EII^5D8*{;Z7&Zg@ zvWyg-Nbvo?>YK+p`v~D^v|4zb%ol2~#p-7!Mb`m>vuSktmLYK*xCNBPal-g!V{;3I znNO?LneU~uC$Epd_tmprVk~9+^1Fifn9TwUfkk!Lxs%F;j6_fWJ+}A%9-9ehup&!amXHde}aX95jmJ`-R!rIHZ{MHC)vX~lrqC4eGiBlt3An2 zULai|RPJWoIjydCE|O2dWoqUh7w^yOD>2=;k;(w!+-cub8PqM~k7`sNhB8LocoH5WQA_{dR ztyQ@C1>4E+nJuR-ZU9jS4ZPdbdX*# z`1C^x?TGS|lj2M0v>WD&=bD?IxA|D)zPD5|Uth#H|7X$iFQ^b$`ClbB6x@^0lJ6h; z1w~FRJk^So_%2kiEC0j97rWE`Zal`=@~_@3dhw1C3RsT3l)ZkGlYzBf z<8cJsg5|%{ABBZw17@(pLrVqmSK+?n^`sD%c9unb{#WS+dZ{W?h_gELBapfwUMb8d zg0i#gl6;^W=IVUgr*%Rm2$(wgKqG;bsJBYYy1ZD3)@^{mEUp zXcp;oFO&Z(fucHzoBGCTW%I(Q;n{&#e6!z7EK|6te1v~PQFGhxoT&o zMo{SW_s2;u{$t@Fv+z@@MBm0RMVBI9+s3_k591k$#jox(=R&T#%mfeZYzbU31d}oDW{;@m9s37RQ*5olEU4wBS7}d|N56Q{%{z z<8z%S_2Ub?^-;i2w3WhEi#b*#@}a+|Wwd&|gxGmxCkV##7>Tj?sEXbPaIONSWTAh6 z;%U54q30k$`hC}GwdI!m=4c9ycv@O#zz)v`A&-MMG2H#JCX%b~O4S=k{futR0F_W} zIrkP^MwYG5FW%&#l&|3T58CpHCqBWD^~12$>IKNj$;bqSzfeQ>eDJb{sOoLtAw`gl z=tCS014o`Btha2!K4V#>+}&xZt9Y2CB-34sIfby}l2o~L183lr%9e+ctsFNrR){kx{i^&)`#DC? z_drUcF0_b16I8@daqO44Ux(OOv&s*f%G`*Siwt1;#q!@|Cuawqdo=P@H`Tput^Wq# zc@&w**Umpb(&Op|JkJ|Y^aJ=L3*pn^vmmsgPrP{a7{|pA4!HxEgjGwjr}*;#AauSP zld?A!d8FB|7|~vytT*C)arB40(l=iGn^`z#y*5gRR!j}f>NfA9*+F;J$kypMaUg*6 zpZ@9+X0&)o%7+Tu-OG5X6%3LJ2*#)5M*ulV8El|<$~2Bu?Qq#M8)Wl9BZnnwu6}h1 zctI;_1H6`(Q4*_f2Icl70@vWgSvS7CF>|)%s5XGXBNB8ErtTm%@6vKwr_jDjxE`G~-Tp$6;;x{*9dDlLd;-^fks*M!nz$EP5Pn+VzgmN{ z@z+-o@xi@^)~m}a{O#(v=0=rP{%2DLg~ZvUc=-9R!yk0QTCBv-YA_P5aNeWWMBc8J z>gDgA8?r4tKY&edQ&OccYhjPhIjXYs2QM#{;X}vUuwV{ze75+q`4a&>i$6FZ@PLd}8Shhcnq~u!e?DORt^I=2ldEJpoTg8)r4h(SiDWbI@XX^_J@*GIwULTKE2yfcJxF#pCML8v2>{r@ND87n#bJ zHYwxeqS$zUSvAc!I#{-q#VSWEX?Ab6Fa2$$erh`G4>WMOEjKP@h4N1)AM7*UPUwPs|fenpHm4<4E z5n!7;Or~zBaThviN~l=_o6Oul7oRVGB!`xrHvA6@V0$D#cl(O!>aqVbg_b1tSgdw{ zGsmLJC&J}h!Ux^R-+Z&ODU}sBa69t2gw+H<9jqGT&Ww1kGS&XV@0xQ0I3x3=6P)57 z7*o+w!$VLQI5*oIu-~Z%x0=}dx{{dWzF@vep`cQ1FiaHv-M@~5%Vz#I{6l#TO$y8B zd+Ebm3+*mxDg4xh*4sSlneMj1nyZs8oT_(h12RyWNkG{e;RuJXX8oflf7At*U!@*PAw9xADSA_!Mf%;(cw@qn zhimUP-0N~lrlY%+D5mzYT)9j~(&NCQ*z8y!* z`C&m^svv+Lvz#!3MXFWqx;NPw)8Piqk^Noi>bky^kiSrq#+A+KYQrL zIez&cX&gjC?=O~881+)Q(ry6Al9|Od4k#kc9pyzYVT8g2>Jh?Ew_@DJQ}#VibT70< zl18C_ad$oIYvF#ztv>2(h$6XO{c?T^UlY}6i*~(s`UJPWMK3%;jrmNVOO|_?J>e|N znSgiu)=GA=A2R%2t*Ok`cXd*|bfyezMFdi~VxE*Gy?3#2Ayc@JqB#Vr-ccL`edE#a zl_f}-R<xCR{etDSIuTY*hzxNX6{x?8YA0qqGZ8ZySS1f+CQ0dF4 zQH*?)yOLl$`&bOYWci!$h^pBt)CN%T`me9GOW0wbOad0+O+MF*zb&ClxzthLt+r}$ zv}ld1R3{`-2Chz~S;%XQ#ermP>&KtOp;NqSVGoY6H4 zpE`Q8!Jj(lSd}qQZ#=(kPpNU3F~Gkq6!yDQ47Uaxb9D8u0{TIC7n)eBpQf|Nl@p_G zeV≥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 \ No newline at end of file diff --git a/docs/singlenode.png b/docs/singlenode.png new file mode 100644 index 0000000000000000000000000000000000000000..2753e5da8e905db757d79c1fe39283486bdaf117 GIT binary patch literal 79500 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

>>;1$%KE}Pc9F9ZDy)sE&YahV3> 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 z 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 literal 0 HcmV?d00001 diff --git a/entropylab_qpudb/_qpudatabase.py b/entropylab_qpudb/_qpudatabase.py index 5467f7b..188f3b6 100644 --- a/entropylab_qpudb/_qpudatabase.py +++ b/entropylab_qpudb/_qpudatabase.py @@ -35,6 +35,7 @@ class QpuParameter(Persistent): """ A QPU parameter which stores values and modification status for QPU DB entries """ + value: Any last_updated: datetime = None cal_state: CalState = CalState.UNCAL @@ -71,10 +72,12 @@ def _hist_file_from_path(path, dbname): return os.path.join(path, dbname + "_history.fs") -def create_new_qpu_database(dbname: str, - initial_data_dict: Dict = None, - force_create: bool = False, - path: str = None) -> None: +def create_new_qpu_database( + dbname: str, + initial_data_dict: Dict = None, + force_create: bool = False, + path: str = None, +) -> None: """ Create a new QPU database permanent storage file. This operation is performed once in the lifetime of a database, and is quite similar to initializing a git repo. @@ -189,12 +192,14 @@ def _open_data_db(self, history_index): try: self._db = ZODB.DB(dbfilename) if self._db is None else self._db except LockError: - raise ConnectionError(f"attempting to open a connection to {self._dbname} but a connection already exists." - f"Try closing existing python sessions.") + raise ConnectionError( + f"attempting to open a connection to {self._dbname} but a connection already exists." + f"Try closing existing python sessions." + ) con = self._db.open(transaction_manager=transaction.TransactionManager(), at=at) assert ( - con.isReadOnly() == readonly + con.isReadOnly() == readonly ), "internal error: Inconsistent readonly state" con.transaction_manager.begin() print( @@ -208,8 +213,10 @@ def _open_hist_db(self): try: db_hist = ZODB.DB(histfilename) except LockError: - raise ConnectionError(f"attempting to open a connection to {self._dbname} but a connection already exists." - f"Try closing existing python sessions.") + raise ConnectionError( + f"attempting to open a connection to {self._dbname} but a connection already exists." + f"Try closing existing python sessions." + ) con_hist = db_hist.open(transaction_manager=transaction.TransactionManager()) con_hist.transaction_manager.begin() return con_hist @@ -232,7 +239,13 @@ def close(self) -> None: def __exit__(self, exc_type, exc_val, exc_tb): self.close() - def set(self, element: str, attribute: str, value: Any, new_cal_state: Optional[CalState] = None) -> None: + def set( + self, + element: str, + attribute: str, + value: Any, + new_cal_state: Optional[CalState] = None, + ) -> None: """ A generic function for modifying values of element attributes. @@ -257,11 +270,11 @@ def set(self, element: str, attribute: str, value: Any, new_cal_state: Optional[ root["elements"][element][attribute].cal_state = new_cal_state def add_attribute( - self, - element: str, - attribute: str, - value: Any = None, - new_cal_state: Optional[CalState] = None, + self, + element: str, + attribute: str, + value: Any = None, + new_cal_state: Optional[CalState] = None, ) -> None: """ Adds an attribute to an existing element. diff --git a/entropylab_qpudb/_resolver.py b/entropylab_qpudb/_resolver.py index cd9eca9..b07daa4 100644 --- a/entropylab_qpudb/_resolver.py +++ b/entropylab_qpudb/_resolver.py @@ -29,13 +29,13 @@ def aliases(self): class DefaultResolver(Resolver): def q(self, qubit, channel=None): if channel is None: - return f'q{qubit}' + return f"q{qubit}" else: - return f'q{qubit}_{channel}' + return f"q{qubit}_{channel}" def res(self, resonator): - return f'res{resonator}' + return f"res{resonator}" def coupler(self, qubit1, qubit2): qubit1, qubit2 = sorted((qubit1, qubit2)) - return f'c{qubit1}_{qubit2}' + return f"c{qubit1}_{qubit2}" diff --git a/entropylab_qpudb/tests/test_qpudatabase.py b/entropylab_qpudb/tests/test_qpudatabase.py index 15fe155..3209d09 100644 --- a/entropylab_qpudb/tests/test_qpudatabase.py +++ b/entropylab_qpudb/tests/test_qpudatabase.py @@ -57,8 +57,10 @@ def test_open_with_default_resolver(testdb): with QpuDatabaseConnection(testdb) as db: assert db.q(1).p1.value == 3.32 print(db.q(1).p1) - db.add_element(db._resolver.coupler(1, 2)) # todo: add methods for adding specific element types - db.add_attribute(db._resolver.coupler(1, 2), 'xx', 20) + db.add_element( + db._resolver.coupler(1, 2) + ) # todo: add methods for adding specific element types + db.add_attribute(db._resolver.coupler(1, 2), "xx", 20) print(db.coupler(1, 2).xx) assert db.coupler(1, 2).xx.value == 20 assert db.coupler(2, 1).xx.value == 20