{ "cells": [ { "cell_type": "markdown", "id": "40f73387", "metadata": {}, "source": [ "# Basic mitigated VQE" ] }, { "cell_type": "code", "execution_count": 1, "id": "59bf709a", "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import scipy.optimize as opt\n", "from qiskit import *\n", "from qiskit.circuit.library import TwoLocal\n", "from qiskit.providers.fake_provider import FakeAthens\n", "import mthree" ] }, { "cell_type": "markdown", "id": "31ded95c", "metadata": {}, "source": [ "## Setup problem\n", "\n", "Here we define the Hamiltonian in terms of `(coefficient, operator string)` pairs, where the right-most element of the strings correspond to qubit 0." ] }, { "cell_type": "code", "execution_count": 2, "id": "f3dc45e9", "metadata": {}, "outputs": [], "source": [ "H_op = [(0.39793742484318045, 'YZ'), (-0.39793742484318045, 'ZI'),\n", " (-0.01128010425623538, 'ZZ'), (0.18093119978423156, 'XX')]" ] }, { "cell_type": "markdown", "id": "defa8739", "metadata": {}, "source": [ "We also need to define our guess (ansatz) for the form of the target statevector:" ] }, { "cell_type": "code", "execution_count": 3, "id": "778d9570", "metadata": {}, "outputs": [], "source": [ "ansatz = TwoLocal(2, rotation_blocks='ry', entanglement_blocks='cx') " ] }, { "cell_type": "markdown", "id": "645c8440", "metadata": {}, "source": [ "## Extract the needed data\n", "\n", "First we need an array of the coefficients, and a list of the operator strings." ] }, { "cell_type": "code", "execution_count": 4, "id": "ab7470cc", "metadata": {}, "outputs": [], "source": [ "coeffs = np.array([item[0] for item in H_op], dtype=float)\n", "op_strings = [item[1] for item in H_op]" ] }, { "cell_type": "markdown", "id": "9aafffdd", "metadata": {}, "source": [ "Next, we need to make circuits that perform the needed post-rotations needed for the measurements defined by the `op_strings`. We need a function to do this:" ] }, { "cell_type": "code", "execution_count": 17, "id": "f6910748", "metadata": {}, "outputs": [], "source": [ "def opstr_to_meas_circ(op_str):\n", " \"\"\"Takes a list of operator strings and makes circuit with the correct post-rotations for measurements.\n", " \n", " Parameters:\n", " op_str (list): List of strings representing the operators needed for measurements.\n", " \n", " Returns:\n", " list: List of circuits for measurement post-rotations\n", " \"\"\"\n", " num_qubits = len(op_str[0])\n", " circs = []\n", " for op in op_str:\n", " qc = QuantumCircuit(num_qubits)\n", " for idx, item in enumerate(op):\n", " if item == 'X':\n", " qc.h(num_qubits-idx-1)\n", " elif item == 'Y':\n", " qc.sdg(num_qubits-idx-1)\n", " qc.h(num_qubits-idx-1)\n", " circs.append(qc)\n", " return circs" ] }, { "cell_type": "markdown", "id": "b504f2cd", "metadata": {}, "source": [ "Next we actual grab the measurement circuits:" ] }, { "cell_type": "code", "execution_count": 18, "id": "436ad823", "metadata": {}, "outputs": [], "source": [ "meas_circs = opstr_to_meas_circ(op_strings)" ] }, { "cell_type": "markdown", "id": "d91fbc72", "metadata": {}, "source": [ "Having both the ansatz and measurement circuits in hand we can now combine them and add measurements. (Qiskit does not let us combine circuits with classical registers to ones that do not. Thus we have to do things in a bit of an odd way here)" ] }, { "cell_type": "code", "execution_count": 7, "id": "95553c66", "metadata": {}, "outputs": [], "source": [ "full_circs = [ansatz.compose(meas_circs[kk]).measure_all(inplace=False) for kk in range(len(meas_circs))]" ] }, { "cell_type": "markdown", "id": "b76a4fc6", "metadata": {}, "source": [ "Lastly, we need the strings that will tell the expectation value function which diagonal operators to use. Because we have added post-rotations to each circuit for the `X` and `Y` measurements, these strings need to be converted to `Z`:" ] }, { "cell_type": "code", "execution_count": 8, "id": "62a5e3a1", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['ZZ', 'ZI', 'ZZ', 'ZZ']" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "meas_strings = [string.replace('X', 'Z').replace('Y', 'Z') for string in op_strings]\n", "meas_strings" ] }, { "cell_type": "markdown", "id": "a8a57780", "metadata": {}, "source": [ "## Run the problem" ] }, { "cell_type": "markdown", "id": "d59c8e2e", "metadata": {}, "source": [ "First we need to set the backend, and compile the circuits for it:" ] }, { "cell_type": "code", "execution_count": 9, "id": "a3894301", "metadata": {}, "outputs": [], "source": [ "backend = FakeAthens()\n", "trans_circs = transpile(full_circs, backend)" ] }, { "cell_type": "markdown", "id": "71eee304", "metadata": {}, "source": [ "One example compield circuit is:" ] }, { "cell_type": "code", "execution_count": 10, "id": "5cf88ecb", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAABlwAAAG8CAYAAAC7aQgtAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAA9hAAAPYQGoP6dpAACK1UlEQVR4nOzdd3hUZdrH8d+kN0LoJKH3DqE3NVRBKS4qYkdQRHFRVASRVVbQFRXc1RUsqIhiWxRRsNB7kRACSEBaQiAk9JBQ0uf9I28C6dMyk8l8P9eVS+a05545z3M7M/ec5xiMRqNRAAAAAAAAAAAAsJibowMAAAAAAAAAAABwdhRcAAAAAAAAAAAArETBBQAAAAAAAAAAwEoUXAAAAAAAAAAAAKxEwQUAAAAAAAAAAMBKFFwAAAAAAAAAAACsRMEFAAAAAAAAAADAShRcAAAAAAAAAAAArETBBQAAAAAAAAAAwEoUXAAAAAAAAAAAAKxEwQUAAAAAAAAAAMBKZVZwCQ8P1zPPPFPm+5TXYwAAAAAAAAAAANdhUcElMTFRTz/9tJo0aSIfHx/VqlVLvXv31gcffKCrV6/aOkabGj16tAwGgwwGgzw9PdWoUSM9//zzunLliqNDKzOjR4/W1KlT9a9//UtdunRRpUqVVLNmTd1xxx3666+/HB0eAAAAAAAAAABOz+yCy7FjxxQWFqaVK1fq9ddf1+7du7V69WpNmjRJP//8s1avXl0WcdrUoEGDlJCQoGPHjmnWrFmaN2+enn/+eUeHVSays7O1YsUKDR8+XBs2bNCECRO0fft2rVq1SpmZmRo4cGCFLjYBAAAAAAAAAGAPZhdcnnzySXl4eCgiIkIjR45Uy5Yt1bZtW915551asWKFhg4dWuR+aWlpmjhxomrWrCkfHx/17t1bO3fuLLRdZmamnnrqKQUFBalatWqaPn26jEajJOm3335T796989YNGTJER48eNfcpyNvbW7Vr11bdunV133336f7779ePP/6Yb5vs7Gy98MILqlq1qmrXrq0ZM2bkrTMljiVLlqht27by9fVVtWrV1L9//7zChtFo1JtvvqlGjRrJ19dX7du315IlS8x+Hi1atMi7Wqfg37vvvitJ2rJli9zc3NStWzf99ttvGj16tFq3bq327dvrs88+U1xcnHbt2mV22wAAAAAAAAAA4DqzCi7nz5/XypUrNWHCBPn7+xe5jcFgKHL5Cy+8oO+//16ff/65IiMj1aRJE9166626cOFCvu0+//xzeXh4aMeOHXr33Xf1zjvvaMGCBZKkK1eu6Nlnn9XOnTu1Zs0aubm56W9/+5uys7PNeRqF+Pr6KiMjo1Ac/v7+2rFjh9588029+uqrWrVqlUlxJCQk6N5779WYMWN04MABrV+/XiNGjMgrHE2fPl2fffaZ5s+fr/3792vSpEl64IEHtGHDhrz2Fy5cWOxrmWvp0qWSpDVr1ighIUFxcXHy8PDQ//73Pz3++OOSpJ9++klDhw6Vm1vhU33p0iVJUtWqVS152QAAAAAAAAAAwP/zMGfjI0eOyGg0qnnz5vmWV69eXampqZKkCRMmaPbs2fnWX7lyRfPnz9fChQs1ePBgSdLHH3+sVatW6ZNPPtHkyZPztq1bt67eeecdGQwGNW/eXPv27dM777yjxx57THfeeWe+437yySeqWbOmoqOj1aZNG3OeSp4//vhDX331lfr165dvebt27fTKK69Ikpo2bar//ve/WrNmjQYMGFBqHAkJCcrMzNSIESNUv359SVLbtm3zXou5c+dq7dq16tGjhySpUaNG2rx5sz788EPdcsstkqTKlSsXep0LSkxMlIeHh3r16iVvb29FRUUpMzNTN910k7y9vSXlFFzefvvtQvsajUY9++yz6t27t8WvHQAAAAAAAAAAyGH2lGJS4atY/vjjD0VFRal169ZKS0srtP3Ro0eVkZGhXr165S3z9PRU165ddeDAgXzbdu/ePd/xe/ToocOHDysrK0tHjx7Vfffdp0aNGikwMFANGzaUJMXFxZkV//LlyxUQECAfHx/16NFDN998s957771827Rr1y7f4+DgYJ05cybv+ZQUR/v27dWvXz+1bdtWd999tz7++GNdvHhRkhQdHa3U1FQNGDBAAQEBeX+LFi3KNy3Z3/72Nx08eLDE57Fv3z41a9Ysr7gSFRWlGjVqqFatWpKkAwcO6OTJk+rfv3+hfZ966int3btXX3/9tcmvGwAAAAAAAAAAKJpZV7g0adJEBoOhUCGgUaNGknKm5ipK7lRaBQs1RqOx1GmzbjR06FDVrVtXH3/8sUJCQpSdna02bdooPT3dnKehPn36aP78+fL09FRISIg8PT0LbVNwmcFgyJsyrLQ43N3dtWrVKm3dulUrV67Ue++9p5deekk7duzIO8aKFSsUGhqar43cwomp9u7dm3fljJRTcLmxUPTTTz9pwIABhc7L3//+d/3000/auHGj6tSpY1abAAAAAAAAAACgMLOucKlWrZoGDBig//73v3k3gDdFkyZN5OXlpc2bN+cty8jIUEREhFq2bJlv2+3btxd63LRpUyUlJenAgQOaPn26+vXrp5YtW+ZdNWIuf39/NWnSRPXr1y+y2FKS8+fPmxSHwWBQr1699M9//lO7d++Wl5eXli5dqlatWsnb21txcXFq0qRJvr+6deuaFcvevXvzFVgKFlyWLVumYcOG5T02Go166qmn9MMPP2jt2rV5V+YAAAAAAAAAAADrmHWFiyTNmzdPvXr1UufOnTVjxgy1a9dObm5u2rlzpw4ePKhOnToV2sff319PPPGEJk+erKpVq6pevXp68803dfXqVY0dOzbftidOnNCzzz6rxx9/XJGRkXrvvfc0Z84cValSRdWqVdNHH32k4OBgxcXFaerUqZY/cwuZEseOHTu0Zs0aDRw4UDVr1tSOHTt09uxZtWzZUpUqVdLzzz+vSZMmKTs7W71791ZycrK2bt2qgIAAPfzww5KkpUuX6sUXXyx2WrHs7Gzt379fL7/8ct6yY8eO6W9/+5sk6cyZM9q5c6d+/PHHvPUTJkzQV199pWXLlqlSpUpKTEyUlHO/mOKuTgIAAAAAAAAAAKUzu+DSuHFj7d69W6+//rpefPFFnTx5Ut7e3mrVqpWef/55Pfnkk0Xu98Ybbyg7O1sPPvigUlJS1LlzZ/3++++qUqVKvu0eeughXbt2TV27dpW7u7v+/ve/a9y4cTIYDPrmm280ceJEtWnTRs2bN9e7776r8PBwi564pdzc3EqNIzAwUBs3btS///1vJScnq379+pozZ44GDx4sSZo5c6Zq1qypf/3rXzp27JiCgoLUsWNHTZs2Le8Yly5d0l9//VVsHEePHtXVq1fzXdHSvn17zZgxQ2FhYTp8+LC6deummjVr5q2fP3++JBV6zT777DONHj3ailcFAAAAAAAAAADXZjDm3mAFFcqwYcPUu3dvvfDCC44OBQAAAAAAAACACs+se7jAefTu3Vv33nuvo8MAAAAAAAAAAMAlcIULAAAAAAAAAACAlbjCBQAAAAAAAAAAwEoUXAAAAAAAAAAAAKxEwQUAAAAAAAAAAMBKFFwAAAAAAAAAAACsRMEFAAAAAAAAAADAShRcAAAAAAAAAAAArETBBQAAAAAAAAAAwEoUXAAAAAAAAAAAAKxEwQUAAAAAAAAAAMBKFFwAAAAAAAAAAACsRMEFAAAAAAAAAADAShRcAAAAAAAAAAAArETBBQAAAAAAAAAAwEoUXAAAAAAAAAAAAKxEwQUAAAAAAAAAAMBKHo4OAAAAAAAAAADg3A4ePGjW9mfOnNF3332nkSNHqmbNmibt06JFC0tCA+yGK1wAAAAAAAAAAHZ19uxZvf/++zp79qyjQwFshoILAAAAAAAAAACAlSi4AAAAAAAAAAAAWImCCwAAAAAAAAAAgJUouAAAAAAAAAAA7Kpy5coaOnSoKleu7OhQAJsxGI1Go6ODAAAAAAAAAAA4r4MHD5Z5Gy1atCjzNgBrcIULAAAAAAAAAMCu0tLSdPz4caWlpTk6FMBmKLgAAAAAAAAAAOzqyJEjGjRokI4cOeLoUACboeACAAAAAAAAAABgJQ9HBwCUd0ajlJ7l6CjM4+UuGQyW7280StkZtovHkdw8rXstJOfrA9ae/4KcsT/Y4rzjOmcbAxJ58EbWjgdXPP8FOWN/IA/alrONA1uMAWfs98UhD1rPGfsDedB2XHUMOGO/Lw550HrO1h/IgbZlNBp19epVR4dhFj8/PxnoBA5BwQUoRXqWNOVbR0dhntn3SN5WjO7sDGndu7aLx5H6TJTcvaw7hrP1AWvPf0HO2B9scd5xnbONAYk8eCNrx4Mrnv+CnLE/kAdty9nGgS3GgDP2++KQB63njP2BPGg7rjoGnLHfF4c8aD1n6w/kQNu6evWqAgICHB2GWS5fvix/f39Hh+GSmFIMAAAAAAAAAADASlzhAgAAAAAAAACwq9atW+vAgQOODgOwKa5wAQAAAAAAAAAAsBIFFwAAAAAAAACAXcXExGjUqFGKiYlxdCiAzVBwAQAAAAAAAADY1dWrV7Vnzx5dvXrV0aEANkPBBQAAAAAAAAAAwEoUXAAAAAAAAAAAAKzk4egAAFRMe46u1/Mf9Mm3zMfLX3VqNFP/jg/qjl5/l7s7Kaii4vwDjANXx/mHq2MMgD4AV8cYAH0AcE2MagBlKrz9PerWcoiMMupiSqJW7VqkD35+VnFnDmjSXR85OjyUMc4/wDhwdZx/uDrGAOgDcHWMAdAHihcaGqrZs2crNDTU0aEANkPBBUCZahzSQf07PZD3eGjPJzX2rZb69Y8FemTQawoKqOHA6FDWOP8A48DVcf7h6hgDoA/A1TEGQB8oXlBQkIYNG+boMACbouCCcmflypWaO3eudu7cqWvXrqlx48a677779Nxzz8nLy8vR4VnsTEykvv5HJ5sd7+kvjTY7lj35evmrRb1u2rT3hE6dP+pSbyzoA659/sEYyOXK44A+4NrnH4wBiTFAH6APuDrGAGOAPkAfuNGFCxf066+/avDgwapataqjw7Ebb29vtW7dWlWqVJGHh4fS0tJ07NgxxcXFmXyMiRMnKi4uTj/++GPZBQqLUHBBuTJnzhw9//zzkqT69eurXr16+vPPPzVt2jT9/PPPWrNmjXx9fR0cpWVi9/yi8R8lyduvsqNDcbiE80clSYF+1RwciX3RB3K46vkHY+BGrjoO6AM5XPX8gzGQy5XHAH0ghyv3AVfHGMjhymOAPpDDlfvAjRISEjRr1ix16NChwhdcWrdurccee0w33XST2rZtK09Pz0LbnD17Vrt27dLSpUu1ePFiXblypchjPf300/r3v/+tjIwMjRw5kqJLOUPBBeXGH3/8ocmTJ8tgMOjTTz/V6NGjJUlHjx7VoEGDtG3bNr344ov697//7dA4LZV21TXfUKRmXNWlK+dkNObMVfrztg90JH63mtftojo1mjo6PLtyxT7A+ceNXHEMSIyDG7liH+D840aMAcYAfYA+4OoYA4wB+gB9wNUMGDBAL730km655ZZSt61Ro4YGDRqkQYMG6a233tLChQs1c+ZMnTt3Lm+b3GKLJHl6eqp169YUXMoZCi4oN2bOnCmj0agxY8bkFVskqXHjxvrkk090yy23aP78+Zo2bZpq1qzpuEAtkHwuTpWq13d0GA6xePVMLV49M9+yXq3v0MQR8x0UkWO4ah/g/OdnNEpHTktbj0hnkqWsbMnfWwqrL3VuKPkU/oFLheGqY0BiHORy1T7A+c8vO1s6kCBtPyKdvyxlG6VAX6lTg5xc6FWBP50wBq5z1TFAH7jOVfuAlPP+b98J6Y9j0sWrOcuq+EldG0lt60rubo6NrywxBq5z1TFAH7jOVfuAK6lcubLmzp2rMWPG5FuelZWlAwcOaNeuXYqLi1NWVpYCAgLUunVrde7cWTVq5EwxFxgYqIkTJ2rUqFF68skn9f333+crtkjSK6+8otdee82eTwsmqMAfaZzXuXPn9MYbb2jp0qWKj49XjRo1NHLkSM2aNUuPPfaYFi9erI8//liPPvqoo0OVJBmNRhkMBquOkZKSopUrV0qSHnvssULrb775ZjVr1kyHDh3STz/9VG6eu6lidv+sRmFDHR2GQwzqOlZ92o9SVnamYhP/1Dfr3tDFy6fl7Xl9arh9xzZp2ieDC+2bmZWu7Ows/f5mlj1DLhOu2gc4/9edvCB9uVVKvFR43dEz0s+7pVvbSn1aSlam1HLJVceAxDjI5ap9gPN/3ZHT0tfbcwotN0q8JB1KlJZFSsM6St0bOya+ssYYYAzQB+gDe09IS3ZKydfyL09IkqJP5RSg7+oitavrkPDKHGOAMUAfoA+4inbt2mn58uWqW/d6Qj9w4IDmz5+vL774QklJScXuGxYWpieeeEL333+//Pz8VLNmTS1ZskQ7duxQt27d8rZ75ZVX9Oqrr5bl04CFKvBvJ5zT3r171aZNG82ZM0enT59Wq1atlJ6errlz5+qBBx7QX3/9JUlq3759mcUQHh4ug8Gg2NjYUreNiIhQWFiYYmJirGpz9+7dSk9Pl7e3tzp37lzkNr1795Ykbd++3aq2HCH5bIwCazTIt2zLt9P0nwcM2r/h0yL3WfrGQL33sKfOxETaIcKyE1qtiTo2668uLQbp7vDnNXPMch2M26H//PBE3jZtG92kn1+7nO/vsxcOKdC/uh6+dWYJR3certoHOP854s5L760qutiSKy1T+ml3zl9F5KpjQGIc5HLVPsD5z3HglDR/beFiy42upkvfbJfWHbBfXPbEGHDtMSDRB1y9D0TESJ9tLFxsuVHytZxtdh6zX1z2xBhw7TEg0QfoA4X5+/urV69e8vf3d3QoNtOxY0etX78+r9iSnJysRx99VK1atdJ7771XYrFFyvmOdNy4cWrYsKF++OGHvOUUW5wHBZdy5Ny5cxoyZIhOnz6tF154QYmJiYqMjNTp06c1c+ZM/fDDD4qKipKbm5vatGnj6HAlSV999ZX27Nmj8PBwq4ouhw4dkiTVr19fHh5FX3jVuHHjfNs6i/RrKfLyLTw/afc7Z6ha3bba+OUkJZ+Ly7du7+r5ivtzlboMe0k1G3a0V6h20ap+d/Xr+IDWRX2t6ONFF8/SM9P0z0Uj1KZBb93Xb5qdI7Q9+sB1rnj+UzOkj9bnFFRMse6AtMu6Gna5wxjIzxXHAX3gOlc8/0lXpYWbcqbRMcWyyJwrXioSxsB1rjgGJPrAjVyxD5y6mHOFn9GEbY3K2fbUxbKOyr4YA9e54hiQ6AM3ctU+UJQGDRpowYIFatCggaNDsYlGjRrp999/V5UqVSTl/Gi8TZs2+uSTT8w+1pkzZ3TnnXfqiy++yLd89+7dFFvKOQou5cjEiRN14sQJPfvss5o9e7YCAgLy1r300ktq0aKFMjMz1axZM/n6+pZwJPuZM2eOxo4dq7i4OKuKLhcv5rybzE1IRcldl7uts4jd86vqtxtUaLm7h5cGPv65MtOvadVHj8hozHn7fenMMW3+erJq1A9Tl+Ev2Ttcu7i//z/k5uauz3//R5Hr//P9eKVnpGryPQvtG1gZoQ/k52rnPyJGupxq3j7rDuTc76WiYAwU5mrjgD6Qn6ud/62HTS8651pfwa5yYQzk52pjQKIPFORqfWDjX6YXnaWc+1tt/Kvs4nEExkB+rjYGJPpAQa7YB4qSlZWly5cvKyvL+adMMxgMWrhwoapXry5J2rhxo/r3768TJ05YfMynn35aDz74YL5lYWFhuvvuu62KFWWLgks5ER0drW+//VY1a9bUzJmFLxU0GAzq1KmTpMLTicXExGjYsGGqVKmSqlSpooceekjnz5+3SUxRUVEl/u3Zs0cTJkxQ7969rSq6pKbmfBvp5eVV7Dbe3t6SpGvXSrgG28HSriQVWnYmdpdqNSp6mrSaDXLeOJyMXqu9q96XMTtbKz8creysDA0c/7ncPSrmHbRDqzdRn/ajFHl4tfYd25Rv3dLN72rHgeX65+gf5ePl56AILUcfKF1FPv8FGY3SFgsuyjt5UTpufRp3CMaAaSryOKAPlK4in/+CMrOkbUfM3+/AqZKnHyvPGAOlq+hjgD5QuoreB250NV3aFWv+frtipatpto7GPhgDpavoY4A+ULqK3gdMdfDgQXXp0kUHDx50dChWmzhxom666SZJ0tGjRzV06FBduXLF4uM9/fTT+ve//533eMmSJXn/fv/991WjRg2Lj42yVfTcTbC7xYsXKzs7Ww888ID8/IpOprkFhxsLLikpKerTp4+qVq2qr7/+WteuXdMLL7ygIUOGaMuWLXJzs7ymdvvtt5u9T1xcnMaNG6dVq1aZtZ+Pj48kKT09vdht0tJy3m1ac3VP586dlZho3hwV7p6++tusw6VuFxP1i1Z+8JDu/9deBVQJkSRlZ2fJYHCXoYQ7YHcd/pJiIn/S5m+n6GLiIZ36a5N6jnxd1eu2NSvOGzVr2lRZGZYXprw8fPXRU6U/Z2vc2+8lrYv6Wp+vfFlvj18nSYo6sk4LVkzRa2N/Ue2qDWzSTtNmTZWeaV2Rztn6gLXnv6Cy6A9lff5tcd5twdO3sobP2G/RvmMmztShjR/aOCLLONsYkMiDN7J2PJh6/qXy0wfIg+UnD1aq2VS3PrfO7P2MkoaM+rtORC21fVAWcLY8aIsxUNZ50F45UCIP2gJ50HI1GvfULeO+M3u/jCyp18CROnt0axlEZR5XHQPkwetctQ/cyNnyoKNy4OjRo83aPiEhQZL0yy+/aPdu025ounDhQjOjsl52dsmXKQYFBem1117LezxmzBglJydb3F7BYkvuPVv+97//6a677lKNGjU0Y8YMTZgwodhjNG3a1KrvhV1d7dq1FRERYdG+FFzKiTVr1kiS+vTpU+w2J0+elJS/4PLRRx8pPj5eGzduVL169SRJoaGh6tWrl3766SfdcccdFsc0ePDgYos/BR08eFD79+d8qdivXz+z2zJlujBTph0rTWJiouLj483ax8PbtNcgpGlP1W93q2Iif1bbfo9Lkk79tVkhzXqVuJ+bu4cGPP65vvlHJ+1Z+Z5qNe6qTkNeMCvGgk4lnFJm2lWL9/fxtP4XFO0bh2vVW8XPiVS/Vkv9/ub1S0YTL8Rq1pcj9diQt9ShSfHjwFwJp04pNcPy10Jyvj5g7fkvyJL+4Ojzb4vzbgsBVYv/QFGaq2lZZuersuJsY0AiD97I2vFg6vmXyk8fIA+WnzxYyzvE4n2vXMsgD1rIFmPA2jzo6DFwI/Kg9ciDlvOqZebcsjdIvpxWLvKgq44B8uB1rtoHbuRsedBROfDqVfPazJ3xJjU11eR9y0NeLOjhhx+Wv7+/JOnjjz/Wxo0bLT5WccUWSXryySc1aNAgBQQE6KGHHtLUqVOVkpJS5HFyi1mwPwou5cTx48clqdibRKWlpWnHjh2S8hdcli9frt69e+cVWySpZ8+eatCggX7++WerCi7z5s0z6aZVu3btUv/+/SVJM2bM0NSpU81uq1mzZpJyXofMzEx5eBTumkePHs23rSVq165t9j7unqZdUePtH6TmPe7TntXv572pOBG9Vl2Gvljqvl6+gXL38FZWZrrqtxskNzd3s+O8UUhwiNW/7Lan1PSremXhHerRapju6PWUTY8dHBJikytcTFFe+oC1579QbGXcH8ri/NvivNuCh09A6RsVw9fLTaGhoTaMxnLONgYk8uCNrB0Ppp5/qfz0AfJg+cmDlQItf+38fT3IgxayxRiwZx4syxwokQdtgTxoucr+3hbvG+jvXS7yoKuOAfLgda7aB/LF5mR50FE50NQfbufKnfHGx8fH5H0dkRezs7OLLWAYDAY9+eSTeY/nzp1rcTslFVsk6ezZs/riiy/0xBNPKCAgQA8++KDmzZtX5LGCg4O5wsUKlnyHnIuCSzmRO6dfbmW3oC+//FKXLl1StWrV8iWW6OjoIm+U1KpVK0VHR5dNsDeIjIzUgAEDlJSUpBkzZuiVV16x6DhhYWHy8vJSWlqaIiIi1L1790LbbN68WZLUrVs3i+O15FKwtExpyrembVu3dT+t/PAhpV9LkZdvJWVlpMrDy6fEfYxGo1Z/PEaZGamqGtpKu5bPVvPuo1Q1tKXZseY6dPiwvK0Y3Vnp0rp3Ld/fXJv2fa9jCXsUf+6Q1u8p/GJ/8ny0alapV8SepTt86LDci781kEmcrQ9Ye/4LKuv+UBbn3xbn3RaMRmnOb9LJC+bv+8X7L6tO1ZdtH5QFnG0MSOTBG1k7Hsw5/1L56APkwfKTB7OypZnLpCQzf2DpZpB+/e6/CvL7b9kEZiZny4O2GAP2zINlmQMl8qAtkActl5ohvfJDTj8yh7eHtG3Nd/IpB7eucNUxQB68zlX7wI2cLQ86Kgeaey+W/fv369NPP9Vtt92m1q1bm7TPrFmzLAnNKleuXFFAQNE/qGzVqlXej8PXrVtn8f1oSiu25Jo/f76eeOIJSdKdd95ZbMHl8OHDeVfdwL4ouJQTtWvXVkpKiiIiItS5c/6biJ04cUIvvpjzS4B27drlW3fx4kUFBQUVOl6VKlV05IgFdyg106JFi3Tx4kWrii2SVKlSJQ0YMEArVqzQxx9/XKjgsnHjRh06dEheXl4aPny4tWGXGQ8vH4W2DNfxvb+pWp02qhLcotR99q6epxP716j7na+qWbeRWvxSB638aLRGvrLV6l94O4sBnR7UgE4POjoMm6APmK8inf+CDAapd1Ppmx3m7degulSnatnEVNYYA5apSOOAPmC+inT+C3J3k3o2kX7Za95+bepIQU56j1jGgPkq2higD5ivovWBG/l4Sl0aSZsPmbdfl0YqF8UWSzAGzFfRxgB9wHwVrQ+YqlmzZtqyZYsqVark6FAsduP3uL/++qtFxzC12CJJ+/btU3x8vEJDQ9WxY0eL2kPZ4rqiciJ3Sq7XX39dhw5dfye2fft29e3bV0lJSZLyTyeWq6ibjhmNxc8RWZqxY8dq5syZJt0rZe7cuVq2bJlVxZZc06dPl8Fg0GeffabPP/88b/nRo0c1duxYSdLjjz+umjVrWt1WWWoUNkxHdy1TTNQKNQwbUuK2SaePass3U1SzYSd1GfaiqoQ0V4+7Zur00T+0a/lbdooYtkYfwI06NjD/S8O+rcokFLthDIA+gBv1aCL5mvELS4Ok8NK/lynXGAOgD+BGNzWXPMz4vtjDXbrJ8pm0ywXGAOgDMIWnp6eqVq0qT08nrTBL6tSpU96/d+3aZfb+5hRbCrYTFBSkxo0bm90myhYFl3Ji6tSpqlKlik6cOKHWrVurbdu2atKkiXr06KGWLVuqd+/ekgoXXKpUqVLkjeaTkpJUtaplP49+8MEHNX36dFWuXLnUbd3c3DRs2DCL2imoe/fueuONN2Q0GjV69Gg1aNBAYWFhatGihY4cOaJu3brpjTfesElbZalh2BDF7ftdVy6ekl9gjWK3M2Zna9WHo5WdnamBj38uN/ecC846Dn5WwU17aMfSGTofX/bTwsH26AO4kZeH9HgfydTpu29rJ7WrW7YxlTXGAOgDuFElX+nRW3LyoSlGdpMale/f15SKMQD6AG5UK1B6qFfOdImlcTPkbFur9I/j5RpjAPQBmCIuLk5PPvmk4uLiHB2KxZo0aZL373379pm1ryXFloLt3Ng+ygcKLuVEvXr1tGnTJt12223y8fHR8ePHVaNGDS1YsEDLli3Lm/+vYMGlZcuWRd6rJTo6Wi1bWj73vaO88MIL+u233zRgwABdunRJBw8eVLNmzfTaa69pw4YNZt98yxF8K1VT1dBW8qtcq8TtIn+dq1OHNqv7na+qWp3r81Qa3Nw0YNxCGQxu//+mI6usQ4aN0QdQUHCQ9MxAqWH14rcJ8JHu6SYNbGu3sMoMYwD0ARTUuKb09/5SSAkXUAf5SY/clHNFjLNjDIA+gILa1ZXG95VqlDBrTo1KOds4+49vJMYA6AMwTUpKitatW6eUlBRHh2KxqKgorV27Vlu3blVycrLJ+z388MMWFVsk6dChQ9q0aZNWrlyZNysSyg8KLuVI69attWLFCqWkpCg5OVnbtm3T2LFjdfHiRSUkJMjDw0OtWuWfZ2bIkCHavHmzTpw4kbds+/btio2N1dChQ+39FGzi1ltv1cqVK3Xx4kVdu3ZN+/fv17Rp0+TtbeLPw8uBFr0eVONOdxS7/kL8AW1b8g/VbtJdHW97rtD6KsHN1OOuWTp9bKcifp5dhpGirNAHUFCNQOnpW6XnB0s9m+bc10CSPNykB3tJM+6oGF8y5mIMgD6AgupWkyYPlp4eKHVtlD8Pjr1Z+sdwqb3l9wMudxgDoA+goGa1pReHSk/0lTo1uJ4HPd1zlr04NGebioIxAPoAXMG0adPUr18/9erVS2lpaSbv99tvv+X9iN6cYouUc0/tm2++Wbfeeqt27DDzprEocwajNTf7gF1s2LBB4eHhatOmTaFL05KTk9W2bVtVr15d//znP5WamqoXXnhBNWrU0LZt2+TmRk3NWmmZ0pRvHR2FeWbfI3mbOG1HUbLSpXXvXn989NQevbPkMV1NS1GtoPqacu8XCgqooQGTDWpYu63G3vaGurW8TZJ08uxhvfXtw7p05ZwCfIM0+Z6Fql8rp1D4/Ad9dOzUHj1066u6o9dT1jxFk/WZKLmbMW98UZytD1h7/gsq2B+cgS3Oe1l75Qfp0jWpsq/0zxGOjqZkzjYGJMflwfSMVL22eJSOn46Wt6efqlaqrafv/EC1qzaQ5Jx50BXPf0HkwbJBHiw7thgD1rwfzPXFyn9q0aoZ+ui5fWpYu40k8qC9kAfJg7bkqmPAmjyYnpmmD39+ThGHfpenu5eahIRp6n1fSiIP2our50FH5cDcGXpMtX//ft11111asmSJWrduXfoOklq0sP/N/q5cuaKAgACbH7dWrVoaMWKE5s+fb/NjX758Wf7+/jY/LkrHt/FOILfIUnA6MUkKDAzU2rVrFRwcrFGjRunRRx9Vz549tXz5cootsJm3vh2tZ+78SJ9OPqBb2o/UR8sn5637z1Nb8324/s/3j+u2buO0cMohjQx/QXO+G5u37u3x69S9lWn3/HlufrgSL8Ta7DkAgDXMyYO3dRunz174Sx8+G6VurYbonSXj8taRBwE4K3PyoCQdPhmpA3HbVTMo/2VL5EEAzsqcPPjJL1PlZnDTwhcOacHz+/XYkOs3ficPAsh1+vTpMim2wLFsWOtFWSmp4CJJjRs31vLly+0ZElzIkfjd8vUOUJPQDpKkAZ0f1kfLn1dWVmahbS9ePqPD8ZF647GVkqSb2t6p/y59SokXYvN+3W0rKVcvatzctkrPSFX1ynWUkZWmxPPHNLDzaD1z14c2bQvWm/LRQF1MSZTB4CY/n0qaMPy9vD4FlHfm5EEvT598H7Zb1uuupZv+XSZxkQedC3kQzsycPCjl/LL7vaUT9OL9X2nyB33KLC7yoHMhD8KZmZMHr6Vf0e87P9PX00/KYDBIkqoFBpdJXORB50IeLKxWrVqaMmWKatUq+V4/gDOh4OIEcgsu7dq1c3AkcEUJF2IUk7BPj8/tkLcsNf2KzqckFNr2bNIJVQsMkbt7TmoxGAyqWaWeziTF2bzgUsmvivp2uE/+vkG6r9807fzrd323bjZvKsupfzz4nQJ8gyRJW/78UXP+N0bzn4l0bFCAiczJgwX9uPlddW9VNvdUIw86F/IgnJm5efDz319Wv44PKLhqwzKNizzoXMiDcGbm5MGEc0cV6FdNi9fMUuTh1fL29NWDA2aoY9N+No+LPOhcyIOFVa9eXaNHj3Z0GIBNUXBxAlu3bnV0CHBxrRv00mtjV+Q9vmtGjWK3zf0FTy5zbhP11reP6Ej8bknSqfNH9NInt8nj/ycdnTnmZ9UMqptv+yOnonTnzZMkSYdP7lLjkA4mtwX7yn1TKUlXUi/JYMiZ8pBfZMFZmJMHc3215nXFnzusp+/8wOR2yIMVF3kQzs7UPBgdu02HTuzUo7e9YVE75MGKizwIZ2dqHszMzlDChWOqX7OVHr3tDR09tUdTPuqvBc9HKyig9PeQ5MGKizxY2KVLl7Rt2zb16NFDlStXdnQ4gE1QcAFQouCqjXQmKS7v8ZXUZKWlX1W1SoUvia4RVFdnL51UVlam3N09ZDQadTbpRKG5u4sz+Z7P8v793PxwTb5nYYlXxhw7FZX3ZvLwyV3q2Xq4aU8KDjH764e05+g6SdLrj/4miV9kwTmYkwdz/W/929r85w96c9xq+Xj5mdwWebBiIw/CWZmTB/ce26C4swf14L9yrm45e+mkXvz4Vj179wJ1bTG41LbIgxUbeRDOypw8WKtKfbkZ3NS34/2SpMYh7VW7akMdP71fQQHhpbZFHqzYyIP5nTx5UpMmTdKSJUsouKDC4K7qAErUJLSD3Axu2n1krSTp563zdEuHe/KmDbtRlYCaahISptWRX0qSNu37XrWqNrD5dGKSdO5SvAwGt7y5cI8l7lXD4LY2bwe2M+XeRfpq+gmNHjRLH624foPJI6ei1CQ0TBK/yEL5ZE4elKQlG+ZqXdTXmv3Yqny/YrM18qDzIQ/CWZmTB0f1napv/3FKX06L1ZfTYlWjch3967HfTSq2mIs86HzIg3BW5uTByv7V1aFJP0X89bsk6fTF40q8EKM6NZrbPC7yoPMhDwIVHwUXAKWaMuoLfbx8sh5+o4n2HF2vx25/s9htn7nzQ63Y/qFGz26mb9a9oefu/qRMYjoSvzvfGxB/70D9tHVembQF2xrY+WHtObJOyVfOSyr8iyzeWKI8MjUPnk06qQ+XP6fL15L0/Ad99PjcDvr7u93KJCbyoPMiD8IZmfN+0F7Ig86LPAhnZN7n4g/03fo39dictnr5s+F65s6P8ooitkQedF7kQaDiYkoxAKVqFNJO857ZZdK2dWs217t/32Z1m3OeWF/i+u6thqh7qyF5j02ND/Z3JTVZ19Iuq3rlEEnS5n1LFehfTZX8qhb5i6z7+093ZLhAkUzNgzWC6mjVW6bfu6ok5MGKgzyIisCc94M3+nJarMVtkgcrDvIgKgJz8mBwtUal5jBTkAcrDvIg4DoouACwWJWAWnrm/V4aM/hf6tbytlK3f/6DPjp9IVbtGt9ih+hQXlxJvaRXF92ptIxrcjO4qbJ/Dc18ZLkMBkOxv8h69u6PHRcwYAbyIExBHkRFRh6EKciDqMjIgzAFebBoPj4+atmypXx8fBwdCmAzFFwAWOy7VxLN2v7t8evKKBKUZzWD6uq/E/8och2/yIKzIw/CFORBVGTkQZiCPIiKjDwIU5AHi9a4cWP98MMPjg4DsCnu4QIAAAAAAAAAAGAlCi4AAAAAAAAAALuKjo5Wu3btFB0d7ehQAJuh4AIAAAAAAAAAsCuj0aiMjAwZjUZHhwLYjMFIjwZKZDRK6VmOjsI8Xu6SwWD5/kajlJ1hu3gcyc3TutdCcr4+YO35L8gZ+4MtzntZe+UH6dI1qbKv9M8Rjo6mZM42BiTy4I2sHQ+ueP4Lcsb+QB60LWcbB7YYA87Y74tDHrSeM/YH8qDtuOoYcMZ+XxzyoPWcrT84KgcePHjQrO3379+vu+66S0uWLFHr1q1N2qdFixaWhGYVo9Goq1ev2ux4b334jZKvXFWgv58mPz6q0GNb8PPzk6G8/4+wgvJwdABAeWcwSN4uNlIMBsndy9FRlB+u2AduRH+AK44B+v11rnj+C6I/wBXHAf3+Olc8/wXRH1ybq44B+v11rtoHbkR/cG0Gg0H+/v42O56Xt4+8MrLk5e0jf3//Qo/h3JhSDAAAAAAAAAAAwEouXp8GAAAAAAAAANhb48aN9dNPP6lu3bqODgWwGQouAAAAAAAAAAC78vHxUdOmTR0dBmBTTCkGAAAAAAAAALCr+Ph4TZ8+XfHx8Y4OBbAZCi4AAAAAAAAAALtKSkrS999/r6SkJEeHAtgMBRcAAAAAAAAAAAArUXABAAAAAAAAAACwEgUXAAAAAAAAAAAAK1FwAQAAAAAAAADYVfXq1fXYY4+pevXqjg4FsBkKLgAAAAAAAAAAuzIYDPLy8pLBYHB0KIDNUHABAAAAAAAAANjV2bNn9f777+vs2bOODgWwGQouAAAAAAAAAAAAVqLgAgAAAAAAAAAAYCUKLgAAAAAAAAAAAFai4AIAAAAAAAAAsKvKlStr6NChqly5sqNDAWzGw9EBAAAAAAAAAABcS506dfTmm286OgzAprjCBQAAAAAAAABgV2lpaTp+/LjS0tIcHQpgMxRcAAAAAAAAAAB2deTIEQ0aNEhHjhxxdCiAzTClGFAKo1FKz3J0FObxcpcMBsv3Nxql7AzbxeNIbp7WvRaS8/UBa89/Qc7YH2xx3nGds40BiTx4I2vHgyue/4KcsT+QB23L2caBLcaAM/b74pAHreeM/YE8aDuuOgacsd8XxxZ50NleC3IAYFtGo1FXr151dBhm8fPzk8EBiYCCC1CK9CxpyreOjsI8s++RvK0Y3dkZ0rp3bRePI/WZKLl7WXcMZ+sD1p7/gpyxP9jivOM6ZxsDEnnwRtaOB1c8/wU5Y38gD9qWs40DW4wBZ+z3xSEPWs8Z+wN50HZcdQw4Y78vjrXjwRlfC3IAYFtXr15VQECAo8Mwy+XLl+Xv72/3dplSDAAAAAAAAAAAwEoUXAAAAAAAAAAAAKzElGIAAAAAAAAAALtq3bq1Dhw44OgwAJviChcAAAAAAAAAAAArUXABAMCOjEYp6aqUlZ3zOCtbysxybEwAYE9Go3TxSv48mPtvAHAF2Ubp/OXruS87O+cPAFxNTEyMRo0apZiYGEeHAtgMU4oBAFDGLl6R/jgmxZyVTlyQrqRdX3c5TZrynRQSJNWtKnWoLzWtJRkMDgsXAGzubHJOHow9J528KF1Lv77ucpo09TsppIpUr5rUqYFUvxp5EEDFEn9RioiRjp/L+Xda5vV1KWnSi/+TQqtI9atLnRvm/BsAKrqrV69qz549unr1qqNDAWyGggsAAGUk5qy0Nlr6Mz7nF93FycrOKcScuCBtPSLVDJR6Nc3583C3X7wAYGsHTknrD0h/JZa8XUZWzpeQx89Jm/7K+aLx5uZSl0aSG4UXAE7KaJT2nJA2HMx5X1iStEzp2Nmcv3UHpIY1pFtaSO3rUoAGAMCZUHABUCb2HF2v5z/ok2+Zj5e/6tRopv4dH9Qdvf4ud3dSUEXl6uc/LVNavlvadMiy/c8kS0t3STuOSfd1l+pUtW18sA9XHweuztXP/5U0aWmEFBFr2f7xF6Wvt0s7jkr39pBqVLJpeLADVx8DoA9cuip9u0OKPmXZ/jFnc/5ahUj3dJMq+9k2PpQ9Vx8DEq8BANdEVgNQpsLb36NuLYfIKKMupiRq1a5F+uDnZxV35oAm3fWRo8NDGXPF85+QJC3YkDMvt7VOXZTm/iYNDZP6tLT+eHAMVxwHuM4Vz/+xM9LCTVJyqg2OdVZ6c4V0d1epayPrjwf7c8UxgPxcsQ/sj5e+3Jp/+kRLRZ+S3lghPdBDal3H+uPB/lxxDBTEawDAlVBwAVCmGod0UP9OD+Q9HtrzSY19q6V+/WOBHhn0moICajgwOpQ1Vzv/Jy5I89dIV23w4TpXtlFaFpnzgf229rY7LuzH1cYB8nO1838oUfp4fc4UYbaSkSV9tU1Ky5Buam6748I+XG0MoDBX6wNRx6VFW3Lew9nKtXTpk43SQ71y7vcH5+JqY6AovAYoTmhoqGbPnq3Q0FBHhwLYDAUXlCsxMTFavXq1/vjjD/3xxx/av3+/srKy9NJLL2nWrFmODs8qZ2Ii9fU/OtnseE9/acN38Hbk6+WvFvW6adPeEzp1/qhLvbGiD1Ts8382WfpgrW2LLTda+afk6+XcV7owBnJU5HFQGvpAxT7/cedzrvCzZbHlRt9H5OTBzg3L5vj2wBio2GPAFPSBit0HDpyyfbElV7Yx59jenlLLENsf314YAxV7DJiK1wC5goKCNGzYMEeHASfk7u6uLl26aPv27Y4OpRAKLihX/vOf/+g///mPo8MoE7F7ftH4j5Lk7VfZ0aE4XML5o5KkQL9qDo7EvugDOSri+c/Ozpk24kqa6fs8O0gK9JWSr+VMG2aKn3dLTWpJdZ30ni6Mgesq4jgwBX0gR0U8/+mZ0hdbcv5rKkvy4Hd/5NxIulqAZXE6GmMgR0UcA6aiD+SoiH3gcqq0eJt5xRZz82C2MaeNqbdLAT6Wx+pIjIEcFXEMmIvXAJJ04cIF/frrrxo8eLCqVnXSD7owWdWqVTVw4EB16tRJnTp1UsOGDeXj46OMjAydO3dOkZGR2rVrlzZs2KDo6Ohij+Pu7q7FixdrxIgRuueee7R06VI7PovSUXBBuVK9enUNGTJEXbt2VZcuXbRgwQJ9//33jg7LJtKuuuabytSMq7p05ZyMxpy5Wn/e9oGOxO9W87pdVKdGU0eHZ1eu2Adc5fyvPygdP2/ePoG+UpCZNz/NNuZMq/PcIMnD3bx9ywNXHAOS64wDU7hiH3CV879ij3Q2xbx9LMmD6ZnS19ulJ/tJbgbz9i0PGAMVdwyYij5QcfvA9xE5RRdzWJIHL6fmtPVwb/P2Ky8YAxV3DJSE1wDFSUhI0KxZs9ShQwcKLhVY165d9eSTT+qee+6Rj0/RvxioW7euwsLCNHbsWEnS5s2bNW/ePH3//fdKT78+lUhuseWee+6RJH3++efauHGjzp8380uZMkTBBeXK9OnT8z3+5ptvHBSJbSWfi1Ol6q452e7i1TO1ePXMfMt6tb5DE0fMd1BEjuGqfcAVzn/yNemXPfZrLyFJ2nTI+aYWc9UxILnGODCFq/YBVzj/iZekjQft196R09LuWKmTk00txhi4rqKNAVPRB66raH3gcKK0+7j92tt9XOrZRGpa235t2gJj4LqKNgZKw2sAuKZq1arpvffe07333lvk+nPnzunKlSvy9PRUrVq15O5+/ZelvXv3Vu/evXXgwAGNHj1af/zxR6FiS1pamkaOHFmuii0SBZdy69y5c3rjjTe0dOlSxcfHq0aNGho5cqRmzZqlxx57TIsXL9bHH3+sRx991NGhSpKMRqMMBif8maGdxOz+WY3Chjo6DIcY1HWs+rQfpazsTMUm/qlv1r2hi5dPy9vTN2+bfcc2adongwvtm5mVruzsLP3+ZhlNBm9HrtoHXOH8bz8iZWbbt83Nh6RbWjjXr7tddQxIrjEOTOGqfcAVzv/mvyR7z6C/6ZDzFVwYAxV3DJiKPlBx+8CmQ45p09kKLoyBijsGSsNrALie22+/XZ988olq1aqVt+zChQv6/PPPtWrVKu3atUtnzpzJW+fr66v27durR48eGjt2rFq3bi1JatmypbZu3ao5c+aoQYMGGjlypKScYssdd9yh334zcW5iO6LgUg7t3btXAwcO1OnTp+Xv769WrVopPj5ec+fOVWxsrOLi4iRJ7du3L7MYwsPDtWHDBsXExKhBgwYlbhsREaFHH31US5cuVcOGTvbJ106Sz8YosEaDfMu2fDtNET//S/0f+0StbxlTaJ+lbwzUyQPrdM+MHarZsKOdIrW90GpN1LFZf0lSlxaD1Lphb016v5f+88MTmnb/V5Kkto1u0s+vXc6337lLpzTh3c4a3vMpu8dcFly1D1T085+VLW09Yv92z1+WDp6SWoXav21LueoYkCr+ODCVq/aBin7+UzOknTH2bzf2nHTyglTHiWaeYAxUzDFgDvpAxewDSVelP0/av90/T+a0be6UZI7EGKiYY8AUvAaAaxk9erQWLFiQd8XKhQsXNG3aNC1atEjXrl0rcp9r165p+/bt2r59u9555x3dfPPNmjNnjjp37ix3d3e98MILeduW52KLJLk5OgDkd+7cOQ0ZMkSnT5/WCy+8oMTEREVGRur06dOaOXOmfvjhB0VFRcnNzU1t2rRxdLiSpK+++kp79uxReHi4YmIc8Im7nEu/liIv38Jz1Ha/c4aq1W2rjV9OUvK5uHzr9q6er7g/V6nLsJec9k1lcVrV765+HR/QuqivFX18e5HbpGem6Z+LRqhNg966r980O0doe/SB6yra+Y89l/NB1xHsOW2FtRgD+VW0cWAK+sB1Fe38HzglpWU6pm3yoHOqaGPAVPSB6ypaH9gTl3OfPXvLNua07SwYA9dVtDFgCV4D5PL391evXr3k7+/v6FBgI/fee68++eSTvGLLzz//rNatW+vDDz8stthSlI0bN6p79+566aWXlJV1/Qq3rKwsjRgxotwWWyQKLuXOxIkTdeLECT377LOaPXu2AgIC8ta99NJLatGihTIzM9WsWTP5+vqWcCT7mTNnjsaOHau4uDiKLkWI3fOr6rcbVGi5u4eXBj7+uTLTr2nVR4/IaMx5l37pzDFt/nqyatQPU5fhL9k7XLu4v/8/5Obmrs9//0eR6//z/XilZ6Rq8j0L7RtYGaEP5FeRzv8JB04TeuKC49o2F2OgsIo0DkxBH8ivIp1/8qBpGAP5VaQxYCr6QH4VqQ84NA+WrynrS8QYyK8ijQFL8RpAkho0aKAFCxaUOrsOnEOrVq302Wefyc0tp+Tw73//W8OHD1diYqLFx2zXrl2+e7u4u7vnTTdWXlFwKUeio6P17bffqmbNmpo5c2ah9QaDQZ06dZKUfzqxkydPauLEierZs6f8/PxkMBgUGxtrs5iioqJK/NuzZ48mTJig3r17u3zRJe1KUqFlZ2J3qVajzkVuX7NBzpvHk9FrtXfV+zJmZ2vlh6OVnZWhgeM/l7uHZxlH7Bih1ZuoT/tRijy8WvuObcq3bunmd7XjwHL9c/SP8vFyouvj/x99oHQV6fw78su+08mO+1V5SRgDpqlI46Ag+kDpKtL5d2QePHlBMjrgV+WlYQyUriKNgaLQB0pXkfqAI/NgeS08MwZKV5HGgKV4DSDlXK1w+fLlfFcwwDm5u7tr4cKF8vb2liR9/PHHmjRpUl4h3ZLjLV68WPfcc48kKSMjI6+fvPrqq2rRooVtAi8DFFzKkcWLFys7O1sPPPCA/PyK/h9Kbqe9seBy5MgRffvttwoKCtItt9xi05huv/12hYWFlfrXsWNHbd68WZIUFxencePG2TQOZxAT9YsWPtdEly+eyluWnZ0lg8FdBkPxd7buOvwl1WzQUZu/naINXz6jU39tUrcRM1S9bls7RO049/Z7SW4GN32+8uW8ZVFH1mnBiima/sB3ql21geOCsxB9wHQV5fyfSXZc20ajdC7Fce0XhTFgnooyDm5EHzBdRTn/jsyDV9Oly2mOa78ojAHTVZQxUBB9wHQVoQ8YjdIZB74fO5NS/grPjAHTVYQxYC1eAxw8eFBdunTRwYMHHR0KrDRx4kR16dJFUs55nThxosXHKlhsSUtL07BhwzR37lxJko+Pjz755BPrgy4jBqOlZSbYXPfu3bVjxw79/PPPGjJkSJHb3HrrrVq5cqVWrFih2267TZKUnZ2dd6nWwoUL9cgjj5h0s/uShIeHa8OGDRo8eHCxxZ+CDh48qP3790uS/vWvf2nq1KkWt59r9OjR+vzzz/XSSy9p1qxZVh+vc+fOZl/G5u7pq7/NOlzqdmlXkrTu8wkKbX6z2vZ7XJJ08sAGZaReVsOw20vc99yJP/XNPzopKzNdtRp31chXtsrNzb3EfUqydHpTZWWYPi9iQV4evvroqdKfsy0lXojVU+920QMDXtEdvWx3Q7xx/22q9EzLXwvJ+fqAtee/IHv0B1uff1ucd1MMmLRalWsX/auKZwdJgSXM/BjoI7m5SdnZUnJqye0kX5PmFjE96dr3h+lCXKQZEVvG2caARB68kbXjwdTzL5WfPkAetF8eHPryPnn7Vylyna3yYHE5UJJ+eaO7rl4s+7tVO1setMUYsHceLKscKJEHbYE8WDSDu6fufL342R3skQd/mNZI2VnpJkZsGVcdA+TB6+z1WtjyNbDXeyHkN3r0aLO2T0hI0KeffqoxY8YoODjYpH0WLlxofmDlzN8eeUb+AYG6cjlZSz/7d6HH5VF2drYSEhKKXOfu7q6YmBjVrVtX2dnZ6tmzp3bs2GFRO0UVW+644w799ttv8vHxUVRUlJo3by5J6tmzp7Zt21bssYKDg/O+MzdX7dq1FRERYdG+HhbthTJx/HjOnT+LK5SkpaXlddYbr3CxtOOYYt68eSYVbnbt2qX+/ftLkmbMmGGTYktZSExMVHx8vFn7eHibVnDy9g9S8x73ac/q9/PeWJ6IXqsuQ18sdV8v30C5e3grKzNd9dsNsupLRkk6lXBKmWmW38nbx9O+l+ympl/VKwvvUI9Ww2z+xjLh1CmlZlh3V3Nn6wPWnv+Cyro/lMX5t8V5N0VGevEfbgN9pSATXjo3N9O2K8qZ0wk6bWZOs4SzjQGJPHgja8eDqedfKj99gDxovzyYlVX83Ib2yIMJp+J1+QJ5sCBbjAF75sGyzIESedAWyINFM5RyjuyRB0+ejJMxu2yn4nHVMUAevM4er4WtXwN7vRdCflevmveap6am5v3X1H3N/V6vPMr+/6mxsrOyFB8fX+ixsxkyZIjq1q0rSVq+fHmZFFuknH7y2muvadGiRZKkJ598ssSCS3EForJGwaUcuXLliqTryaagL7/8UpcuXVK1atUUGhpqz9BKFBkZqQEDBigpKUkzZszQK6+84uiQilW7dm2z93H3LOEnSQXUbd1PKz98SOnXUuTlW0lZGany8PIpcR+j0ajVH49RZkaqqoa20q7ls9W8+yhVDW1pdqy5QoJDrP5ltz1t2ve9jiXsUfy5Q1q/59tC6z95Plo1q9Sz6NjBISE2ucLFVOWhD1h7/gsq6/5QFuffFufdJFnFt5FcSvPmXuFSlCqBfvKww/8PnG0MSOTBG1k7Hsw5/1L56APkQfvlwez0K5JqFLnOVnmwpONUqxKgyr7kwYJsMQbsmQfLMgdK5EFbIA8WLzP9qjyKucdEWefBzPRrCgk2/zOuuVx1DJAHr7PHa2Hr18BunwmRj6mz5OTy8fHJ+6+p+5an70Qt5fb/N4F3c3dXaGhoocflUUlXuIwZMybv3/PmzbPo+KUVW3J99913euedd1StWjXdfffdeuKJJ3T58uUij2ntFS6WouBSjtSuXVspKSmKiIhQ5875byZ34sQJvfhizi9C2rVr54jwirVo0SJdvHix3BdbJFl0KVhapjSl8P/ri+Th5aPQluE6vvc3VavTRlWCS7+B097V83Ri/xp1v/NVNes2Uotf6qCVH4226vLpQ4cPy9uK0Z2VLq171/L9zTWg04Ma0OnBMjn24UOH5e5l3TGcrQ9Ye/4LKuv+UBbn3xbn3RRL/pA2F3NlfXHTPuSa8becXzImp0ozlprftqe79OeuDXK3w93YnG0MSOTBG1k7Hsw5/1L56APkQfvlwU83SntPFL2urPNgFX8p9sgB83e0gLPlQVuMAXvmwbLMgRJ50BbIg8V753fp+Lmi15V1Hmwc4quTJ8t+WkVXHQPkwevs8VrY+jWwVw5Afubei2X//v369NNPddttt6l169Ym7WOLWw442uvvL1by5SsKrh2skydPFnpcHl25ckUBAQFFruvRo4ck6dy5c1q5cqXZxza12JK7bsmSJXr88cfl7e2tjh07auPGjUUe9/Dhw/L39zc7HmvZ4WsamCp3Sq7XX39dhw4dylu+fft29e3bV0lJSZLyTydWVsaOHauZM2eqSpWi5+S+0dy5c7Vs2bJyX2yxl0Zhw3R01zLFRK1Qw7Ci78WTK+n0UW35ZopqNuykLsNeVJWQ5upx10ydPvqHdi1/y04Rw9boA66jTjUHtl1Fdim2WIIxAPqA66hT1XFt13Ng26VhDIA+4DocmYvIgwCcXbNmzbRlyxY1a9bM0aHAQnXr1lWNGjlXvEdERMjc28WbU2zJtXPnzrx/d+rUyYKoy1Y5/arGNU2dOlVVqlTRiRMn1Lp1a7Vt21ZNmjRRjx491LJlS/Xu3VuSfQouDz74oKZPn67KlSuXuq2bm5uGDRtmk3a3bNmi6tWr5/198803knKKOjcu37Jli03aKwsNw4Yobt/vunLxlPwCi55iQ5KM2dla9eFoZWdnauDjn8vNPefnNx0HP6vgpj20Y+kMnY+PtlfYsCH6gOtoUN2BbRfftRyOMQD6gOsgDxaNMQD6gOtwaB50YNulYQwAMIWnp6eqVq0qT09PR4cCC904E1NkZKRZ+1pSbJFy7iWeyx7fk5uLgks5Uq9ePW3atEm33XabfHx8dPz4cdWoUUMLFizQsmXL8i7LK48dyVYyMjJ0/vz5vL+0tDRJ0rVr1/Itz8jIcHCkxfOtVE1VQ1vJr3KtEreL/HWuTh3arO53vqpqda5fNmlwc9OAcQtlMLj9/xvPsr0BImyPPuA6ald23Afdbo0d064pGAOgD7iOJrWkakXPLFCm3N2kzg3s366pGAOgD7iOtnUlPwdMW+TnldN2ecUYAGCKuLg4Pfnkk4qLi3N0KLBQYGBg3r8TExNN3s/SYosknT59Ou/flSpVMiNa+6DgUs60bt1aK1asUEpKipKTk7Vt2zaNHTtWFy9eVEJCgjw8PNSqVStHh1lmwsPDZTQaS/0LDw93dKglatHrQTXudEex6y/EH9C2Jf9Q7Sbd1fG25wqtrxLcTD3umqXTx3Yq4ufZZRgpygp9wHX0dsCVz01q5RR7yjPGAOgDrsHNIPVqav9229eVKtnvXsYWYQyAPuAavDykro3s327XRjltl2eMAQClSUlJ0bp165SSkuLoUGChpUuXqk6dOmrSpIm+/PJLk/erXLmy2rZtK8m8YosknTlzRs2bN1f9+vU1duxYi+IuS+X8f8/ItW/fPklSixYt5O3tXWj9kiVLJF2/Kfyvv/6qGjVqqEGDBurcubP9AoUkqU2fR0tcXzW0pZ767FqJ23S87Vl1vO1ZW4YFO6IPuI4O9aQVe6SLV+zXZt+W9mvLUowB0AdcR7fG0ur90tV0+7RnkBROHoQToA+4jpuaS1sOSxl2ugjD090xP/oxF2MAACq+1NRUxcfHm73fhQsX1LdvX/3666+aNm2aycUWScrKysp3//PyhoKLk8gtuBQ3ndjdd9+d7/GTTz4pSXr44Ye1cOHCMo0NFd/RU3v0zpLHdDUtRbWC6mvKvV8oKKCGBkw2qGHtthp72xvq1vI2SdL7P07UtuifdPricX303D41rN0m7zjPf9BHx07t0UO3vqo7ej3lqKcD2JSHu3Rvd2neGvu016mB1CrUPm3hOnPy4JSPBupiSqIMBjf5+VTShOHvqUloB0nkQVRM/t7SiM7Sl1vt0154S6leNfu0hevMyYMPvN5AXh4+8vTwkSTd2/dFhXfImS6CPIiKqFqANLid9NNu+7R3W3upevmbQaXCMzUPXr6WpOfmh+ftl5ZxVQkXjul/r5xRoF9V8mApNuz5n6KOrNUTw97Ra4tH6fjpaHl7+qlqpdp6+s4PVLtqA0eHCMBGTp8+rc6dOys7O9vRodgUBRcnUVrBxWg02jMcuJi3vh2t50d+piahHfTbH5/qo+WT9cKohZKk/zy1Vb7e1ydvv6ndXRoZ/oImzetd6Dhvj1+nN78ZbVKbz80P1+R7FvJmqoIo6QvoiqBZbalnU2nrYdP3Sb6W/7+mqOST86Um7M+cPPiPB79TgG+QJGnLnz9qzv/GaP4zOTcPJA+6roqeBzs1kKLipD9Pmr6PJXmwRqWcLzVhf+bkQUn6x0NL8v3wJhd50HVV9DwY3kLae0KKPWf6PpbkwQbVpVuamxcbbMPUPBjgG6QPn43K2+9/69/W3mMbFOhXVRJ5sDRb9/+o/p0ekiTd1m2curYYLIPBoB+3/FfvLBmn2eNWOjhCALZU0YotEgUXp5FbcGnXjk+YsK8j8bvl6x2Q92FoQOeH9dHy55WVlVnk9u0a3WyXuFKuXtS4uW2VnpGq6pXrKCMrTYnnj2lg59F65q4P7RIDTFfSF9AVxR0dpdOXpKNnTNt+rulXy0qSvNylMTfn/JIc9mVuHszt65J0JfWSDIayuWUeedC5VPQ8aDDkXO3339VSQpJp+5ibB/29pbG3lP97FlRE5uZBeyEPOpeKngfd3KTRN0n/WWn6VLPm5sEq/jltuHE3XruzJg/+HvGZHhn0WpnE5Yx5sKSYn/rbf7U/doueH/mZPD288q6clKSW9bpr6aZ/Oy5wlIlatWppypQpqlWrlqNDAWyGjytOYutWO83RABSQcCFGMQn79PjcDnnLUtOv6HxKguOCklTJr4r6drhP/r5Buq/fNO3863d9t252uX1T6eqK+wLaGT8gFMfLQ3osXPponXTsrG2P7e0hPRouNaxh2+PCNJbkwdlfP6Q9R9dJkl5/1MxvU0xEHnQurpAH/b2lJ/tK89aaXnQxVYC3NL6vVLuybY8L01iSB9/46n5lG7PVol43jR38LwUF2P5/YuRB5+IKeTDIT5rQT5q/Vjp/2bbHruovPdkvpw3Yn6Wfi6Njtyn5ynl1bzmkTOJyxjxYUswRf61Uq/o95enhVWi/Hze/q+6thjogYpSl6tWra/To0Y4OA7ApCi4AStW6QS+9NnZF3uO7ZpTNt75vffuIjsTnTHx86vwRvfTJbfJwz3mjNXPMz6oZVDff9kdORenOmydJkg6f3KXGIR3KJC7YRlFfQDvjB4SS+HjmfCG4dJe07YhtjlkrUHqwl1Snqm2OB8uYmwen3LtIkrQy4nN9tGKyXh/7i0ntkAcrNlfIg5V8pb/3l777I2eKMVuoV016sKdUI9A2x4NlzMmDc5/YqJpV6ikzK0Of/TZdb377MHkQklwjD1avJE0cIC3eJh1KtM0xm9WW7u8hVabY4lCWfC7+beenGtDpIbm7m/71m7PnwUnzblLc6QNFrps/abdqBtUtNuat+39UrzZ/K7TfV2teV/y5w3r6zg/KLG44xqVLl7Rt2zb16NFDlSvzyxpUDBRcAJQouGojnUm6/o3JldRkpaVfVbVKwTZva/I9n+X925S5ao+disp7Y3b45C71bD3c5jHBdor7Arq8fUCwlpeHdE83qX096ZvtUtJVy45jMEh9W0qD2kme7raNEeaxJg8O7Pyw/vP9eCVfOa9A/9Lv8k0erNhcJQ/6eedMeRN1XPrfTulKmmXHcXfLuV9Ln5Y5/4bjmJsHa1apJ0nycPfUiJue0SNvNjO5LfJgxeYqebCyn/RE35wf4CyLlNIsnH3P20Ma3lHq0STnvSEcx5L3g9fSr2jDnm/13sQ/zGrL2fPgO09uKnWbomI2Go2K+Ot3PXb7m/m2/d/6t7X5zx/05rjV8vGi6ljRnDx5UpMmTdKSJUsouKDC4KMLgBI1Ce0gN4Obdh9ZK0n6ees83dLhHrN+oVMWzl2Kl8HgpmqBOW9wjyXuVcPgtg6NCaYZ2Plh7TmyTslXzksq/Gbb2T9g52oRLE0bmnNPg7pmXJ3i55Xz5eK0odLQMIot5YE5efBKarLOXTqV93jzvqUK9K+mSn62v0SJPOi8XCUPdqgvTR8m3dk552o9UwX6SLe2lf4xXOrfmmJLeWBOHryWfkWXryXlPV63+2s1CQkrk7jIg87LFfKgwSD1bJqTy4Z2yJkSzFRV/XP2+cfwnGNQbHE8Sz4Xb9zzPzUMbqd6NVuUWVzOmAeLi/ngiT9Ur1ZL+XoH5G27ZMNcrYv6WrMfW5VvWkIAKM+4wgVAqaaM+kJvf/eIrqReUki1Jpp635fFbvvuDxO0LXqZLqQkasqH/eXrHaDPp9pobqUbHInfne+DmL93oH7aOk/P3v2xzduCda6kJuta2mVVrxwiKf8X0EW92b6//3RHhmtTXh5St8Y5fycvSLHnpBMXpPiL0rV0KduYU1CpGZgzZVjdqlLTWtwQujwyNQ9eSb2kVxfdqbSMa3IzuKmyfw3NfGS5DGXwTQl50Hm4ch709ZJuai71biYdPy8d//88eCpJSsvIyYPeHjkFmTpVc6YPa1KLIkt5ZGoeTEo5rX8uulPZ2Vkyyqjgqo30wqhFZRITedB5uHIeDPCR+rXO+UFNzNmcXHjigpSYdP3KF28PqXZQznvB+tVy7tvnRh4sd8z5XCxJv+38RIO6ji3TmJwxDxYXc6B/NfVsfUfe8rNJJ/Xh8ucUXLWRnv+gjyTJy8Nb703cYeeIAcA8fKUDoFSNQtpp3jO7TNp24oj3NXHE+1a3OeeJ9SWu795qiLq3un7jQVPjg/2V9AW0M35AsFSdqtyHxZmZmgdrBtXVf82cNqI45MGKgzyY8+vsBtVz/uCcTM2DwdUa6YNJu23SJnmw4iAP5hRQGtfK+YNzMudzsWTa1FqlqYh5sLiYH327td4avy5veY2gOlr1ltHu8QGAtSi4ALBYlYBaeub9Xhoz+F/q1vK2Urd//oM+On0hVu0a32KH6FBelPQFtDN+QABuRB6EKciDqMjIgzAFeRAVGXnQNhY8v9/RIcABfHx81LJlS/n4+Dg6FMBmKLgAsNh3rySatf3bN/xaBQAqAvIgAFdHHgTg6siDgOUaN26sH374wdFhADbFrKAAAAAAAAAAAABWouACAAAAAAAAALCr6OhotWvXTtHR0Y4OBbAZCi4AAAAAAAAAALsyGo3KyMiQ0Wh0dCiAzRiM9GigREajlJ7l6CjM4+UuGQyW7280StkZtovHkdw8rXstJOfrA9ae/4KcsT/Y4rzjOmcbAxJ58EbWjgdXPP8FOWN/IA/alrONA1uMAWfs98UhD1rPGfsDedB2XHUMOGO/L44t8qCzvRbkAMc4ePCgWdvv379fd911l5YsWaLWrVubtE+LFi0sCa1cef39xUq+fEWBAf6aNuH+Qo/LI6PRqKtXr9rseG99+I2Sr1xVoL+fJj8+qtBjW/Dz85PBAYnAw+4tAk7GYJC8XWykGAySu5ejoyg/XLEP3Ij+AFccA/T761zx/BdEf4ArjgP6/XWueP4Loj+4NlcdA/T763gtABgMBvn7+9vseF7ePvLKyJKXt4/8/f0LPXZmTCkGAAAAAAAAAABgJRf8jQIAAAAAAAAAwJEaN26sn376SXXr1nV0KIDNUHABAAAAAAAAANiVj4+PmjZt6ugwAJtiSjEAAAAAAAAAgF3Fx8dr+vTpio+Pd3QogM1QcAEAAAAAAAAA2FVSUpK+//57JSUlOToUwGYouAAAAAAAAAAAAFiJggsAAAAAAAAAAICVKLgAAAAAAAAAAABYycPRAQAAAAAAAAAAnFuLFi3M2r5y5cp65ZVX1LNnTwUHB5dRVIB9UXABAAAAAAAAANhVcHCwZsyY4egwAJtiSjEAAAAAAAAAAAArUXABAAAAAAAAAACwEgUXAAAAAAAAAAAAK1FwAQAAAAAAAAAAsBIFFwAAAAAAAAAAACtRcAEAAAAAAAAAALASBRcAAAAAAAAAAAArUXABAAAAAAAAAACwEgUXAAAAAAAAAAAAK1FwAQAAAAAAAAAAsBIFFwAAAAAAAAAAACtRcAEAAAAAAAAAALASBRcAAAAAAAAAAAArUXABAAAAAAAAAACwEgUXAAAAAAAAAAAAK1FwAQAAAAAAAAAAsBIFFwAAAAAAAAAAACtRcAEAAAAAAAAAALASBRcAAAAAAAAAAAArUXABAAAAAAAAAACwEgUXG6pcubIMBoMuXryYt8xoNCowMFAGg0FJSUn5ti9pHQAAAAAAAAAAcB4UXGwkNjZWycnJCg4OVpUqVfKWHz16VCkpKapfv76CgoLy7VPSOldkNBq1ZcsWTZkyRT179lTVqlXl6empWrVqaciQIfrpp58cHSIAAAAAAAAAAEXycHQAFUVcXJyaN2+u7t2751u+Z88eSVL79u0L7VPSOle0du1a9e/fX5JkMBjUuHFjNWrUSEeOHNGKFSu0YsUKjRkzRgsWLJDBYHBwtAAAAAAAAAAAXMcVLjZy88036+DBg1q4cGG+5VFRUZKkDh06FNqnpHWuyGg0qlGjRnrvvfd05swZHT58WBERETp//rzeeecdGQwGffrpp5o/f76jQwUAAAAAAAAAIB8KLmWMK1xM17VrVx08eFBPPfWUqlevnrfc3d1dzzzzjMaNGydJ+uijjxwVIgAAAAAAAAAARXKagktsbKzefvttDRo0SI0aNZKfn5/8/PwUFhamuXPnKjMzs9A+tWvXlsFgUGxsrCIjI3X//fcrJCRE/v7+CgsL0/fff19im0ajUUuXLtWIESMUEhIib29vhYaGqn///nr//feVkZGRt22dOnVkMBh09OjRfMfIvYqlqKJKcessea6OZjQarT5GYGCgPD09i11/6623SpL++usvq9sCAAAAAAAAAMCWnKbgMmPGDE2ePFlbtmyRh4eH2rRpo+rVqysqKkrPPfecxowZk2/7M2fO6PTp0woMDNQPP/ygrl27as2aNQoNDZW3t7eioqJ01113acOGDUW2d+bMGfXt21cjRozQ0qVL5eXlpQ4dOsjd3V1r1qzR1KlT5e7uLkk6f/684uPjFRAQoEaNGuUd4+LFizpx4oQqVaqUb3lp68x9rmUhPDw8r1hVmoiICIWFhSkmJqZMY0pLS5Mk+fn5lWk7AAAAAAAAAACYy2kKLoMGDVJkZKSSk5N16NAh/fHHH4qLi9PWrVtVrVo1ffHFFzp8+HDe9rlXj6SmpmrWrFn6+uuvlZCQoJ07dyo+Pl6DBw+WJH366aeF2rp69apuv/12rV+/XuHh4dq3b59iY2O1Y8cOxcXFafv27Zo0aZLc3NzytdWuXbt8N3Mvbnlp68x9ro721Vdfac+ePQoPDy/Tost3330nSbrlllvKrA0AAAAAAAAAACzhNAWXUaNGKSwsrFBxokePHurbt68kaf/+/XnLc++PkpGRoW+++UZ333133r6+vr4aP368JOn48eOF2nr22WcVERGhm266SStXrlSbNm3yre/WrZteffXVQm116NAh33aWTCdmyXN1tDlz5mjs2LGKi4srs6LLb7/9pqVLl8pgMGjy5Mk2Pz4AAAAAAAAAANbwcHQApkpNTdWyZcu0ceNGxcbGKiUlRdnZ2ZKkP//8U5Lk5eWVt31uEWTkyJEaOHBgoeOlp6dLkipXrpxv+YEDB7RgwQL5+Pho8eLFJd5TpGBbBYsnxRViSltn7nOVpJiYGD399NNat26dPDw8NHToUL3zzjuqVq1aqfGXJDo6WklJSaVuN2HCBP3111/avHmzwsPDtX79ejVs2NCqtnMdPXpU999/vyTp73//u3r06GHxsTp37qzExESbxAUAAAAAAAAA5vjbI8/IPyBQCYkJqlOnTqHHrqC8vwa1a9dWRESERfs6RcFl1apVeuSRRxQfH1/idjd+wZ9b0Bg1alSR20ZHR0uSmjVrlm/5F198oaysLI0ePVp169Y1Kb7irlax5AoXS55rSkqK+vTpo6pVq+rrr7/WtWvX9MILL2jIkCHasmVL3tRnlrj99tvN3icuLk7jxo3TqlWrLG43V2JiogYNGqQLFy5o4MCBevvtt60+XmmvLQAAAAAAAACUheysrLz/xsfHF3rsCirya1DuCy7bt2/XkCFDlJmZqfHjx2vUqFFq3bq1goKC5OHhoX379qldu3by8fFR06ZNJeXcXP3gwYOScm7+XpTcgkfBK0xWr14tSRoyZIhJ8WVkZOjAgQNyc3NT27Zti1xecEqy4tZZ8lwl6aOPPlJ8fLw2btyoevXqSZJCQ0PVq1cv/fTTT7rjjjtMei5FGTx4sMk3qT948GDeVGf9+vWzuM1cuUWWI0eOqFevXlq6dKlJVxyVpHbt2lbHBQAAAAAAAACWcHN3z/tvaGhooceuoLy/BtZ8h1zuCy7Tpk1Tenq65s6dq0mTJhVav2LFCklSmzZt5OGR83Sio6OVmZmpBg0aKCgoqMjj5hZcwsLC8i0/ceKEJKlRo0Ymxbd//35lZGSoefPm+QoT0dHRSk9PV4sWLQoVLIpbZ8lzlaTly5erd+/eecUWSerZs6caNGign3/+2aqCy7x589SgQYNSt9u1a5f69+8vSZoxY4amTp1qcZuSlJycrEGDBmnfvn3q2LGjVqxYYXLhpySWXgoGAAAAAAAAANZ6/f3FSr58RcG1g3Xy5MlCj11BRX4NLJ9ryg6ysrK0ceNGSdJDDz1U5PqvvvpKUv7CSe50YgWLKbkuXbqkmJgY+fr6qnnz5vnWXblyRZJ07do1k2Is7l4sxd3Xpbh1lj5XKaeA07p160L7tGrVKm/qtLIUGRmpAQMGKCkpSTNmzNArr7xi1fGuXr2qIUOGaOfOnWrZsqV+//33QvfaAQAAAAAAAACgPCnXBZf09PS8m8Xn3uT+RrNnz9a+ffskFV1wKeqG9NL1q1vatm0r9/+/XClX7n1btm3bZlKMxRVWzL1/i6XPVZIuXrxY5JU8VapU0YULF0x6HtZYtGiRLl68aJNiS3p6uv72t79p06ZNaty4sVavXq3q1avbKFIAAAAAAAAAAMpGuS64+Pr65t0cftasWcr6/5vnpKena/bs2Xr11VfzCiY3FldKu8KluPu3SNKIESMkSTNnztTatWvzrUtMTNScOXN0/PjxQscqWFgpqehT1DpLn2sug8FQaJnRaCy0zFRjx47VzJkzVaVKlVK3nTt3rpYtW2Z1sSUrK0v33XefVq5cqTp16mj16tUKCQmx6pgAAAAAAAAAANhDub+Hy8svv6zRo0dr3rx5+v7771W3bl0dPnxY165d03//+189/vjjcnNzU7t27fL2Ka3gsnv37mLXT5kyRb/88osiIyPVr18/BQcHKyQkRPHx8UpMTJSnp6f+/ve/522/d+9eSdZPKWbpc5VyrmS5ePFioXaSkpJUtWrVIl+D0jz44IMmb+vm5qZhw4ZZ1M6NvvvuO33//feSJC8vLz3wwAPFbrtkyRKrbl4EAAAAAAAAAIAtlfuCy8MPP6xr167lXVni4eGhoUOHaurUqUpNTZXRaFSzZs3k7+8vSTp58qQuXLigatWqqU6dOkUes6QrXAICArRp0ybNnTtXS5Ys0aFDh5SUlKTatWtrxIgRuvvuu+Xl5ZXX1vnz51W9evV8V2IUt7y0deY+11wtW7Ys8l4t0dHR6tOnT8kvcDmSlpaW9+9jx47p2LFjxW6bmppqj5AAAAAAAAAAADBJuS+4SNL48eM1fvz4ItcVnDarTp06pU6llVtwKY6fn5+mT5+u6dOnl7hdcW2VFENp8ZnzXHMNGTJE06ZN04kTJ/LuQbN9+3bFxsZq6NChJT6H8mT06NEaPXq0o8MAAAAAAAAAAMBs5foeLjDNuHHjFBwcrDvuuEPLly/XkiVLdN9996lr164aPny4o8MDAAAAAAAAAKDCo+BSAQQGBmrt2rUKDg7WqFGj9Oijj6pnz55avny53Nw4xQAAAAAAAAAAlDWnmFIMpWvcuLGWL1/u6DAAAAAAAAAAAHBJXP4AAAAAAAAAAABgJQouAAAAAAAAAAAAVqLgAgAAAAAAAAAAYCUKLgAAAAAAAAAAAFai4AIAAAAAAAAAAGAlCi4AAAAAAAAAAABWouACAAAAAAAAAABgJQouAAAAAAAAAAAAVqLgAgAAAAAAAAAAYCUKLgAAAAAAAAAAAFai4AIAAAAAAAAAAGAlCi4AAAAAAAAAAABWouACAAAAAAAAAABgJQouAAAAAAAAAAAAVqLgAgAAAAAAAAAAYCUKLgAAAAAAAAAAAFai4AIAAAAAAAAAAGAlCi4AAAAAAAAAAABWouACAAAAAAAAAABgJQouAAAAAAAAAAAAVqLgAgAAAAAAAAAAYCUKLgAAAAAAAAAAAFai4AIAAAAAAAAAAGAlCi4AAAAAAAAAAABWouACAAAAAAAAAABgJQouAAAAAAAAAAAAVqLgAgAAAAAAAAAAYCUKLgAAAAAAAAAAAFai4AIAAAAAAAAAAGAlCi4AAAAAAAAAAABWouACAAAAAAAAAABgJQouAAAAAAAAAAAAVqLgAgAAAAAAAAAAYCUKLgAAAAAAAAAAAFai4AIAAAAAAAAAAGAlCi4AAAAAAAAAAABWouACAAAAAAAAAABgJQouAAAAAAAAAAAAVqLgAgAAAAAAAAAAYCUKLgAAAAAAAAAAAFai4AIAAAAAAAAAAGAlCi4AAAAAAAAAAABWouBiQ5UrV5bBYNDFixfzlhmNRgUGBspgMCgpKSnf9iWtAwAAAAAAAAAAzoOCi43ExsYqOTlZwcHBqlKlSt7yo0ePKiUlRfXr11dQUFC+fUpa56p++uknPfHEE+rSpYtCQkLk5eWlwMBAde7cWf/85z916dIlR4cIAAAAAAAAAEAhHo4OoKKIi4tT8+bN1b1793zL9+zZI0lq3759oX1KWueq5s6dqw0bNsjLy0shISFq3769zpw5o8jISO3atUuffPKJ1q1bp8aNGzs6VAAAAAAAAAAA8nCFi43cfPPNOnjwoBYuXJhveVRUlCSpQ4cOhfYpaZ2rGjNmjNauXauUlBTFxMRo586dOn78uPbs2aM2bdroxIkTGjdunKPDBAAAAAAAAAAgH65wKWNc4WKehx56qMjlbdu21SeffKJu3bpp3bp1unTpkipXrmzn6AAAAAAAAAAAKJrTXOESGxurt99+W4MGDVKjRo3k5+cnPz8/hYWFae7cucrMzCy0T+3atWUwGBQbG6vIyEjdf//9CgkJkb+/v8LCwvT999+X2KbRaNTSpUs1YsQIhYSEyNvbW6Ghoerfv7/ef/99ZWRk5G1bp04dGQwGHT16NN8xcq9iKaqoUtw6S56roxmNxjJvo2XLlnltpaamlnl7AAAAAAAAAACYymkKLjNmzNDkyZO1ZcsWeXh4qE2bNqpevbqioqL03HPPacyYMfm2P3PmjE6fPq3AwED98MMP6tq1q9asWaPQ0FB5e3srKipKd911lzZs2FBke2fOnFHfvn01YsQILV26VF5eXurQoYPc3d21Zs0aTZ06Ve7u7pKk8+fPKz4+XgEBAWrUqFHeMS5evKgTJ06oUqVK+ZaXts7c51oWwsPD84pVpYmIiFBYWJhiYmLKNKYtW7ZIyilu1apVq0zbAgAAAAAAAADAHE5TcBk0aJAiIyOVnJysQ4cO6Y8//lBcXJy2bt2qatWq6YsvvtDhw4fzts+9eiQ1NVWzZs3S119/rYSEBO3cuVPx8fEaPHiwJOnTTz8t1NbVq1d1++23a/369QoPD9e+ffsUGxurHTt2KC4uTtu3b9ekSZPk5uaWr6127drJYDAUiqHg8tLWmftcHe2rr77Snj17FB4ebvOiS3Z2thISErRo0SKNHj1a7u7umjt3rk3bAAAAAAAAAADAWk5TcBk1apTCwsIKFSd69Oihvn37SpL279+ftzz3/igZGRn65ptvdPfdd+ft6+vrq/Hjx0uSjh8/XqitZ599VhEREbrpppu0cuVKtWnTJt/6bt266dVXXy3UVocOHfJtZ8l0YpY8V0ebM2eOxo4dq7i4OJsVXT744AMZDAa5u7srJCREDz/8sFq2bKl169bp7rvvtkHUAAAAAAAAAADYjoejAzBVamqqli1bpo0bNyo2NlYpKSnKzs6WJP3555+SJC8vr7ztc4sgI0eO1MCBAwsdLz09XZIK3Xj9wIEDWrBggXx8fLR48WJ5enqWGltuWwWLJ8UVYkpbZ+5zPXnypN58801FREQoKipK165dU0xMjBo0aFBq7KWJjo5WUlJSqdtNmDBBf/31lzZv3qzw8HCtX79eDRs2tLjd4OBg9erVS5mZmTpx4oQSEhK0Y8cOffHFF+rcubN8fX0tPjYAAAAAAAAAALbmFAWXVatW6ZFHHlF8fHyJ2934BX9uQWPUqFFFbhsdHS1JatasWb7lX3zxhbKysjR69GjVrVvXpPiKu1rFkitcLHmuR44c0bfffqtOnTrplltu0W+//WZS3Ka4/fbbzd4nLi5O48aN06pVqyxud/jw4Ro+fHje4z///FNPPfWUPv74Y8XExFh87M6dOysxMdHiuAAAAAAAAADAUn975Bn5BwQqITFBderUKfTYFZT316B27dqKiIiwaN9yX3DZvn27hgwZoszMTI0fP16jRo1S69atFRQUJA8PD+3bt0/t2rWTj4+PmjZtKklKS0vTwYMHJeXc/L0ouQWPgleYrF69WpI0ZMgQk+LLyMjQgQMH5ObmprZt2xa5vOCUZMWts+S5StLNN9+s06dPS5IWLlxo04LL4MGD5efnZ9K2Bw8ezJvqrF+/fjaLQZLatGmj5cuXq1GjRlq9erXWrVunPn36mH2cxMTEUotZAAAAAAAAAFAWsrOy8v4bHx9f6LErqMivQbkvuEybNk3p6emaO3euJk2aVGj9ihUrJOV8Ie/hkfN0oqOjlZmZqQYNGigoKKjI4+YWXMLCwvItP3HihCSpUaNGJsW3f/9+ZWRkqHnz5vkKE9HR0UpPT1eLFi0KFSyKW2fJc5UkN7eyuxXPvHnzTJqabNeuXerfv78kacaMGZo6darNYwkICNAtt9yiJUuWKDIy0qKCS+3atW0eFwAAAAAAAACYws3dPe+/oaGhhR67gvL+GljzHXK5LrhkZWVp48aNkqSHHnqoyPVfffWVpPyFk9zpxAoWU3JdunRJMTEx8vX1VfPmzfOtu3LliiTp2rVrJsVY3L1YiruvS3HrLH2u5UFkZKQGDBigpKQkzZgxQ6+88kqZtZWRkSFJefe0MZell4IBAAAAAAAAgLVef3+xki9fUXDtYJ08ebLQY1dQkV+Dsrs0wgbS09PzvljPvcn9jWbPnq19+/ZJKrrgUtQN6aXrV7e0bdtW7v9fPcuVe9+Wbdu2mRRjcYUVc+/fYulzLQ8WLVqkixcvlnmx5cKFC9qwYYOk4s8tAAAAAAAAAACOUK4LLr6+vnk3h581a5ay/n8ut/T0dM2ePVuvvvpqXsHkxi/gS7vCpbj7t0jSiBEjJEkzZ87U2rVr861LTEzUnDlzdPz48ULHKlhYKanoU9Q6S59rWRk7dqxmzpypKlWqlLrt3LlztWzZMquLLREREXr55Zd15MiRQus2bdqkW2+9VUlJSWrbtq369u1rVVsAAAAAAAAAANhSuS64SNLLL78sKedeIqGhoerSpYtq1qypl19+We+9956ys7Pl5uamdu3a5e1TWsFl9+7dxa6fMmWKOnbsqAsXLqhfv34KCQlR586dFRwcrODgYL344osKDg7O237v3r2SrJ9SzNLnWlYefPBBTZ8+XZUrVy51Wzc3Nw0bNszqNi9fvqyZM2eqadOmqlWrljp37qywsDBVq1ZNN998syIiItS0aVP9+OOPha5MAgAAAAAAAADAkcp9weXhhx/W/Pnz1aRJE124cEEJCQkaOnSoIiMj1bFjRxmNRjVt2lT+/v6SpJMnT+rChQuqVq2a6tSpU+QxS7rCJSAgQJs2bdLMmTPVvn17JSUlKTo6Wr6+vhoxYoQWLVokLy+vvLbOnz+v6tWrKyQkJO8YxS0vbZ25z7Wiad++vf7zn/9o+PDhCgwM1KFDh7R//355enqqf//+ev/997V37141atTI0aECAAAAAAAAAJCPh6MDMMX48eM1fvz4ItcZjcZ8j+vUqVNoWUG5BZfi+Pn5afr06Zo+fXqJ2xXXVkkxlBafOc+1oqlSpYomTpyoiRMnOjoUAAAAAAAAAADM4hQFF5RuyZIlknLugyJJv/76q2rUqKEGDRqoc+fOjgwNAAAAAAAAAIAKj4JLBXH33Xfne/zkk09KypmmbOHChQ6ICAAAAAAAAAAA10HBpYKo6NONAQAAAAAAAABQnrk5OgAAAAAAAAAAAABnR8EFAAAAAAAAAADAShRcAAAAAAAAAAAArETBBQAAAAAAAAAAwEoUXAAAAAAAAAAAAKxEwQUAAAAAAAAAAMBKFFwAAAAAAAAAAACsRMEFAAAAAAAAAADAShRcAAAAAAAAAAAArETBBQAAAAAAAAAAwEoUXAAAAAAAAAAAAKxEwQUAAAAAAAAAAMBKFFwAAAAAAAAAAACsRMEFAAAAAAAAAADAShRcAAAAAAAAAAAArETBBQAAAAAAAAAAwEoUXAAAAAAAAAAAAKxEwQUAAAAAAAAAAMBKFFwAAAAAAAAAAACsRMEFAAAAAAAAAADAShRcAAAAAAAAAAAArETBBQAAAAAAAAAAwEoUXAAAAAAAAAAAAKxEwQUAAAAAAAAAAMBKFFwAAAAAAAAAAACsRMEFAAAAAAAAAADAShRcAAAAAAAAAAAArETBBQAAAAAAAAAAwEoUXAAAAAAAAAAAAKxEwQUAAAAAAAAAAMBKFFwAAAAAAAAAAACsRMEFAAAAAAAAAADAShRcAAAAAAAAAAAArETBBQAAAAAAAAAAwEoUXAAAAAAAAAAAAKxEwQUAAAAAAAAAAMBKFFwAAAAAAAAAAACsRMEFAAAAAAAAAADAShRcAAAAAAAAAAAArETBBQAAAAAAAAAAwEoUXAAAAAAAAAAAAKxEwQUAAAAAAAAAAMBKFFxspHLlyjIYDLp48WLeMqPRqMDAQBkMBiUlJeXbvqR1AAAAAAAAAADAuVBwsYHY2FglJycrODhYVapUyVt+9OhRpaSkqH79+goKCsq3T0nrcN1HH30kg8Egg8Gg8PBwR4cDAAAAAAAAAECRPBwdQEUQFxen5s2bq3v37vmW79mzR5LUvn37QvuUtA45EhMTNWXKFEeHAQAAAAAAAABAqSi42MDNN9+sgwcPFloeFRUlSerQoYNZ65Dj73//u5KTkzVkyBAtX77c0eEAAAAAAAAAAFAsphQrQ1zhYrmffvpJS5Ys0YQJE9SpUydHhwMAAAAAAAAAQImcouASGxurt99+W4MGDVKjRo3k5+cnPz8/hYWFae7cucrMzCy0T+3atWUwGBQbG6vIyEjdf//9CgkJkb+/v8LCwvT999+X2KbRaNTSpUs1YsQIhYSEyNvbW6Ghoerfv7/ef/99ZWRk5G1bp04dGQwGHT16NN8xcq9iKaqoUtw6S56roxmNRpseLyUlRRMmTFBISIhmzZpl02MDAAAAAAAAAFAWnKLgMmPGDE2ePFlbtmyRh4eH2rRpo+rVqysqKkrPPfecxowZk2/7M2fO6PTp0woMDNQPP/ygrl27as2aNQoNDZW3t7eioqJ01113acOGDUW2d+bMGfXt21cjRozQ0qVL5eXlpQ4dOsjd3V1r1qzR1KlT5e7uLkk6f/684uPjFRAQoEaNGuUd4+LFizpx4oQqVaqUb3lp68x9rmUhPDw8r1hVmoiICIWFhSkmJsZm7b/44os6efKk/v3vfyswMNBmxwUAAAAAAAAAoKw4RcFl0KBBioyMVHJysg4dOqQ//vhDcXFx2rp1q6pVq6YvvvhChw8fzts+9+qR1NRUzZo1S19//bUSEhK0c+dOxcfHa/DgwZKkTz/9tFBbV69e1e23367169crPDxc+/btU2xsrHbs2KG4uDht375dkyZNkpubW7622rVrJ4PBUCiGgstLW2fuc3W0r776Snv27FF4eLhNii7bt2/X/PnzNWjQIN199902iBAAAAAAAAAAgLLnFAWXUaNGKSwsrFBxokePHurbt68kaf/+/XnLc++PkpGRoW+++UZ333133r6+vr4aP368JOn48eOF2nr22WcVERGhm266SStXrlSbNm3yre/WrZteffXVQm116NAh33aWTCdmyXN1tDlz5mjs2LGKi4uzuuiSkZGhRx99VN7e3nr//fdtGCUAAAAAAAAAAGXLw9EBmCI1NVXLli3Txo0bFRsbq5SUFGVnZ0uS/vzzT0mSl5dX3va5RZCRI0dq4MCBhY6Xnp4uSapcuXK+5QcOHNCCBQvk4+OjxYsXy9PTs9TYctsqWDwprhBT2jpzn+uSJUv09ddfKyIiQmfPnlW9evV055136sUXX1RAQECp8ZckOjpaSUlJpW43YcIE/fXXX9q8ebPCw8O1fv16NWzY0Oz23njjDe3fv1+vvfZaoanWAAAAAAAAAAAoz8p9wWXVqlV65JFHFB8fX+J2N37Bn1vQGDVqVJHbRkdHS5KaNWuWb/kXX3yhrKwsjR49WnXr1jUpvuKuVrHkChdLnuvbb7+tevXq6fXXX1edOnW0e/du/fOf/9T69eu1adOmvKnPLHH77bebvU9cXJzGjRunVatWmbXfX3/9pddee00tW7bU5MmTzW7XVJ07d1ZiYmKZHR8AAAAAAAAAivO3R56Rf0CgEhITVKdOnUKPXUF5fw1q166tiIgIi/Yt1wWX7du3a8iQIcrMzNT48eM1atQotW7dWkFBQfLw8NC+ffvUrl07+fj4qGnTppKktLQ0HTx4UFLOzd+LklvwKHiFyerVqyVJQ4YMMSm+jIwMHThwQG5ubmrbtm2RywtOSVbcOkueqyT9/PPPqlGjRt7jW265RdWrV9eDDz6ozZs36+abbzbpuRRl8ODB8vPzM2nbgwcP5k111q9fP7PbeuKJJ5SWlqb58+ebdGWRpRITE0staAEAAAAAAABAWcjOysr7b3x8fKHHrqAivwbluuAybdo0paena+7cuZo0aVKh9StWrJAktWnTRh4eOU8lOjpamZmZatCggYKCgoo8bm7BJSwsLN/yEydOSJLJ01nt379fGRkZat68eb7CRHR0tNLT09WiRYtCBYvi1lnyXCXlK7bk6tSpkyRZ3TnnzZunBg0alLrdrl271L9/f0nSjBkzNHXqVLPbioyMlJubm+65555C6y5fvixJ2rp1q2rXri1JOnTokAIDA81uJ3d/AAAAAAAAALA3N3f3vP+GhoYWeuwKyvtrYM13yOW24JKVlaWNGzdKkh566KEi13/11VeS8hdOcqcTK1hMyXXp0iXFxMTI19dXzZs3z7fuypUrkqRr166ZFGNx92Ip7r4uxa2z9LkWJ/dYLVq0KHVba0VGRmrAgAFKSkrSjBkz9Morr1h8rOzsbJ0+fbrY9RkZGXnrc+9rYy5LLwUDAAAAAAAAAGu9/v5iJV++ouDawTp58mShx66gIr8Glt/go4ylp6fnfamee5P7G82ePVv79u2TVHTBpagb0kvXr25p27at3P+/cpYr974t27ZtMynG4gor5t6/xdLnWpT4+Hi9/PLLGjhwoEnFGWstWrRIFy9etLrYkpSUJKPRWORf7nFvueWWvGXFXb0EAAAAAAAAAIAjlNuCi6+vb97N4WfNmqWs/5/HLT09XbNnz9arr76aVzC5sbhS2hUuxd2/RZJGjBghSZo5c6bWrl2bb11iYqLmzJmj48ePFzpWwcJKSUWfotZZ+lwLunz5soYPHy5PT0999tlnxW5XmrFjx2rmzJmqUqVKqdvOnTtXy5Yts6rYAgAAAAAAAACAsyu3BRdJevnllyXl3EskNDRUXbp0Uc2aNfXyyy/rvffeU3Z2ttzc3NSuXbu8fUoruOzevbvY9VOmTFHHjh114cIF9evXTyEhIercubOCg4MVHBysF198UcHBwXnb7927V5L1U4pZ+lxvlJqaquHDhysmJkYrV65USEhIkduZ4sEHH9T06dNVuXLlUrd1c3PTsGHDLG4LAAAAAAAAAICKoFwXXB5++GHNnz9fTZo00YULF5SQkKChQ4cqMjJSHTt2lNFoVNOmTeXv7y9JOnnypC5cuKBq1aqpTp06RR6zpCtcAgICtGnTJs2cOVPt27dXUlKSoqOj5evrqxEjRmjRokXy8vLKa+v8+fOqXr16vuJGcctLW2fuc71RRkaGRo4cqT/++EO//vqrWrVqZfJrDAAAAAAAAAAArGcwGo1GRwcBy2VnZ+u+++7TsmXL9Msvv6hPnz6ODgkAAAAAAAAAUITcG8QHBvhr2oT7Cz12BRX5NfBwdACwzlNPPaVvv/1WL730knx9fbV9+/a8dXXq1Cn2Sh8AAAAAAAAAAGA75XpKMZTul19+kSS99tpr6tGjR76/BQsWODg6AAAAAAAAAABcA1e4OLnY2FhHhwAAAAAAAAAAgMvjChcAAAAAAAAAAAArUXABAAAAAAAAAACwEgUXAAAAAAAAAAAAK1FwAQAAAAAAAAAAsBIFFwAAAAAAAAAAACtRcAEAAAAAAAAAALASBRcAAAAAAAAAAAArUXABAAAAAAAAAACwEgUXAAAAAAAAAAAAK1FwAQAAAAAAAAAAsBIFFwAAAAAAAAAAACtRcAEAAAAAAAAAALASBRcAAAAAAAAAAAArUXABAAAAAAAAAACwEgUXAAAAAAAAAAAAK1FwAQAAAAAAAAAAsBIFFwAAAAAAAAAAACtRcAEAAAAAAAAAALASBRcAAAAAAAAAAAArUXABAAAAAAAAAACwEgUXAAAAAAAAAAAAK1FwAQAAAAAAAAAAsBIFFwAAAAAAAAAAACtRcAEAAAAAAAAAALASBRcAAAAAAAAAAAArUXABAAAAAAAAAACwEgUXAAAAAAAAAAAAK1FwAQAAAAAAAAAAsBIFFwAAAAAAAAAAACtRcAEAAAAAAAAAALASBRcAAAAAAAAAAAArUXABAAAAAAAAAACwEgUXAAAAAAAAAAAAK1FwAQAAAAAAAAAAsBIFF+AGb731lnr06KEqVaooKChIN910k1auXOnosAAAAAAAAACgSL/88os6dOggb29vNWjQQG+//bajQ7KrjRs3avjw4apfv74MBoNmzJjhsFgouAA3WLt2rcaMGaN169Zpx44d6tq1q26//XZt3brV0aEBAAAAAAAAQD4REREaPny4Bg4cqKioKM2YMUPTp0/Xf//7X0eHZjeXL19Wq1at9Oabb6p27doOjcXDoa0D5cyvv/6a7/GcOXP066+/6ocfflDPnj0dFBUAAAAAAAAAFDZ37lyFhYXpzTfflCS1bNlS+/fv1+zZszVhwgQZDAYHR1j2brvtNt12222SpClTpjg0Fq5wAUqQlZWllJQUVatWzdGhAAAAAAAAAEA+W7Zs0aBBg/ItGzRokE6ePKnjx487KCrXxRUuQAlmzZqllJQUPfTQQ44OBQAAAAAAAICTyDYadTQ2XsYCyzOzsvL+eyjmZKHHNwoKDFDNakEltpOQkFBoGq3cxwkJCWrQoIHFz8Fap89e0KXLVwstN/U1cHMzqHG9EKe6SoeCC1CMefPmafbs2Vq2bJlCQ0MdHQ4AAAAAAAAAJ+FmMOivmBPavHNfkeuvXkvVp9/9UuxjDw93TRx9p1UxOLpQkZmdrYVLflV2dsGyU47SXoP+vTqpSX3n+l6WKcWAIrz99tuaPHmyfvrpJw0YMMDR4QAAAAAAAABwMrfe3EW1qlexaN/B4d1KvbpFkoKDg5WYmJhv2enTpyXJ4TeQD61VXQN6d7Zo3zrBNdSnR5iNIyp7FFyAAl5++WW9+uqr+vXXX9W/f39HhwMAAAAAAADACXl6eGjkkD5ydzPva/imDULVo2Nrk7bt1auXfv/993zLfvvtN9WpU0f169c3q92ycHO39qoXUsusfTw93HXP7X3k7u585QvnixgoQ88884zeeustLVq0SM2aNVNiYqISExN16dIlR4cGAAAAAAAAwMmE1qqu/r07mby9j7eX7rotXG4mTgc2adIkRUZGaurUqTp48KAWLVqk9957T1OmTHH4lGKS5O7mppFDwuXlafrdTW7r0101TLi6J9fly5cVFRWlqKgopaenKzExUVFRUTpy5IgFEVvHYDQai55ADXBBxSWhhx9+WAsXLrRvMAAAAAAAAACcXnZ2tj786mcdjz9d6rb3Du2r9q2amHX8FStWaNq0aTp48KBq166tp556SpMnT7Y03DKxI+qAlv6+qdTtmjWso0fuHmxWsWj9+vXq06dPoeW33HKL1q9fb06YVqPgAgAAAAAAAABAGfq/9u41tqs6zQP4tx0ubangDrfq0EEjKC5WEVmjSJVIVFTAK2uMMeKqL1QwmUTx8gJJ9IUGMbuicVgYxFsU44I7CMZdL4k4NIZwEzAIglUuNQQZhJIihem+mIGdCgyXP7aKn8+rf87zP7/znNP2Tb/5nefbP2/Lf7zwZnY17j7od84587TcPGJIC3bVcpqamvLif72blWu+Puh3Skva53f/dmM6ntChBTs7trxSDI7Spm+35s/fbW/tNgAAAACAn7jO/9Qxw4YMPGi9Y3mHXHPZRS3YUcsqKirKDUMvTllp+4N+57rLB/2sw5ZE4AJHbfZ7f8pT/zkji1esbu1WAAAAAICfuH85+4yc2eu3B6yNvOqSlJWWtHBHLeuE8rJcf8XFB6z1++deOfvM01q4o2NP4HIcKioq2veOu9mzZ6e6ujodO3ZMly5dMnLkyHz55Zf7vjt37twMHjw4J554Yjp27Jhrrrkmq1cfPEBoaGjIxIkTc/7556dTp04pLS1N37598+ijj2b79gPv9njvvfcyZsyYnHvuuenSpUvat2+fnj175vbbb8/nn39+0Gu9/vrrufTSS9O5c+e0bds23bp1y9lnn53Ro0dnxYoVR/l0jo3a9d9kde2GNKUpPXtUtGovAAAAAMBPX1FRUa4fenE6/CBYGXhe3/Q+tUcrddWyzjrj1PQ/6/Rmxzqd0CEjjpPdPWa4HIf2hi3PPvtsRo8enZNPPjndu3fPypUr09DQkMrKyixcuDAzZszIfffdl4qKilRUVOyrV1RU5NNPP03Xrl2brVtXV5crrrgiy5YtS3FxcXr27JmysrKsWrUqjY2NOeuss/Lhhx+mS5cuzc5r06ZN9uzZk65du+akk05KktTW1mbbtm3p0KFD3n333Vx0UfM/qIcffjhPPPFEkqSioiI9evTId999l/Xr16ehoSETJkzI/fff/2M9wkP6w4w5WV27Ieef0yfXDz1wKgsAAAAA8EMrVtXm5Vn/kyTp+utOGTPqhrRr26aVu2o5O7/flX+f9ma2bqtPktx509XpdcpvWrmrY8MOl+PY2LFj8+KLL2bDhg1ZtGhR1q1bl/POOy/r1q3LXXfdlQcffDDTp0/Pxo0bm9W/+eabPP30083Wampqyk033ZRly5Zl+PDhqa2tzdq1a7N8+fJs3Lgxw4YNy/Lly3Pvvffu18dzzz2XdevWZdOmTVm6dGmWLl2azZs3Z/Lkyfn+++9z++235+9zv82bN2fChAlp06ZNZs2albq6uixYsCCrVq3K9u3bM2fOnAwYMOBHf34Hs3d3S3FxUQZfeG6r9QEAAAAA/Pz0Pf2UnFd1eoqLi3LTsEt/UWFLkpS0b5d/vXpwipJcdN5Zx03Yktjhclzau8Nl9OjRmTRpUrPaO++8k6uuuipJMmbMmDzzzDMHrJ9zzjlZsmTJvuNvv/12hg8fnqqqqixYsCDt2zcfblRfX58+ffqkrq4uX375ZX772wO/i/CHbr311rzyyiupqanJBRdckCSpqanJwIED069fvyxevPiI7v1QJr04M9vrGwpaY0dDQ/bs+UvatmmT0pKDD3kCAAAAADiQpjSlsXF32rVt29qttJpdjY1/C5uKWruVZk4oL82Y264/qnN/WdHZL8ydd96537H+/fsfVn3NmjXNjs+cOTNJctttt+0XtiRJeXl5LrvsskyfPj3z5s3LLbfc0qz+6aef5o033sjy5cuzdevW7N69O0ny9ddfJ0kWL168L3CprKxMkqxatSqLFi1q1nOhttc3ZFv9jmOyVuPu3Wms331M1gIAAAAAfnl2fr+rtVtoVcfb/QtcjmO9evXa71i3bt32fT7ttNMOWq+vr292fNmyZUmSadOmZdasWQe83ldffZUkWb9+fbPjDzzwQCZOnJh/tJlqy5Yt+z736NEjN954Y958880MGDAgF154YYYMGZKBAwfmkksuSWlp6UHXOZQTyo/+3MTuFgAAAACA41kh/0MWuBzHOnTosN+xva8bO5z639u6dWuS5LPPPjvkdRsa/v+VXa+99lqeeuqplJaW5sknn8zll1+eysrKlJaWpqioKOPGjctjjz2WxsbGZmu8/PLLqaqqytSpUzN//vzMnz8/SdKxY8fcc889GT9+/AF32hzK0W4FS/46u+X3r/4xxcVF+d2dI/PrTicc9VoAAAAAABxfBC4clvLy8iTJ7NmzM2zYsMM+76WXXkqSTJw4MXffffd+9W+//faA55WUlGTcuHEZN25cVq9enY8++ihz5szJ7Nmz88QTT2Tr1q15/vnnj/g+CpnhsuNvQdKvin+V37/yx6NaAwAAAACAny4zXPjR9e3bN0uWLMmKFSuOKHBZu3ZtkmTQoEEHrNfU1Bxyjd69e6d3796544478tZbb+W6667LtGnTMmnSpLRpc2S/wsdihovZLQAAAAAA/JDAhcNyww035NVXX82UKVMyZsyYlJWVHdZ5e+et1NXVpaqqqlntgw8+yOLFi4+oj+rq6iTJrl27smXLlmYzaQ7H0b5/z+wWAAAAAIDjnxku/OiuvfbaDBo0KB9//HGuvPLKTJ48OX369NlX3717d+bNm5cpU6bkhRde2Ddfpbq6OkuXLs0jjzySqqqqnHTSSUmSefPm5eabb05JSUl27tzZ7Frvv/9+5s6dm1GjRjULaXbu3JnHH388SVJZWZmuXbse8X0czVYws1sAAAAAADiUoqampqbWboJja+/g+4P9aI+2vmnTpowYMSKffPJJkuTUU09N9+7dU19fny+++GJfcNLQ0JCSkpIkybp169K/f/9s3rw5JSUlOeOMM7Jjx4588cUX6du3b4YOHZqJEyfm0Ucfzfjx45Nk32vDkqRz58455ZRTsmfPnqxZsybbt29Pu3btMnPmzFx99dVH+4iOyB9mzMnq2g05/5w+uX7oxS1yTQAAAAAAfl6KW7sBfj66deuWefPmZerUqRkyZEi2bduWhQsXZsuWLenXr18eeuihLFiwYF/Ykvx1J0pNTU1GjhyZsrKyrFy5MkkyduzY1NTUpLy8fL/rVFdXZ9KkSRkxYkQ6deqUlStX5rPPPkvnzp0zatSoLFq0qMXCltr132R17YYUFxdl8IXntsg1AQAAAAD4+bHDBf6BtV9vzH//75/S8zfd7W4BAAAAAOCgBC5wCH9pakpj4+60b9e2tVsBAAAAAOAnSuACAAAAAABQIDNcAAAAAAAACiRwAQAAAAAAKJDABQAAAAAAoEACFwAAAAAAgAIJXAAAAAAAAAokcAEAAAAAACiQwAUAAAAAAKBAAhcAAAAAAIACCVwAAAAAAAAKJHABAAAAAAAokMAFAAAAAACgQAIXAAAAAACAAglcAAAAAAAACiRwAQAAAAAAKJDABQAAAAAAoEACFwAAAAAAgAIJXAAAAAAAAAokcAEAAAAAACiQwAUAAAAAAKBAAhcAAAAAAIACCVwAAAAAAAAKJHABAAAAAAAokMAFAAAAAACgQAIXAAAAAACAAglcAAAAAAAACiRwAQAAAAAAKJDABQAAAAAAoEACFwAAAAAAgAIJXAAAAAAAAAokcAEAAAAAACiQwAUAAAAAAKBAAhcAAAAAAIACCVwAAAAAAAAKJHABAAAAAAAokMAFAAAAAACgQAIXAAAAAACAAglcAAAAAAAACiRwAQAAAAAAKJDABQAAAAAAoED/B7q+xbCVdmzJAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "trans_circs[0].draw('mpl')" ] }, { "cell_type": "markdown", "id": "1c601fb7", "metadata": {}, "source": [ "We now need to set the starting point of the VQE iterations. This means selecting a set of initial parameters to pass to the parameterized circuits. Here we select ones close to a solution vector:" ] }, { "cell_type": "code", "execution_count": 11, "id": "2fbb2377", "metadata": {}, "outputs": [], "source": [ "num_params = ansatz.num_parameters\n", "params = np.array([1.22253725, 0.39053752, 0.21462153, 5.48308027,\n", " 2.06984514, 3.65227416, 4.01911194, 0.35749589])\n", "params += 0.05*(np.random.random(params.shape[0])-0.5)" ] }, { "cell_type": "markdown", "id": "ebd97503", "metadata": {}, "source": [ "Now we are in a position to actually calibrate the M3 mitigator and run the algorithm:" ] }, { "cell_type": "code", "execution_count": 12, "id": "c9d6bc03", "metadata": {}, "outputs": [], "source": [ "mit = mthree.M3Mitigation(backend)\n", "mit.cals_from_system([0,1])" ] }, { "cell_type": "markdown", "id": "f8b9d4e5", "metadata": {}, "source": [ "The function used to actually compute the cost function (energy) is given as:" ] }, { "cell_type": "code", "execution_count": 13, "id": "1310dff0", "metadata": {}, "outputs": [], "source": [ "def vqe_func(params, *args):\n", " # Attach parameters to the transpiled circuit variables\n", " bound_circs = [circ.bind_parameters(params) for circ in trans_circs]\n", " # Submit the job and get the resultant counts back\n", " counts = backend.run(bound_circs, shots=4096).result().get_counts()\n", " # Apply mitigation to get quasi-probabilities\n", " quasis = mit.apply_correction(counts, [0,1])\n", " # Evaluate the coefficients times each expectation value obtained from quasi-probabilities and sum.\n", " energy = np.sum(coeffs*quasis.expval(meas_strings))\n", " return energy" ] }, { "cell_type": "markdown", "id": "b8a4c3d5", "metadata": {}, "source": [ "Finally, we can now execute the VQE function using one of the solvers from SciPy, returning the solution for the minimum energy and the associated parameters:" ] }, { "cell_type": "code", "execution_count": 14, "id": "b6a67663", "metadata": {}, "outputs": [], "source": [ "res = opt.minimize(vqe_func, params, method = 'COBYLA')" ] }, { "cell_type": "code", "execution_count": 15, "id": "5ce74849", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "-0.4243506232090013\n", "[1.14096757 0.45828983 0.29658569 5.458365 2.10949681 3.68394724\n", " 4.16817593 0.2999725 ]\n" ] } ], "source": [ "print(res.fun)\n", "print(np.mod(res.x, 2*np.pi))" ] }, { "cell_type": "markdown", "id": "b1a547b8", "metadata": {}, "source": [ "The optimal solution is around: `-0.44841884382998787`" ] }, { "cell_type": "code", "execution_count": null, "id": "2ecb16a9", "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.9.5" } }, "nbformat": 4, "nbformat_minor": 5 }