{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "d817ca15",
   "metadata": {},
   "source": [
    "## Exercise 13: The Variational Quantum Eigensolver (VQE)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2bfb70ac",
   "metadata": {},
   "source": [
    "In this exercise we are going to see how variational methods can be used in a hybrid quantum-classical scheme in order to approximate quantum states.\n",
    "\n",
    "In particular the aim of the Variational Quantum Eigensolver (VQE) is to optimize a set of parameterized quantum gates to approximate the ground state of a quantum system, given that the expectation value of the energy and its derivatives with respect to the parameters are evaluated on a quantum hardware in a scalable way.\n",
    "\n",
    "Preparing ground state is an exponentially complex task even on a quantum computer (QMA), but the VQE is expected to give some advantage for specific tasks in physics, chemistry and/or material sciences."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "bcaedb85",
   "metadata": {},
   "source": [
    "### Classical simulation of $H_2$ \n",
    "\n",
    "Here we will recall the code for the classical simulation of the dissociation process of $H_2$ diatomic molecule."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "87e9f295",
   "metadata": {},
   "outputs": [],
   "source": [
    "#!pip install pyscf"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "9a522498",
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "from pyscf import gto,scf,ao2mo,mp,cc,fci,tools\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "np.set_printoptions(precision=2,suppress=1e-8,linewidth=120)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "6d868346",
   "metadata": {},
   "outputs": [],
   "source": [
    "## Define a set of distances between the two atoms\n",
    "\n",
    "distances = np.arange(0.3, 4, .05)\n",
    "\n",
    "## and a basis in which the calculations will be made\n",
    "\n",
    "basis = 'sto-6g' #'6-31g' 'cc-pvdz' 'aug-cc-pvdz' ,...\n",
    "\n",
    "## Define a dictionary containing the energies derived with different methods\n",
    "energies = {}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "e6eb5cbf",
   "metadata": {},
   "outputs": [],
   "source": [
    "energies[\"HF_\"+basis]   = []\n",
    "energies[\"FCI_\"+basis]  = []\n",
    "energies[\"CCSD_\"+basis] = []\n",
    "\n",
    "for (i,r) in enumerate(distances):\n",
    "    # Build the 3D geometry of the molecule\n",
    "    geometry = \"H .0 .0 .0; H .0 .0 \"+str(r)\n",
    "    # And pass it to the gaussian orbitals generator (this is an alternative way to create the molecule object)\n",
    "    mol = gto.M(atom=geometry,charge=0,spin=0,basis=basis,symmetry=True,verbose=0)\n",
    "    \n",
    "    mf  = scf.RHF(mol) # Initialise a Restricted HF calculation using the molecule constructed\n",
    "    Ehf = mf.kernel()  #<- calling the kernel we compute the energy using the orbitals obtained\n",
    "    \n",
    "    fci_h2 = fci.FCI(mf) # FCI calculation\n",
    "    Efci = fci_h2.kernel()[0]\n",
    "    \n",
    "    \n",
    "    ccsd_h2 = cc.CCSD(mf) # CCSD calculation\n",
    "    e_ccsd  = ccsd_h2.kernel()[0]\n",
    "    e_ccsd += Ehf # <- this lines is mandatory because CCSD computes the energy difference with HF\n",
    "    \n",
    "    \n",
    "    # Save energies\n",
    "    energies[\"HF_\"+basis].append(Ehf)\n",
    "    energies[\"FCI_\"+basis].append(Efci)\n",
    "    energies[\"CCSD_\"+basis].append(e_ccsd)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "4bf81f26",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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oQNLly5l2LBh6PV6goODeeyxxxg/fjz9+vVj1KhR/Pjjj6SmpvLbb7+d9VyPPfYYN9xwAxdddBGXXHIJixYt4scff2TFihUAXHbZZXTq1InbbruNV199laKiIp5++mmg7luETeac49OEqqoyJL8uucW5au/Zvc8YRt9L/eWXB6ptO/lYm7tWVVVVnbdznv245hjeL4RwDk05JL+l5eTkqFOmTFFjYmJUT09PtV27durVV1+tLl++vNp+69atU5OSktSwsDBVr9ernTt3Vu+++251165dqqqq6rJly9Rx48apUVFRqqenpxoREaGOHj1a/eOPP+yvMXPmTPuQeEVR1MDAQHXw4MHq888/3ySfSx999JHat29f1dfXVw0ICFBHjhypbty40f78Dz/8oHbu3Fl1d3c/7yH5qqqqn376qdq5c2fVy8tL7dOnj7pgwYJqz58cku/p6al269ZN/fHHH1VAXbRoUa2v11RD8hVVrWdPsFausLCQwMBACgoK6rwn21ql7kqt0WydEJlA4rzEGvf4F49bbP8LziiTMQrR6pWVlbFv3z46duzoGJP3CYe0atUqhg8fzu7du+nUqVON58/276ghn99y+0yct7qarc91j1/6DgkhhKjN/Pnz8fPzIy4ujt27dzN16lSGDRtWayBqShKKRJOoLeC09D1+IYQQrqGoqIgnnniCrKws2rRpw6hRo3jjjeZff1NCkWhW0hokhBCioW699VZuvfXWFj+vTN4ohBBCCIGEIiGEEEIIQEKREEIIB3By+QchGqOpBtJLnyIhhBCa8fT0RKfTkZOTQ1hYGJ6ens0/QZ9wKaqqcvToURRFwcPD47xeS0KREEIIzeh0Ojp27Ehubi45OTlalyOclKIotG/fHjc3t/N6HQlFQgghNOXp6Ul0dDRms7nG+lpC1IeHh8d5ByKQUCSEEMIBnLz1cb63P4Q4H9LRWgghhBACCUVCCCGEEICEIiGEEEIIQPoU1dvJORAKCws1rkQIIYQQ9XXyc7s+cxlJKKqnoqIiAKKiojSuRAghhBANVVRURGBg4Fn3UdSmmgbSxVmtVnJycvD393fKicUKCwuJiooiOzubgIAArctpEa3xmkGuW67b9bXGawa57sZet6qqFBUVERkZiU539l5D0lJUTzqdjvbt22tdxnkLCAhoVT9M0DqvGeS6W5vWeN2t8ZpBrrsxztVCdJJ0tBZCCCGEQEKREEIIIQQgoajV0Ov1JCcno9frtS6lxbTGawa5brlu19carxnkulviuqWjtRBCCCEE0lIkhBBCCAFIKBJCCCGEACQUCSGEEEIAEoqEEEIIIQAJRS7jvffeo0OHDnh5eTFkyBDWrl1b576zZs1CUZRqDy8vrxastmmsXLmSq666isjISBRFYcGCBec8ZsWKFfTv3x+9Xk/nzp2ZNWtWs9fZ1Bp63StWrKjxfiuKgtFobJmCm8CMGTMYNGgQ/v7+hIeHM3bsWDIzM8953Ny5c+nWrRteXl706tWLn3/+uQWqbTqNuW5X+Pn+4IMP6N27t32yvqFDh/LLL7+c9Rhnf68bes2u8D7X5uWXX0ZRFB566KGz7tdc77eEIhfwzTff8Mgjj5CcnMzGjRvp06cPiYmJHDlypM5jAgICyM3NtT8OHDjQghU3DZPJRJ8+fXjvvffqtf++ffu48sorueSSS0hLS+Ohhx7izjvvZPHixc1cadNq6HWflJmZWe09Dw8Pb6YKm97vv//OlClT+Pvvv1myZAmVlZVcfvnlmEymOo/566+/uOmmm5g0aRKbNm1i7NixjB07lq1bt7Zg5eenMdcNzv/z3b59e15++WU2bNjA+vXrufTSS7nmmmvYtm1brfu7wnvd0GsG53+fz7Ru3Tr++9//0rt377Pu16zvtyqc3uDBg9UpU6bYv7ZYLGpkZKQ6Y8aMWvefOXOmGhgY2ELVtQxAnT9//ln3efzxx9UePXpU23bDDTeoiYmJzVhZ86rPdS9fvlwF1BMnTrRITS3hyJEjKqD+/vvvde4zfvx49corr6y2bciQIeo999zT3OU1m/pctyv+fKuqqgYHB6uffPJJrc+54nutqme/Zld7n4uKitS4uDh1yZIl6sUXX6xOnTq1zn2b8/2WliInV1FRwYYNGxg1apR9m06nY9SoUaxevbrO44qLi4mJiSEqKuqcf424itWrV1f7PgEkJiae9fvkSvr27Uvbtm257LLLWLVqldblnJeCggIAQkJC6tzHFd/v+lw3uNbPt8Vi4euvv8ZkMjF06NBa93G197o+1wyu9T5PmTKFK6+8ssb7WJvmfL8lFDm5Y8eOYbFYiIiIqLY9IiKizj4jXbt25bPPPuP777/nyy+/xGq1kpCQwMGDB1uiZM0YjcZav0+FhYWUlpZqVFXza9u2LR9++CHz5s1j3rx5REVFMWLECDZu3Kh1aY1itVp56KGHGDZsGD179qxzv7reb2fqS3W6+l63q/x8p6en4+fnh16vZ/LkycyfP5/u3bvXuq+rvNcNuWZXeZ8Bvv76azZu3MiMGTPqtX9zvt/u5/0KwukMHTq02l8fCQkJxMfH89///pcXXnhBw8pEc+jatStdu3a1f52QkMCePXv497//zRdffKFhZY0zZcoUtm7dyp9//ql1KS2qvtftKj/fXbt2JS0tjYKCAr777jtuu+02fv/99zpDgitoyDW7yvucnZ3N1KlTWbJkiUN0FJdQ5OTatGmDm5sbhw8frrb98OHDGAyGer2Gh4cH/fr1Y/fu3c1RosMwGAy1fp8CAgLw9vbWqCptDB482ClDxf3338/ChQtZuXIl7du3P+u+db3f9f25cCQNue4zOevPt6enJ507dwZgwIABrFu3jrfeeov//ve/NfZ1lfe6Idd8Jmd9nzds2MCRI0fo37+/fZvFYmHlypW8++67lJeX4+bmVu2Y5ny/5faZk/P09GTAgAEsXbrUvs1qtbJ06dKz3os+ncViIT09nbZt2zZXmQ5h6NCh1b5PAEuWLKn398mVpKWlOdX7raoq999/P/Pnz2fZsmV07NjxnMe4wvvdmOs+k6v8fFutVsrLy2t9zhXe69qc7ZrP5Kzv88iRI0lPTyctLc3+GDhwIBMmTCAtLa1GIIJmfr/Pu6u20NzXX3+t6vV6ddasWer27dvVu+++Ww0KClKNRqOqqqp6yy23qNOnT7fvn5KSoi5evFjds2ePumHDBvXGG29Uvby81G3btml1CY1SVFSkbtq0Sd20aZMKqG+++aa6adMm9cCBA6qqqur06dPVW265xb7/3r17VR8fH/Wxxx5TMzIy1Pfee091c3NTFy1apNUlNEpDr/vf//63umDBAnXXrl1qenq6OnXqVFWn06m//fabVpfQYPfee68aGBiorlixQs3NzbU/SkpK7Puc+e981apVqru7u/r666+rGRkZanJysurh4aGmp6drcQmN0pjrdoWf7+nTp6u///67um/fPnXLli3q9OnTVUVR1F9//VVVVdd8rxt6za7wPtflzNFnLfl+SyhyEe+8844aHR2tenp6qoMHD1b//vtv+3MXX3yxetttt9m/fuihh+z7RkREqGPGjFE3btyoQdXn5+RQ8zMfJ6/1tttuUy+++OIax/Tt21f19PRUY2Nj1ZkzZ7Z43eerodf9yiuvqJ06dVK9vLzUkJAQdcSIEeqyZcu0Kb6RarteoNr7d+a/c1VV1W+//Vbt0qWL6unpqfbo0UP96aefWrbw89SY63aFn+877rhDjYmJUT09PdWwsDB15MiR9nCgqq75Xjf0ml3hfa7LmaGoJd9vRVVV9fzbm4QQQgghnJv0KRJCCCGEQEKREEIIIQQgoUgIIYQQApBQJIQQQggBSCgSQgghhAAkFAkhhBBCABKKhBBCCCEACUVCCCGEEICEIiGEEEIIQEKREELUaeHChXTs2JHBgweza9curcsRQjQzWeZDCCHq0LVrV9577z22bdvG6tWr+frrr7UuSQjRjKSlSAjRao0YMQJFUVAUhbS0tBrPh4aG0rlzZzp06ICnp2e15yZOnGg/dsGCBS1TsBCiWUkoEkK0anfddRe5ubn07NmzxnO33347nTp14t577+U///lPtefeeustcnNzW6hKIURLkFAkhGgVzGZzrdt9fHwwGAy4u7vX2P+tt97i8ccfp7i4mODg4GrPBwYGYjAYmq1eIUTLk1AkhHA5+/fvR1EUvv32Wy688EL0ej0//PBDg17jww8/JDY2lilTplBUVMTevXubqVohhKNwP/cuQgjhXDZv3gzAa6+9xksvvUTHjh0JCwur9/F5eXm88MILrFixgvbt2xMYGEhaWhqdOnVqrpKFEA5AQpEQwuWkpaXh6+vL3Llz6dChQ4OPT05O5tprryU+Ph6A7t27s3nzZsaNG9fElQohHImEIiGEy9m8eTNXX311owLR9u3b+fLLL8nIyLBv69mzZ62j04QQrkVCkRDC5aSlpTF9+vRGHfvwww+Tn59P+/bt7dusVitRUVFNVZ4QwkFJKBJCuJTCwkL2799Pv379GnzswoUL2bBhA5s2bao2Gm3dunXccccdnDhxosYoNCGE65BQJIRwKZs3b8bNzY1evXo16LjKykqmTZvGY489Rt++fas9FxAQYH/tESNGNFGlQghHI0PyhRAuZfPmzXTt2hUvL68GHffOO++Qn5/P/fffX+O5qKgofHx8pF+REC5O1j4TQrRaI0aMoG/fvjVmq24IRVGYP38+Y8eObbK6hBDakJYiIUSr9v777+Pn50d6enqDjps8eTJ+fn7NVJUQQgvSUiSEaLUOHTpEaWkpANHR0TUWfT2bI0eOUFhYCEDbtm3x9fVtlhqFEC1HQpEQQgghBHL7TAghhBACkFAkhBBCCAFIKBJCCCGEACQUCSGEEEIAEoqEEEIIIQAJRUIIIYQQgIQiIYQQQghAQpEQQgghBCChSAghhBACkFAkhBBCCAHA/wMAzRGqCxXNKwAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "## Now plot the result\n",
    "\n",
    "plt.plot(distances,energies[\"HF_\"+basis],label=\"HF - \"+basis)\n",
    "plt.plot(distances,energies[\"FCI_\"+basis],label=\"FCI - \"+basis)\n",
    "plt.plot(distances,energies[\"CCSD_\"+basis],label=\"CCSD - \"+basis,linestyle=\"\",marker=\".\")\n",
    "\n",
    "plt.xlabel(r\"$r$ [$\\AA$]\")\n",
    "plt.ylabel(r\"$E$ [Hartree]\")\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "77281a76",
   "metadata": {},
   "source": [
    "As can be seen, the CCSD calculation is as accurate as FCI in this small system."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "983098bb",
   "metadata": {},
   "source": [
    "### Quantum simulation of $H_2$\n",
    "\n",
    "Now we will proceed to the simulation on the quantum computer.\n",
    "\n",
    "As showed [here](https://www.nature.com/articles/nature23879) the Variational quantum eigensolver can be used to calculate dissociation processes of small molecules on quantum processor."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "2e1881b7",
   "metadata": {},
   "outputs": [],
   "source": [
    "from qiskit import QuantumCircuit\n",
    "from qiskit_aer import Aer\n",
    "from qiskit.circuit import ParameterVector\n",
    "from qiskit.quantum_info import SparsePauliOp # To create operators\n",
    "from qiskit.primitives import Estimator       # to estimate expectation values"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "68358331",
   "metadata": {},
   "source": [
    "#### Preparing the Hamiltonian\n",
    "\n",
    "First, since we want to study a fermionic system on a set of qubits, we must find a mapping between the two.\n",
    "\n",
    "The oldest mapping proposed is the Jordan-Wigner, which was illustrated also in the lectures, but there are many others.\n",
    "\n",
    "Two noticeable alternatives are the [parity mapping](https://iopscience.iop.org/article/10.1088/1367-2630/aac54f) and the [Bravyi-Kitaev mapping](https://pubs.acs.org/doi/10.1021/acs.jctc.8b00450).\n",
    "\n",
    "In particular, we are going to focus on the parity mapping for the $H_2$ system. \n",
    "\n",
    "Instead of storing the occupation of a fermionic state $f_{j}$, as Jordan-Wigner does, this isomorphism uses the qubits to store the quantity \n",
    "\\begin{equation}\n",
    "\\label{eq:parity}\n",
    "p_{j}=\\sum_{i=0}^{j-1}f_{i} \\mod 2 \\quad ,\n",
    "\\end{equation}\n",
    "called parity of the set of occupation numbers $f_{j-1}\\dots f_{0}$. \n",
    "\n",
    "This is convenient for system like $H_2$ which conserve the total number of electrons with fixed spin orientation, meaning that we can get rid of two qubits out of the box.\n",
    "\n",
    "Manually performing the mapping can be a very tedious and prone-to-error task, for this reason we will use the very practical Qiskit PySCF driver, which recalls the creation of a PySCF molecule object that we have seen in previous lectures but gives a qubit operator ready to be measured on a quantum computer.\n",
    "\n",
    "This driver can be found in the Qiskit optional package `nature`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "bb5858c2",
   "metadata": {},
   "outputs": [],
   "source": [
    "#!pip install 'qiskit-nature'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "bb7b76e5",
   "metadata": {},
   "outputs": [],
   "source": [
    "from qiskit_nature.second_q.drivers import PySCFDriver\n",
    "from qiskit_nature.second_q.formats.molecule_info import MoleculeInfo"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "e49bc488",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Initialise the molecule using the PySCF driver\n",
    "\n",
    "molecule = MoleculeInfo([\"H\", \"H\"], [(0.0, 0.0, 0.0), (0.0, 0.0, 0.735)], charge=0, multiplicity=1)\n",
    "driver = PySCFDriver.from_molecule(molecule, basis=\"sto6g\")\n",
    "problem = driver.run()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "5d9a0db5",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "np.float64(0.7199689944489797)"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Now the problem has also the nuclear repulsion shift of the Born-Oppenheimer approximation\n",
    "problem.nuclear_repulsion_energy"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "e8c7fed6",
   "metadata": {},
   "outputs": [],
   "source": [
    "## Calling .second_q_ops will generate a bunch of operators such as dipole, magnetization, ...\n",
    "## We only need the Hamiltonian\n",
    "hamiltonian = problem.second_q_ops()[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "73847e36",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Fermionic Operator\n",
      "number spin orbitals=4, number terms=36\n",
      "  0.3378280462325899 * ( +_0 +_0 -_0 -_0 )\n",
      "+ 0.3326288267523016 * ( +_0 +_1 -_1 -_0 )\n",
      "+ 0.3378280462325899 * ( +_0 +_2 -_2 -_0 )\n",
      "+ 0.3326288267523016 * ( +_0 +_3 -_3 -_0 )\n",
      "+ 0.09060902125379112 * ( +_0 +_0 -_1 -_1 )\n",
      "+ 0.09060902125379112 * ( +_0 +_1 -_0 -_1 )\n",
      "+ 0.09060902125379112 * ( +_0 +_2 -_3 -_1 )\n",
      "+ 0.09060902125379112 * ( +_0 +_3 -_2 -_1 )\n",
      "+ 0.09060902125379112 * ( +_1 +_0 -_1 -_0 )\n",
      "+ 0.09060902125379112 * ( +_1 +_1 -_0 -_0 )\n",
      "+ 0.09060902125379112 * ( +_1 +_2 -_3 -_0 )\n",
      "+ 0.09060902125379112 * ( +_1 +_3 -_2 -_0 )\n",
      "+ 0.3326288267523016 * ( +_1 +_0 -_0 -_1 )\n",
      "+ 0.35008911193642944 * ( +_1 +_1 -_1 -_1 )\n",
      "+ 0.3326288267523016 * ( +_1 +_2 -_2 -_1 )\n",
      "+ 0.35008911193642944 * ( +_1 +_3 -_3 -_1 )\n",
      "+ 0.3378280462325899 * ( +_2 +_0 -_0 -_2 )\n",
      "+ 0.3326288267523016 * ( +_2 +_1 -_1 -_2 )\n",
      "+ 0.3378280462325899 * ( +_2 +_2 -_2 -_2 )\n",
      "+ 0.3326288267523016 * ( +_2 +_3 -_3 -_2 )\n",
      "+ 0.09060902125379112 * ( +_2 +_0 -_1 -_3 )\n",
      "+ 0.09060902125379112 * ( +_2 +_1 -_0 -_3 )\n",
      "+ 0.09060902125379112 * ( +_2 +_2 -_3 -_3 )\n",
      "+ 0.09060902125379112 * ( +_2 +_3 -_2 -_3 )\n",
      "+ 0.09060902125379112 * ( +_3 +_0 -_1 -_2 )\n",
      "+ 0.09060902125379112 * ( +_3 +_1 -_0 -_2 )\n",
      "+ 0.09060902125379112 * ( +_3 +_2 -_3 -_2 )\n",
      "+ 0.09060902125379112 * ( +_3 +_3 -_2 -_2 )\n",
      "+ 0.3326288267523016 * ( +_3 +_0 -_0 -_3 )\n",
      "+ 0.35008911193642944 * ( +_3 +_1 -_1 -_3 )\n",
      "+ 0.3326288267523016 * ( +_3 +_2 -_2 -_3 )\n",
      "+ 0.35008911193642944 * ( +_3 +_3 -_3 -_3 )\n",
      "+ -1.2606268776707992 * ( +_0 -_0 )\n",
      "+ -0.4761511477140961 * ( +_1 -_1 )\n",
      "+ -1.2606268776707992 * ( +_2 -_2 )\n",
      "+ -0.4761511477140961 * ( +_3 -_3 )\n"
     ]
    }
   ],
   "source": [
    "print(hamiltonian)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "46688c08",
   "metadata": {},
   "outputs": [],
   "source": [
    "## Now we will map the problem to a qubit operator\n",
    "from qiskit_nature.second_q.mappers import JordanWignerMapper, BravyiKitaevMapper, ParityMapper"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "1a961a14",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "SparsePauliOp(['IIII', 'IIIZ', 'IIZZ', 'IIZI', 'IZZI', 'IZZZ', 'ZZII', 'ZZIZ', 'ZXIX', 'IXZX', 'ZXZX', 'IXIX', 'IZIZ', 'ZZZZ', 'ZIZI'],\n",
      "              coeffs=[-0.82+0.j,  0.17+0.j, -0.22+0.j,  0.12+0.j,  0.17+0.j,  0.17+0.j, -0.22+0.j,  0.17+0.j,  0.05+0.j, -0.05+0.j,\n",
      " -0.05+0.j,  0.05+0.j,  0.17+0.j,  0.18+0.j,  0.12+0.j])\n"
     ]
    }
   ],
   "source": [
    "## Create the qubit operator \n",
    "#mapper = JordanWignerMapper()\n",
    "#mapper = BravyiKitaevMapper()\n",
    "mapper = ParityMapper()\n",
    "qubit_op = mapper.map(hamiltonian)\n",
    "print(qubit_op)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "6576ac3a",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "SparsePauliOp(['II', 'IZ', 'ZI', 'ZZ', 'XX'],\n",
      "              coeffs=[-1.06+0.j,  0.4 +0.j, -0.4 +0.j, -0.01+0.j,  0.18+0.j])\n"
     ]
    }
   ],
   "source": [
    "## Create the qubit operator (With 2 qubit reduction)\n",
    "mapper = ParityMapper(num_particles=problem.num_particles) # Parity mapper requires the spin up and down electrons\n",
    "qubit_op = mapper.map(hamiltonian)\n",
    "print(qubit_op)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9bdaed5a",
   "metadata": {},
   "source": [
    "Now we have seen how to create a qubit operator for a single configuration, we will need to repeat this procedure for every $r$ in order to study the dissociation process of $H_2$.\n",
    "\n",
    "#### Initial state\n",
    "\n",
    "We need a starting point for our calculations, that in this case will be the Hartree-Fock (HF) determinant.\n",
    "This can be easily prepared on the quantum circuit, since we are already in the basis of the HF orbitals.\n",
    "This means that we will need to put an $X$ gate if the corresponding spin-orbital is occupied (Jordan-Wigner) or it has a odd occupation number (Parity). \n",
    "\n",
    "Qiskit provides a useful `HartreeFock` function to create this initial state, that then we will pass to the VQE function."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "id": "0bc7ddd7",
   "metadata": {},
   "outputs": [],
   "source": [
    "from qiskit_nature.second_q.circuit.library.initial_states import HartreeFock"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "id": "a9d634d2",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 203.683x200.667 with 1 Axes>"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "init_state = HartreeFock(num_spatial_orbitals=problem.num_spatial_orbitals, num_particles=problem.num_particles, qubit_mapper=mapper)\n",
    "init_state.draw(\"mpl\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b498c95e",
   "metadata": {},
   "source": [
    "#### Variational wave function\n",
    "\n",
    "Now that we have the Hamiltonian operator, we will need an ansatz for our wavefunction. Since we need a variational ansatz, some gates will contains parameters that are going to be iteratively optimized (as an example, rotation on the $x,y,z$ axis).\n",
    "\n",
    "There is no analytical way to choose an ansatz for the system: there are empirical rules based on similarity with what we are studying.\n",
    "Some ans&auml;tze come from classical computational chemistry, such as the highly accurate [q-UCCSD](https://arxiv.org/pdf/1506.00443.pdf),  but mostly we have to consider some circuits that can be run on current devices, so they have to contain few two qubits gates and be relatively shallow: these ans&auml;tze are called hardware-efficient.\n",
    "\n",
    "\n",
    "What we are going to consider is one of the so-called \"hardware-efficient ans&auml;tze\". \n",
    "The system does not contain many qubits, so our trial ansatz will be very simple : a layer of rotations around the $y$-axis followed by CNOTs and again a layer of rotations. This simple structure can be easily extended both in depth (adding more CNOTs and rotation) and in width, to study bigger system, therefore is widely used."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "id": "ab10c0bb",
   "metadata": {},
   "outputs": [],
   "source": [
    "def variational_ansatz(n_qubits,params):\n",
    "    \n",
    "    qc = QuantumCircuit(n_qubits)\n",
    "    \n",
    "    for i in range(n_qubits):\n",
    "        qc.ry(params[i],i)\n",
    "    qc.barrier()\n",
    "    for i in range(n_qubits-1):\n",
    "        qc.cx(i,i+1)\n",
    "    qc.barrier()\n",
    "    for i in range(n_qubits):\n",
    "        qc.ry(params[n_qubits+i],i)\n",
    "    return qc"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "id": "80741ad5",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAnMAAAFvCAYAAAAhTE1zAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABUxElEQVR4nO3deVxVdf4/8Ndl3y7IpiCKoICI+4i4laWjJbnkWhaZLWZNkv4avzqTMy1aY5rOVGo5tk2jFblWJJmaVpKagmgpIiJbbFe9suMFucvvD0eKBL0X770fzjmv5+PRozznfM55E9f3+33P8jkqk8lkAhERERFJkoPoAIiIiIio7djMEREREUkYmzkiIiIiCWMzR0RERCRhbOaIiIiIJIzNHBEREZGEsZkjIiIikjA2c0REREQSxmaOiIiISMLYzBERERFJGJs5IiIiIgljM0dEREQkYWzmiIiIiCSMzRwRERGRhLGZIyIiIpIwNnNEREREEsZmjoiIiEjC2MwRERERSRibOSIiIiIJYzNHREREJGFs5oiIiIgkjM0cERERkYSxmSMiIiKSMDZzRERERBLGZo6IiIhIwtjMEREREUkYmzkiIiIiCWMzR0RERCRhTqIDILoVaWlpFm2v1WqxY8cOTJ06FQEBAWaNGTx4cFtCIyKyC+ZB4pk5UhStVov33nsPWq1WdChEREIwD8oPmzkiIiIiCWMzR0RERCRhbOaIiIiIJIzNHCmKWq3GuHHjoFarRYdCRCQE86D8qEwmk0l0EERtZelTXG3Bp7iIqD1jHiSemSNFaWhoQFFRERoaGkSHQkQkBPOg/LCZI0XJz8/HtGnTkJ+fLzoUIiIhmAflh5MGt1Mmkwl6nXS+NTm5u0KlUokOg4iIZEJqdRAQVwvZzLVTel0DPu7xkOgwzJaQ+xGcPdxEh0FERDIhtToIiKuFvMxKREREJGFs5oiIiIgkjJdZSVGio6Nx9OhR0WEQEQnDPCg/PDNHREREJGFs5khRCgsL8dhjj6GwsFB0KEREQjAPyg+bOVIUnU6HU6dOQafTiQ6FiEgI5kH5YTNHREREJGF8AEJGgob1xrgdS5sta6zToTqvDLnbDiDr/a9gMhgFRUdERGR7SqyFbOZkKG9HKor3ZwAqFdwDOyBixh2IW/oIfCJDcHjRBtHhERER2ZySaiGbORm6dDIfedtTm/6c/eFuTEl9E1EP/hEZK5LQcKlaYHRiBQcHY+nSpQgODhYdChGREErJg0qqhbxnTgH0ugZczMiBysEB3t06iQ5HKB8fH8THx8PHx0d0KEREQig1D8q5FrKZUwh12NUPbkNlreBIxKqoqMDWrVtRUVEhOhQiIiGUnAflWgt5mVWGnNxd4OqnbrpPoOfDd8G/b3dczMhBdV6Z6PCEOn/+PFatWoW+ffvC19dXdDhERHanlDyopFqoiGZOq9Xitddew44dO1BcXIzAwEBMnToVy5cvx/z58/HBBx9g7dq1SExMFB2qVQxcPBMDF89stqwg5Uccee49QRGRaCaTCd+na3DqXAV09XoE+Lph/O1d0dHfXXRoREQ2oaRaKPtm7sSJE4iPj4dGo4GnpydiYmJQWlqKNWvWIDc3F+Xl5QCAAQMGiA3UirI37UHBl4fh4OwE3+hQ9Jk3GZ7B/jA0XGna5o71zwIOKnz/5L+alrl08MLk715H+rKNyNuR2tKuSWIMBiPWbzmDtz49jTP5Vc3WOTs5YMZd4Xju8X7oE+knKEIiIttQUi2U9T1zWq0WEydOhEajwcKFC1FWVoaMjAxoNBqsXLkSKSkpSEtLg0qlQr9+/USHazXVeRqUpZ5Eyf7jOPX2F9g3ewUCBvTAsJVPNm1z+Ll30XFwT4RPHtG0bOjyObhw9IxkPrx0Yw1XDJi+cD+eefXwdY0cADTqjfjkq1wMfehL7D5YLCBCIiLbUVItlHUzN3/+fBQXFyMxMRGrV6+GWq1uWrd48WL0798fer0eYWFh8Pb2FhipbV1Mz0butgMInzwCgbE9AQBXKmtxaOF6DPnHHLh38kW38UMRNLw3Dv9FXnPv/J6HhweGDBkCDw8P0aHY3NylP+Dz/Td/92KdTo+pz+5DxmmtHaIiItGUlAd/S861ULbNXFZWFjZv3oyAgAC8+uqrLW4zaNAgAED//v2bLc/Pz8ekSZOgVqvh6+uLhx9+GJcuXbJ5zLb00+vbYNQbMHDR/U3LSr49gYIvD2HkuvkYuuIJHFq4Hg0V8nrC5/dCQ0Oxdu1ahIaGig7Fpo5nabHxy3Nmb3+5Xo/n3zpmw4iIqL1QSh5siVxroWybuaSkJBiNRiQkJMDLy6vFbdzdr978/dtmrqamBqNGjUJxcTGSkpLwzjvvIDU1FRMmTIDRKN3Xf9QUaJD/xUF0HtkPHYf0alqevnQj1OFBKNl/HMX7MgRGaB8GgwG1tbUwGAyiQ7Gp9VvOWDxm1w/FyCuWzySaRNQypeTBlsi1Fsq2mdu/fz8AYNSoUa1uU1x89T6h3zZz77zzDkpKSvD5559jwoQJmDFjBj755BP8+OOPSE5Otm3QNvbzm9thNDT/RqLXNaC28AIqsn4RGJn95OTkYPTo0cjJyREdis2YTCYk7cprwzhgy+58G0RERO2JEvLgjcixFsr2adbCwqv3CnXr1q3F9Xq9HgcPHgTQvJnbuXMnbrvttmann4cNG4bu3bvjyy+/xOTJky2OJTY2FhqNxqIxziYHvIg4i8ZoDmfiw+Dpra6vyinBxi73t7r+VkRFRqFRZf8zl9Ont/7ztuTChQsAgF27duHYMfMuK06ZMsXiuEQywQm1fs+3aewrK9di3YtfWzkiIrIluebBttRBQLq1MCgoCOnp6W0aK9tmrq6uDgCg0+laXL9582ZotVqo1WqEh4c3LT99+jRmzJhx3fa9e/fG6dOn2xSLRqNBSUmJRWNcVI6AhN42UlpWiism+5+yv/Z7Nte1z4NOpzN7rKW/O/EcgTbONFJXU4U6jdR+XiJlk2selFodBMTVQtk2c0FBQaioqEBGRgaGDRvWbF1ZWRkWLVoEAOjXrx9UKlXTuoqKCnTo0OG6/fn5+SE7O7vNsVjK2eQASOgWvc7BnYWcmfP09LRo+2uJy93d3eyxISEhFsclmsZQAYOj5TO7d/C4Ak8J/rxESibXPCi1OgjcWi1sS69wjWybuTFjxiArKwsrV67E2LFjERUVBQBIS0vDrFmzoNVenYbBHpMFt+W0aePlenzc4yEbRHO9r6e9eMv7OJtzFs4eblaIxjJpaWkWbX/mzBkkJSUhPj4e0dHRZo1544032hCZWMvfPYG/rbXs6VQvDyf8cngr1J4uNoqKiGxBrnnQnnUQkHYtlO0DEIsXL4a/vz+KiorQu3dv9O3bF5GRkYiLi0P37t0xevRoANdPS+Lr64vKysrr9ldeXg4/P86SL3URERHYvXs3IiIiRIdiU49P7QkXZ8v+ej88MZKNHJECKCUPKolsm7kuXbogNTUV48ePh5ubGwoKCuDn54cNGzYgJSUFZ8+eBXB9M9erV68W7407ffo0evXqdd1ykhYnJyf4+vrCyUm2J6UBAJ383fHv50fcfMP/6dW9A155ZpANIyKi9kIpeVBJZNvMAVcbs507d6KmpgY1NTU4cuQI5s6di7q6OhQUFMDBwQF9+vRpNmbChAn44YcfmqYtAYAjR44gNzcXEydOtPePQFZWXFyMhQsXNvv9ytWjk6Pwzgsj4OiouuF2f+jlj33vxsPX29VOkRGRSErKg0oh62auNZmZmTCZTIiMjLzudSZz585FcHAw7r33XuzcuRPbtm3DAw88gLi4ONx7772CIiZrqa2tRWpqKmprpTW7d1s9MT0a2cnTseiRvvDzad6sjRwUhE9fG4XDH01EcKCyXutDpGRKy4NKoMhm7uTJkwCuv8QKAN7e3ti/fz+Cg4Mxc+ZMzJkzB8OHD8fOnTvh4KDI/10kcT26euO1P8ehbP8D6OR/9cbcoAB3fP+f8bh/XHe4ODsKjpCIiG6FIi+Y36iZA4AePXpg586d9gyJyOZcnB3h5Hj1C4mjw40vvRIRkXSwmZMR35huGL76KTh7uaOu+CIOPLMWvlFdMebjJajOLcWemS+j/lI1HN1dMOKfTyNgQA+YjCZkvPoJClN+BADEPj8LYfcOR/nJfOx/9DXBPxEREZH5zK2Dt70xD8Ej+6Hh0tX3UZce+BnpL28CIM06qMhm7tp7W+XmtjcScfDZt1CeWYCImaMx+IWHce7Tb1GdW4rksYuatuvz1CQYrzRix/Bn4NW1I8Z/9So0h06hoaIW6S9vQmV2EULjLX+FihQEBgZiwYIFCAwMFB0KEZEQcs6D5tZBAMhcn4zT76Zctw8p1kHeBCYTfn3Cob9cj/LMAgBA7pbv0PWuWDi4XN+vh907Atkb9wAAaosuQHMoE6HxQ+wZrjD+/v5ISEiAv7+/6FCIiISQax60pA7Kjfx/QoXwCu0I3+hQTNq7qmmZk7srPIKun+jYKyQAtcUXm/5cW3QBniEBdolTtOrqahw9ehRxcXHw9vYWHQ4Rkd3JNQ9aUgcBoNecexAxczTqSrQ4vjKpqQmUIjZzMnLxeA72PvBK059nnnpfYDTtU2lpKZYsWYKNGzfKKokREZlLznnQ3DqYsSIJl89XACYTQuPjMObjv2HH8Gegv1xvr1CtipdZZaK28Hyzs2vOXu5w8nDDZU359duWaOHV5dd7Jby6dkRdidYucRIREdmCJXXwsqYcMJkAAL/sOorGmsvwiehst1itjc2cTJRnFsDYaEDwyH4AgOhH7kb+FwdhvKK/btvCLw+j58N3AbjayAUN741fvj5q13iJiIisyZI66BH866XXwD9EwtVPjep8jd1itTZeZpWRA/PexG1vzIPLiidQU6DBgcQ18O0Zet12p97+AiNefxpTD6+DyWDEkSXvoaG8RkDERERE1mNuHbztjUS4B/rAZDBCX38F3z3xTzTWXBYQsXWwmZORyjO/YOe4v9x0O72uAd8/9bodImp/XF1d0bNnT7i68j2kRKRMcs6D5tbBPfcvs0M09sPLrDJnaNTD1VeNSXtXwc3/5je6xj4/C32fmYKGSnm+sy88PBybNm1CeHi46FCIiIRQWh5UQh3kmTmZu5ieja2xT5m9ffrLm5pmwSYiIpI6JdRBnpkjRcnOzsaIESOQnZ0tOhQiIiGYB+WHzRwpislkQmNjI0z/eySdiEhpmAflh5dZ2yknd1ck5H4kOgyzObnL70ZaIiISR2p1EBBXC9nMtVMqlQrOHm6iwyAiIhKCddB8vMxKREREJGE8M0eKEhYWhqSkJISEhIgOhYhICOZB+WEzR4ri5uaGHj16iA6DiEgY5kH54WVWUpSysjK88sorKCsrEx0KEZEQzIPyw2aOFKWqqgrJycmoqqoSHQoRkRDMg/LDZo6IiIhIwtjMEREREUkYmzkiIiIiCWMzR4ri4OCAgQMHwsGBH30iUibmQfnhb5IUxWg04vjx4zAajaJDISISgnlQftjMEREREUkYmzkiIiIiCWMzR0RERCRhbOZIUdRqNcaNGwe1Wi06FCIiIZgH5YfvZiVFCQkJwbJly0SHQUQkDPOg/PDMHClKQ0MDioqK0NDQIDoUIiIhmAflh80cKUp+fj6mTZuG/Px80aEQEQnBPCg/vMzaTplMJuh10vnW5OTuCpVKJToMIiKSCanVQUBcLWQz107pdQ34uMdDosMwW0LuR3D2cBMdBhERyYTU6iAgrhbyMisRERGRhLGZIyIiIpIwXmYlRYmOjsbRo0dFh0FEJAzzoPzwzBwRERGRhLGZI0UpLCzEY489hsLCQtGhEBEJwTwoP7zMSoqi0+lw6tQp6HQ60aHYRemFOhw6cQHHsrQ4caYcF8rrAQAXK+rx8JLvEds7AINiAjCkbyCcnPjdjkgJlJYHlYDNHJHMGI0m7D1cgrc3Z2HngSIYjabrtrnSaMSmneewaec5AEBIRw/MnR6NJ6b1RHCgh71DJiKiW8Cv4kQycvJsOeIeTMa4P+1G8ne/tNjItaTkwmW8+HYGut29GUvXZ6Cx0WjjSImIyFp4Zk5Ggob1xrgdS5sta6zToTqvDLnbDiDr/a9gMrBIy5HRaMKK93/CS+uPo1Hf9t9xo96Il9Yfx+ffFmLTP+5An0g/K0ZJRGR7SqyFbOZkKG9HKor3ZwAqFdwDOyBixh2IW/oIfCJDcHjRBtHhCRUcHIylS5ciODhYdChW09hoxCPPH8AnX+VabZ8nzpRj+MM7sXPtWIyMlc//KyKSZx5siZJqIS+zytClk/nI256KvG0HkLk+GSnjl6CuRIuoB/8IV39v0eEJ5ePjg/j4ePj4+IgOxSoMBiNm//17qzZy19TUNeKeeXtw+KfzVt83EYkjtzzYGiXVQjZzCqDXNeBiRg5UDg7w7tZJdDhCVVRUYOvWraioqBAdilW89p+TSNqVZ7P91+n0uHf+N7hYzqfeiORCbnnQXHKuhWzmFEIddvWD21BZKzgSsc6fP49Vq1bh/Hnpn23KPFeBl9ZnWDQmLWkSivbORFrSJLPHXKyoxzMrDlsaHhG1U3LKg5aSay1URDOn1WqxePFiREREwM3NDV27dsWCBQtQV1eHxx9/HCqVCuvWrRMdptU4ubvA1U8NV39vdIgOxZDlc+DftzsuZuSgOq9MdHhkBSaTCY+9kIorFj51GhTggS6dPBEUYNn0I5u/zsfn+wssGtMeNTYacamyHrp6vehQiMjGlFQLZf8AxIkTJxAfHw+NRgNPT0/ExMSgtLQUa9asQW5uLsrLywEAAwYMEBuoFQ1cPBMDF89stqwg5Uccee49QRGRtX17tAxHT1206zFXfvAzJo8Os+sxrcFgMCLlQBHe3pyF3YdKmpb36t4BT9/fC7MmRMBH7SIwQiKyBSXVQlmfmdNqtZg4cSI0Gg0WLlyIsrIyZGRkQKPRYOXKlUhJSUFaWhpUKhX69esnOlyryd60B7vvW4q9Cf9A+subUF9eA89gfxgarjRtc8f6Z3HHhj83G+fSwQv3nXgX3afebu+QyUJvb86y+zF//PkiMk5r7X7cW1F6oQ5xDybj3gXfNGvkACArrxLPvHoYYeM249ujpYIiJCJbUVItlHUzN3/+fBQXFyMxMRGrV6+GWq1uWrd48WL0798fer0eYWFh8PaWz5Mt1XkalKWeRMn+4zj19hfYN3sFAgb0wLCVTzZtc/i5d9FxcE+ETx7RtGzo8jm4cPQM8nakigjbLjw8PDBkyBB4eEj3LQcXLunw+bdi3qn47vZsIcdtC21FPe58/CtkZF264XaVNVcw7k+7cSBdXpddiFojhzxoDiXVQtk2c1lZWdi8eTMCAgLw6quvtrjNoEGDAAD9+/dvWnat+YuLi4OrqytUKpVd4rWli+nZyN12AOGTRyAwticA4EplLQ4tXI8h/5gD906+6DZ+KIKG98bhv8hr7p3fCw0Nxdq1axEaGio6lDY7cvIiDAbz3uxgbQdPSOeG6QUrf0ROYbVZ215pNOK+Rd/iSqPBxlERiSeHPNgWcq6Fsm3mkpKSYDQakZCQAC8vrxa3cXd3B9C8mTt37hy2b9+OoKAgDB482C6x2sNPr2+DUW/AwEX3Ny0r+fYECr48hJHr5mPoiidwaOF6NFTI6wmf3zMYDKitrYXBIN2ifUzgpc7TeZW4rGv/Dw9otJexdU++RWPOX9JhxzcFtgmIqB2RQx5sK7nWQtk2c/v37wcAjBo1qtVtiouLATRv5kaOHImysjIkJydjzJgxtg3SjmoKNMj/4iA6j+yHjkN6NS1PX7oR6vAglOw/juJ9lk1zIUU5OTkYPXo0cnJyRIfSZsfP3PiyoS0ZDCacOtf+56b68IucNr3W7N9bz9ggGqL2RQ55sK3kWgtl+zRrYeHVe4q6devW4nq9Xo+DBw8CaN7MOThYv7+NjY2FRqOxaIyzyQEvIs6qcfz85naETx6BgYvux+7pLwG4OolibeEFVGT9ckv7joqMQqPK/u+6mz59ukXbX7hwAQCwa9cuHDt2zKwxU6ZMsTguW7qofhRwDmtxXVrSpBtOOxIU4N7076K9M1vdDrh6dmvwA8nXLb9n4nS46a3/xglrKvecCrj2v/mGv5N69By6dOlig4iIbEeuedAWdRBov7UwKCgI6enpbRor22aurq4OAKDTtTxz/ebNm6HVaqFWqxEeHm7TWDQaDUpKSm6+4W+4qBwBCyeo1hzOxIfBrf+lrsopwcYu97e6/laUlpXiisn+p+yv/Z7Nde3zoNPpzB5r6e/O5ro3As4tr7o2j9zNODk6mLVdSy6VVwA17ez/ye91vQK4Wj7MaHJsf79vopuQax5sSx0ElFkLZdvMBQUFoaKiAhkZGRg2bFizdWVlZVi0aBEAoF+/fjZ/yCEoKMjiMc4mB8D+J7rarHNwZyFn5jw9LWtIriUud3d3s8eGhIRYHJctaV0c0NDKOo328g3HBgW4w8nRAXqDERrtjV/R1dq+Avy84erdvv6f/F6lmwmWlberHKFDUDv7fRPdjFzzoNTqIHBrtbAtvcI1sm3mxowZg6ysLKxcuRJjx45FVFQUACAtLQ2zZs2CVnv1JnJ7TBbcltOmjZfr8XGPh2wQjW2czTkLZw83ux83LS3Nou3PnDmDpKQkxMfHIzo62qwxb7zxRhsis52nXj6IDa3c29XSZdHfKto7E106eUKj1aHr2E/bdPyMH79G16CWHypqL/YfKcUfn9hl8biFc+7AymcX2SAiItuRax6UWh0ExNVC2TZzixcvxieffIKioiL07t0b0dHRqK+vx7lz5xAfH4+wsDDs3r272f1ySvX1tBdFh2A3ERER2L17d7M5B6VmUC9/YccO9HVr8+VZexoVF4zocB+cya8ye4xKBTw5w7zCRiRlcsiDtiDlWijbp1m7dOmC1NRUjB8/Hm5ubigoKICfnx82bNiAlJQUnD17FgDYzCmMk5MTfH194eQk3e8xsb0DhB17UEyAJOZeVKlUWD4/1qIxc6dHo3sX+UweTtQaOeRBak62zRwA9OrVCzt37kRNTQ1qampw5MgRzJ07F3V1dSgoKICDgwP69OkjOkyyo+LiYixcuLBpWhop6t/THz26ivlGPeMu2z4sZE1T/hiGdUuGwZzec+ofw7D2r8NuviGRDMghD1Jzsm7mWpOZmQmTyYTIyMgWX2eybds2bNu2DadPn27257Y+MkztR21tLVJTU1FbK60JIX/LwUGFP93X6+YbWlkHtQtmjutu9+PeinkzY/DVW3fjtoEtPxIX1tkLqxfGYcvqUXB2VmQ6JAWSQx6k5hR5jvXkyZMAWr/EOmPGjBb/PHv2bHz44Yc2jY3IHI9OjsLzbx2Drt5+j8A/NiUKHu7SSxnjbuuCcbd1wU/Zl/BVajGWv3cCtZf18PdxxbmUGXB0ZBNHRNKmyCx2s2bOZDK1+A8bOWov/Hxc8Y9nLLsn7FYEB3rg73MH2O14ttC/pz+em9MfPl4uAAA3V0c2ckQkC9L7mm0FN2vmpMo3phuGr34Kzl7uqCu+iAPPrIVvVFeM+XgJqnNLsWfmy6i/VI2ImaPRe+54+ER2QfqyjTj9bkrTPmKfn4Wwe4ej/GQ+9j/6msCfhm5m/oMx2P5NAQ4eP2/zY73zwgj4erdhFl4iIjsytw4CQM/Zd6PX4/Ew6Q0wGU1IGf8cDA2NkqyDimzmrr23VW5ueyMRB599C+WZBYiYORqDX3gY5z79FtW5pUge++vcWZd+zsV3T/4LfZ+Zet0+0l/ehMrsIoTGW/8VKu1BYGAgFixYgMDAQNGh3DJHRwd8+PJIDH0oGZcqW5tGuLlrEwHfbHLh33r6/l6YcEdom2IkovZHTnnw98ytg13vHozuU29HyvglaKy5DFd/bxgbr962IsU6yGsMMuHXJxz6y/UozywAAORu+Q5d74qFg8v1/XrF6UJU5ZQARolNrW0F/v7+SEhIgL+/uLnarCki1Btfr78bHdQuZm0/+IFkdB376U0nF77mwXt6YM1fh95KiETUzsgtD15jSR3s8/Qk/PSvrWisufrFtuFSNUwSromKPDMnR16hHeEbHYpJe1c1LXNyd4VHkJ/AqNqf6upqHD16FHFxcfD2lsecYrG9A/H9f8ZjQuIeFGna8hKrls2b2Qtv/mUo7ysjkhk55kHAsjrYIbIL/Pv3QP8/z4CjqzNyt36PrPe/sme4VsVmTkYuHs/B3gdeafrzzFPvC4ymfSotLcWSJUuwceNGWSWxflF+OLl9Kv7vn0fw3o6zt7Svzh098O6Lt+Ge27taKToiak/kmgcB8+ugyskR6tCO+HrKC3Dp4IlxO5ahpvA8ir85Zq9QrYpfuWWitvA8PEN+fTOAs5c7nDzccFlTLjAqsicftQvefel27H1nHP44pLPF4/07uGLxo32RuWMqGzkikhxL6mBdiRZ5n/0Ak9GIhvIalOzLQOCgSHuGa1U8MycT5ZkFMDYaEDyyH8oO/IzoR+5G/hcHYbyiFx0a2dmYoSEYMzQEZ/Ir8d72bPxw/DxOZJej4cr1c9J16eSJQTH+mDYmDDPuCoebK1MCEUmTJXUw77MfEDJqADQHT8HRzQVBw3vj5FtfCIjaOpi5ZeTAvDdx2xvz4LLiCdQUaHAgcQ18e17/FGLEfXdi4F8egEsHT4SOi0PvpyZh3+wVKD+VLyBqspXo8A5Y/X9DAACNjUZkF1SiovoKGvVGuLs5okcXb3T0dxccJRGR9ZhbB09v+BLDXnsSk79/HSYTUJjyIwp3HhYQsXWwmZORyjO/YOe4v9x0u3NbvsO5Ld/ZPqB2yNXVFT179oSrq7LmTHN2dkCfSD4MQ0TyzoPm1kFDQyN+WLDODhHZB++ZkzlDox6uvmpM2rsKbv43v9E19vlZ6PvMFDRUyvOdfeHh4di0aRPCw6XzwngiImtSWh5UQh3kmTmZu5ieja2xT5m9ffrLm5D+8iYbRkRERGQ/SqiDPDNHipKdnY0RI0YgOztbdChEREIwD8oPmzlSFJPJhMbGRphMJtGhEBEJwTwoP7zM2k45ubsiIfcj0WGYzcldfjfSEhGROFKrg4C4Wshmrp1SqVRw9nATHQYREZEQrIPm42VWIiIiIgnjmTlSlLCwMCQlJSEkJER0KEREQjAPyg+bOVIUNzc39OjRQ3QYRETCMA/KDy+zkqKUlZXhlVdeQVlZmehQiIiEYB6UHzZzpChVVVVITk5GVVWV6FCIiIRgHpQfNnNEREREEsZmjoiIiEjC2MwRERERSRibOVIUBwcHDBw4EA4O/OgTkTIxD8oPf5OkKEajEcePH4fRaBQdChGREMyD8sNmjoiIiEjC2MwRERERSRibOSIiIiIJYzNHiqJWqzFu3Dio1WrRoRARCcE8KD98NyspSkhICJYtWyY6DCIiYZgH5Ydn5khRGhoaUFRUhIaGBtGhEBEJwTwoP2zmSFHy8/Mxbdo05Ofniw6FiEgI5kH5YTNHREREJGG8Z66dMplM0Oukcwrcyd0VKpVKdBhERCQTUquDgLhayGaundLrGvBxj4dEh2G2hNyP4OzhJjoMIiKSCanVQUBcLeRlViIiIiIJ45k5UpTo6GgcPXpUdBhERMIwD8oPz8wRERERSRibOVKUwsJCPPbYYygsLBQdChGREMyD8sPLrKQoOp0Op06dgk6nEx0K2VF5VQOOndaisLQWtZcbAQC6ej0KSmrQrbMXn8QmRWEelB82c0QkS1l5lVi/JQtffvcLCkprr1tfXn0F4fFb4Ofjijtig/DUjGiMGRoCBwc2dkQkLWzmiEhWjp3WYtE/j+LbtDKzti+vasBn+wrx2b5CRHbzxvNzB+ChCRE8W0dEksFmTkaChvXGuB1Lmy1rrNOhOq8MudsOIOv9r2AyGAVFR2RbDVcMeHnDcaz44GcYDKY27SOnsBoP/+0ANu/OxzsvjEDnjp5WjpKIbE2JtZDNnAzl7UhF8f4MQKWCe2AHRMy4A3FLH4FPZAgOL9ogOjyhgoODsXTpUgQHB4sOhazoYrkO98zbg/RMrVX2l3KgCH2m7sDOdXdh+IBOVtknUXuhlDyopFrIp1ll6NLJfORtT0XetgPIXJ+MlPFLUFeiRdSDf4Srv7fo8ITy8fFBfHw8fHx8RIdCVnKxXIc7H//Kao3cNRXVVzB27tdIPaax6n6JRFNKHlRSLWQzpwB6XQMuZuRA5eAA727KPstQUVGBrVu3oqKiQnQoZAVXGg0Yn7gHp3MrbbL/y/V6THhmD7LzbbN/IhGUmgflXAvZzCmEOuzqB7eh8vqn+pTk/PnzWLVqFc6fPy86FLKCf7zzE9JOWXZGLi1pEor2zkRa0iSztq+ubcSjL6TCILN7bEi5lJwH5VoLec+cDDm5u8DVT910n0DPh++Cf9/uuJiRg+o8857wI2rvjmdpsfz9ExaPCwrwQJdOlj3YcPinC3jjo0wsnN3X4uMRkRhKqoWKaOa0Wi1ee+017NixA8XFxQgMDMTUqVOxfPlyzJ8/Hx988AHWrl2LxMRE0aFaxcDFMzFw8cxmywpSfsSR594TFBGR9f31zXTo9W17arUtXnw7A09M6wlvLxe7HdOafsq+hP98noNfNLUwmYAunTwxe1IEYnsHig6NyCaUVAtl38ydOHEC8fHx0Gg08PT0RExMDEpLS7FmzRrk5uaivLwcADBgwACxgVpR9qY9KPjyMBycneAbHYo+8ybDM9gfhoYrTdvcsf5ZwEGF75/8V9Mylw5emPzd60hfthF5O1JFhE5klpzCKuw5VGLXY9bp9Pho5zk8PTPGrse9VceztEh89TAOnbhw3bp1SacR1ycQa/46FEP6dRQQHZHtKKkWyvqeOa1Wi4kTJ0Kj0WDhwoUoKytDRkYGNBoNVq5ciZSUFKSlpUGlUqFfv36iw7Wa6jwNylJPomT/cZx6+wvsm70CAQN6YNjKJ5u2Ofzcu+g4uCfCJ49oWjZ0+RxcOHpGMh/etvDw8MCQIUPg4eEhOhS6Bf/eekbIcd/anAWTyX5nA2/VgfQy3P5ISouN3DVHT13EnY9/hT2Hiu0YGYmklDyopFoo62Zu/vz5KC4uRmJiIlavXg21Wt20bvHixejfvz/0ej3CwsLg7S2vx5R/62J6NnK3HUD45BEIjO0JALhSWYtDC9djyD/mwL2TL7qNH4qg4b1x+C/ymnvn90JDQ7F27VqEhoaKDoVuwc7vi4Qc93RuJQpbeDVYe1SkqcW9C75BnU5/023rGwyY9ud9OPdLtR0iI9GUmgflXAtl28xlZWVh8+bNCAgIwKuvvtriNoMGDQIA9O/fv2nZtm3bMG3aNHTr1g0eHh6Ijo7G3/72N9TWSiOBt+an17fBqDdg4KL7m5aVfHsCBV8ewsh18zF0xRM4tHA9Giqk/XPejMFgQG1tLQwGg+hQqI2qa6/gbGGVsOMfO23d+exs5e3NWaisuXLzDf+n9rIeaz7JtGFE1F4oOQ/KtRbKtplLSkqC0WhEQkICvLy8WtzG3d0dQPNmbvXq1XB0dMTy5cuxa9cu/OlPf8L69esxbtw4GI3SnZqgpkCD/C8OovPIfug4pFfT8vSlG6EOD0LJ/uMo3pchMEL7yMnJwejRo5GTkyM6FGqjE2cuCT3+sdNij2+OhisGvLfjrMXj/pucg9rLjTaIiNoTJedBudZC2TZz+/fvBwCMGjWq1W2Ki6/eI/LbZu7LL7/Eli1bkJCQgDvuuAMLFizAunXrcPDgQfzwww+2DdrGfn5zO4yG5t9I9LoG1BZeQEXWLwIjIzLfL5o6wcdv/9/YM7K00FbUWzyuurYRh39q/f46IjmQYy2U7dOshYWFAIBu3bq1uF6v1+PgwYMAmjdzgYHXP6YfGxsLACgpadvTc7GxsdBoLHslkLPJAS8izqIxmsOZ+DB4eqvrq3JKsLHL/a2uvxVRkVFoVNn/zOX06a3/vC25cOFqodq1axeOHTtm1pgpU6ZYHBfZTp3LHwCve1tcl5Y0CUEBN76pOyjAvenfRXtntrqdRnsZgx9Ivm759s+S8d2mhyyI2P7qnSMA9aw2jZ354KNwbzxt5YjIluSaB9tSBwHp1sKgoCCkp6e3aaxsm7m6uqvf3nU6XYvrN2/eDK1WC7VajfDw8Bvu69tvvwUA9OrV64bbtUaj0VjcCLqoHAEJvW2ktKwUV0z2v//i2u/ZXNc+DzqdzuyxbW3iyUY6hAIt3zlh0YTATo4OFk8eDAD1l2vb/2fCwwNQ33yzlpRry4Dadv7zUTNyzYNSq4OAuFoo22YuKCgIFRUVyMjIwLBhw5qtKysrw6JFiwAA/fr1g0qlanU/JSUleP755zFu3Lg2z0UXFBRk8RhnkwMgoVv0Ogd3FnJmztPTsmJ8LXG5u7ubPTYkJMTiuMh26p1d0Npdaxrt5ZuODwpwh5OjA/QGIzTalr/s3Whfnm4mdGjnnwmjyogyUyOgcrZsoMmAoA6NcPRp3z8fNSfXPCi1OgjcWi1sS69wjcokpUmTLDB//nysXbsWXbt2xTfffIOoqCgAQFpaGmbNmoW8vDw0NjZi3rx5WLduXYv7qK2txZ133gmNRoO0tDQEBwfbLf7Gy/X4uEf7vpTzWwm5H8HZw83ux01LS7Noe71ej5qaGqjVajg5mfddZvDgwW0JjWzk/CUdgkZ90ubxRXtnoksnTxSfr0PXsZ9aPP6/r4zEw5Mi23x8e3n0+QP48AvLbnC/7+5wbF412kYRka3INQ9KrQ4C4mqhbB+AWLx4Mfz9/VFUVITevXujb9++iIyMRFxcHLp3747Ro68mrN/eL/dbOp0OEydORH5+Pvbs2WPXRo5sx8nJCb6+vmYnMGp/Ovm7I6SjuMlOB8UECDu2JZ55IAYODq1fdWjJ/Ad72ygaak+YB+VHts1cly5dkJqaivHjx8PNzQ0FBQXw8/PDhg0bkJKSgrNnrz6231Iz19jYiOnTpyM9PR27du1CTIy0Xt9DrSsuLsbChQubnmQmaRoVJ+bLVVCAO6LDfYQc21J/iAnAW0uG3XzD/1m9MA4jBkrsBiVqE+ZB+ZFtMwdcfWBh586dqKmpQU1NDY4cOYK5c+eirq4OBQUFcHBwQJ8+fZqNuTY33b59+/DFF18gLs7yJ2mo/aqtrUVqaqrkJ4FWuqdmtO1hpFv1xLSecHSUTtp86r5e+O8rI6H2bP3eOU93J/z7+RFYOLuvHSMjkZgH5UeR51gzMzNhMpkQFRV13bvp5s2bh61bt+Kvf/0rPDw88OOPPzat69GjR4tTlxCRfQ0f0BH9e/rhp+xyux3T0VGFudOi7XY8a3l4UiSmjgnDJ1/l4oPPziItUwuj0QRnJwe8vngIZk2IgLeXi+gwiegWSOcrphWdPHkSQMuXWHft2gUAWLFiBYYNG9bsn5SUFLvGSUQtU6lUeOlPA+16zMenRKFLkOVTmbQHXh7OmDs9Gj9+PAnB/5tnr6OfG+bNjGEjRyQDijwzd6NmrqCgwM7REFFbTB4dhpnjuuPTr/NsfqzQYE+s+jNvuSCi9onNnIz4xnTD8NVPwdnLHXXFF3HgmbXwjeqKMR8vQXVuKfbMfBn1l6rxh+ceRLd7hsDQ0Aij3oCMFZ+g9LufAAAxcycg+pG7oa+rR/LYRYJ/IusLDAzEggULeLlcJtY+NwzfpZfdcL6437s2f5w5c9IBgEoFvPfS7TyDRbIh5zxobh0c9cEiqLt2bDZu/6OvoWhPuiTroCKbuWvvbZWb295IxMFn30J5ZgEiZo7G4BcexrlPv0V1bmmzD+T5I1n46fVtMNRfgW9MN8R/tgxbBsyFXteA0+/sRPnJfMQte0TcD2JD/v7+SEhIEB0GWUmArxt2vX037nz8K1TVXDFrTEuv6LqR9X8fgbHDOIkuyYec86C5dfDbx1Y1/bd//x4Y+8nfUPLtCQCQZB1U5D1zcuTXJxz6y/UozywAAORu+Q5d74qFg8v1/XrJ/uMw1F8tfBVZvwAqFdz8ve0ZrjDV1dX45ptvUF1dLToUspIB0f7Y/248AnytO1GnSgX8+/kReHKG9B56ILoRueZBS+rgb0U+MBp52w/A2Ki3Q5S2ocgzc3LkFdoRvtGhmLT3128bTu6u8Ajyu+G4yJmjUFt4HrXFF20dYrtQWlqKJUuWYOPGjfD2VkYDqwR/iAlAetIkzHnpB3zzY+kt769bZy98sPR2jB7S2QrREbUvcs2DbamDjm4u6D75Nnw1+Xl7hGgzbOZk5OLxHOx94JWmP8889f4Ntw++rS/6L5yBPfe/bOvQiGyuW2c19mwYh3e3Z+O5N9NRXtVg8T6cnFR4YmpPrHx2MNSevEeOSGosrYPdJgxFVV4pKs/8YuvQbIrNnEzUFp6HZ8ivrxly9nKHk4cbLmtanoer07AYjHjjaex7eAWqc2/9TAZRe6BSqTB3ejRmTYjAlt35eGvzaaSd0t50XEhHDzw5IxpzpvZEcKC4V4URUdtZWgcBIOqBPyInSfr30bOZk4nyzAIYGw0IHtkPZQd+RvQjdyP/i4MwXrn+HoBOQ3vh9rXPYP8jr6HidKGAaIlsy93NCbPvjcTseyNx/pIOx05rcey0FoWltai/YoCLswMCOrjhD738MSgmAD26elv8HlMial8sqYMAoA4Lgn//7tg3e4WdI7U+NnMycmDem7jtjXlwWfEEago0OJC4Br49Q6/bbsQ/n4ajizNue/3pX8c+s1byp5nN4erqip49e8LV1VV0KGQnnfzdcc/tXXHP7V1Fh0LULsg5D5pbB4GrDz4UphxBY635Uxu1V2zmZKTyzC/YOe4vN91ux4hn7BBN+xQeHo5NmzaJDoOISBg550Fz6yAAZLz6iY2jsR9OTSJzhkY9XH3VmLR3lVnTj8TMnYChK+agvrzGDtERERHZlhLqIM/MydzF9GxsjX3K7O1Pv7MTp9/ZacOIxMrOzsZjjz2GDz74AD179hQdDhGR3SktDyqhDvLMHCmKyWRCY2MjTCaT6FCIiIRgHpQfNnNEREREEsbLrO2Uk7srEnI/Eh2G2Zzc5fdUFBERiSO1OgiIq4Vs5toplUoFZw/rvmuSiIhIKlgHzcdmjhQlLCwMSUlJCAkJER0KEZEQzIPyw2aOFMXNzQ09evQQHQYRkTDMg/LDByBIUcrKyvDKK6+grKxMdChEREIwD8oPmzlSlKqqKiQnJ6Oqqkp0KEREQjAPyg+bOSIiIiIJYzNHREREJGFs5oiIiIgkjM0cKYqfnx9mz54NPz8/0aEQEQnBPCg/bOZIURwcHODs7AwHB370iUiZmAflh79JUhStVov33nsPWq1WdChEREIwD8oPmzkiIiIiCWMzR0RERCRhbOaIiIiIJIzNHCmKWq3GuHHjoFarRYdCRCQE86D8OIkOgMieQkJCsGzZMtFhEBEJwzwoPzwzR4rS0NCAoqIiNDQ0iA6FiEgI5kH5YTNHipKfn49p06YhPz9fdChEREIwD8oPL7O2UyaTCXqddL41Obm7QqVSiQ6DiIhkQmp1EBBXC9nMtVN6XQM+7vGQ6DDMlpD7EZw93ESHQUREMiG1OgiIq4W8zEpEREQkYWzmiIiIiCSMl1lJUaKjo3H06FHRYRARCcM8KD88M0dEREQkYWzmSFEKCwvx2GOPobCwUHQoRHZnMplgMpma/puUiXlQfniZlRRFp9Ph1KlT0Ol0okMhsrmK6gZs3ZOPIycv4thpLTJzK6DXX23iSi/q0G/aDgyKCUBcn0DMuCscAb58Il0JmAflh80cEZHMnDhzCWs+yUTSrjzUNxha3e5kTgVO5lTgwy9y8OyqI7jvrnA882AMBvcJtGO0RHSr2MzJSNCw3hi3Y2mzZY11OlTnlSF32wFkvf8VTAajoOiIyNZ09Xr8fd0xvL7pFCy9itpwxYBNO89h085zSHwgBisWxMLTw9k2gRLZkBJrIZs5GcrbkYri/RmASgX3wA6ImHEH4pY+Ap/IEBxetEF0eERkAz+fLceMhftxtrDqlve1Luk0vkotwuZVoxDbm2fpSJqUVAv5AIQMXTqZj7ztqcjbdgCZ65ORMn4J6kq0iHrwj3D19xYdnlDBwcFYunQpgoODRYdCZDVHfr6AOx5NsUojd01ecQ1GPb4L36eXWW2f1D4oJQ8qqRaymVMAva4BFzNyoHJwgHe3TqLDEcrHxwfx8fHw8fERHQqRVfx8thzj/rQblTVXrL7v2suNmJC4F2mnLlp93ySOUvOgnGshmzmFUIdd/eA2VNYKjkSsiooKbN26FRUVFaJDIbpl9Q163L9ov00auWtqLzfi/kXfovZyo82OQfal5Dwo11rIZk6GnNxd4Oqnhqu/NzpEh2LI8jnw79sdFzNyUJ2n7Esm58+fx6pVq3D+/HnRoRDdshffzsCZfMsuraYlTULR3plIS5pk9pj8khr89Y00S8OjdkopeVBJtVARD0BotVq89tpr2LFjB4qLixEYGIipU6di+fLlmD9/Pj744AOsXbsWiYmJokO1ioGLZ2Lg4pnNlhWk/Igjz70nKCIisrZTOeVY/d9TFo8LCvBAl06eFo9769MsPDwxEnF9pftAxIVLOpzIvoTL9Xr4eLkgrk8gn9iVMSXVQtk3cydOnEB8fDw0Gg08PT0RExOD0tJSrFmzBrm5uSgvLwcADBgwQGygVpS9aQ8KvjwMB2cn+EaHos+8yfAM9oeh4ddLMXesfxZwUOH7J//VtMylgxcmf/c60pdtRN6OVBGhE5GZ1n2aBaPRvm9xWJuUiU1977TrMa3hyM8XsOaT09i6Jx+N+l+npPBRu2D2xAjMT+iNHl3ldUM8KasWyvoyq1arxcSJE6HRaLBw4UKUlZUhIyMDGo0GK1euREpKCtLS0qBSqdCvXz/R4VpNdZ4GZaknUbL/OE69/QX2zV6BgAE9MGzlk03bHH7uXXQc3BPhk0c0LRu6fA4uHD0jmQ8vkVJV1VzBRzvP2f24W3bn48Ilab01YO0nmRg260t88lVus0YOuPr/cc0npzFgxmfYc6hYUIRkK0qqhbJu5ubPn4/i4mIkJiZi9erVUKvVTesWL16M/v37Q6/XIywsDN7e8v1WdjE9G7nbDiB88ggExvYEAFyprMWhhesx5B9z4N7JF93GD0XQ8N44/Bd5zb3zex4eHhgyZAg8PDxEh0LUZp/tL0CdTm/3415pNGLLnny7H7et/vP5Wcxf8eNNJ1CuvazHvQu+wY8/XbBPYIIpNQ/KuRbKtpnLysrC5s2bERAQgFdffbXFbQYNGgQA6N+/f9Oy1NRUjBkzBsHBwXB1dUWXLl1w//33Iysryy5x28pPr2+DUW/AwEX3Ny0r+fYECr48hJHr5mPoiidwaOF6NFTI6wmf3wsNDcXatWsRGhoqOhSiNjt6UtxUIVKZpqT2ciMWrPzR7O3rGwx4ZsVhG0bUfig5D8q1Fsq2mUtKSoLRaERCQgK8vLxa3Mbd3R1A82auoqICffv2xZo1a7Bnzx6sXLkSmZmZGDZsGIqLpXsavqZAg/wvDqLzyH7oOKRX0/L0pRuhDg9Cyf7jKN6XITBC+zAYDKitrYXB0Pr7Konau/TTWmHHPibw2Jb4OCUXNXWWTaeSnqmVTLN6K5ScB+VaC2XbzO3fvx8AMGrUqFa3udac/baZmzRpEl5//XXMmDEDd9xxBxISErBjxw5UVVVh+/bttg3axn5+czuMhubfSPS6BtQWXkBF1i8CI7OfnJwcjB49Gjk5OaJDIWqzzHOVwo6dlV8FgwTea/nhF2fbNO6/yfLPDUrPg3KshbJ9mrWwsBAA0K1btxbX6/V6HDx4EEDzZq4l/v7+AAAnp7b974qNjYVGo7FojLPJAS8izqIxmsOZ+DB4eqvrq3JKsLHL/a2uvxVRkVFoVNk/wU+f3vrP25ILF67eE7Nr1y4cO3bMrDFTpkyxOC4iWzEBuOy3tNX1aUmTEBTQ+r1QQQHuTf8u2juz1e002ssY/EDydcuNRhO6dusBB7TvSYTLOvwZcLD8DQfvb/wMn799nw0ish255sG21EFAurUwKCgI6enpbRor22aurq4OAKDTtfzk1ebNm6HVaqFWqxEeHn7deoPBAKPRiMLCQjz33HMICgrCffe17S+4RqNBSUmJRWNcVI6AhN42UlpWiism+5+yv/Z7Nte1z4NOpzN7rKW/OyKb82t9lbnzyDk5OrRpvjkAKCstBUy2e+uEVXgZABfLh9XrdJL7Oy/XPCi1OgiIq4WybeaCgoJQUVGBjIwMDBs2rNm6srIyLFq0CADQr18/qFSq68bfcccdTWfuIiIisH//fgQGtm2yzKCgIIvHOJscgPZ/JaNJ5+DOQs7MeXpaVoyuJS53d3ezx4aEhFgcF5EtlZoaYFK5trhOo718w7FBAe5wcnSA3mCERtv6NCOt7sdkROfOHaGCfee4s9RFVS2u3KjrbYWn6xV0kNjfebnmQanVQeDWamFbeoVrVCbTzR7alqb58+dj7dq16Nq1K7755htERUUBANLS0jBr1izk5eWhsbER8+bNw7p1664bn52djcrKSuTn52PVqlW4cOECDh48aLenfxov1+PjHg/Z5VjWkJD7EZw93Ox+3LQ0y14xdObMGTz88MPYuHEjoqOjzRozePDgtoRGZDNDHkzG0TbeqF+0dya6dPJE8fk6dB37qcXj+0T44uSOqW06tj29u+0M5i47aPG49E/vxaCYABtEZDtyzYNSq4OAuFoo2wcgFi9eDH9/fxQVFaF3797o27cvIiMjERcXh+7du2P06NEAWr9frmfPnhgyZAhmzpyJffv2oaamBq+99po9fwSygYiICOzevRsRERGiQyFqs0Ex/gKPLY1G58F7esDby7JXdcX1CZTMz3crmAflR7bNXJcuXZCamorx48fDzc0NBQUF8PPzw4YNG5CSkoKzZ68+6XSzhx8AoEOHDoiIiMC5c/afcZ2sy8nJCb6+vm1+mIWoPRjSt6OwY8f1kUaz4+nhjHXPDbv5hv/j4eaEdUvM317KmAflR7bNHAD06tULO3fuRE1NDWpqanDkyBHMnTsXdXV1KCgogIODA/r06XPT/Vy4cAHZ2dno0aOHHaImWyouLsbChQslPWcg0ZQ/doOnu/0LsauLI+67u7vdj9tWsyZGYv3fh8PB4fr7on/L28sZX64di8F92nZftNQwD8qPrJu51mRmZsJkMiEyMvK615k89NBDeOmll/D555/ju+++w7vvvos777wTTk5OePbZZwVFTNZSW1uL1NRU1NZKa3Zvot/y9nLBrAn2v0R2313hCPC1//1At+Kp+3rh6CeTMHtSJFxdHJut8/Nxxf/N7ouftk7B6CGdBUVof8yD8qPIZu7kyZMAWr7EOnToUHz11Vd49NFHER8fj1WrVuH222/HiRMneH8BEbUbzzwYA0fHG59xsrb5CTF2PZ61DIoJwIevjETJNzMR0OHqU8ABHVxRvHcmVi2MQ1iI+iZ7IGrfFHnB/EbNXGJiIhITE+0dEhGRRWJ6+GLxI/3w6vs/2eV48x+MQWxvaV+G9O/g1nR2ztXFEe5uiiyBJEOK/CTfqJmTMt+Ybhi++ik4e7mjrvgiDjyzFr5RXTHm4yWozi3Fnpkvo/5SNQb+9QGE3hUL0/9eyXNy3efI/+LqI/yxz89C2L3DUX4yH/sf5dO7RO3Zi38aiOTvCpGZW2n2mGvzx91sPrrf6tFVjeXzYy0Nj8juzK2D6vAgDF/1FFx9POHo5oKib44hfdkmwGRCzNwJiH7kbujr6pE8dpHoH8ksimzmrr23VW5ueyMRB599C+WZBYiYORqDX3gY5z79FtW5pc0+kJlvf4HjK5IAAB5Bfph84A2Upv6MhvIapL+8CZXZRQiNt/wVKlIQGBiIBQsWtHkCaKL2xNXFEZtXjcbIR1NQXtVg1piWXtF1I2pPZ2xZNRqeHpZN80Htl5zzoLl1cPALD+OXXUeR9f5XcHR1xoRdK1A26iRK9h/H6Xd2ovxkPuKWPSLuB7GQIu+ZkyO/PuHQX65HeWYBACB3y3foelcsHFyu79evVP/6jdzJ0w0qlarFt2DIkb+/PxISEpret0skdb0jfPH1+rvh692Gd1fdhLeXM7566y78QQFzrymJXPOgJXXQZDLB2fvqA5CObi5wcHaC7kKlHaO1LkWemZMjr9CO8I0OxaS9q5qWObm7wiOo5dfZ9Hr8HkQ/cjc8Ovvj0ML1qL9Uba9QhaqursbRo0cRFxcHb29v0eEQWcXgPoE48J/xuG/Rt8jKq7TKPiO7eWPza6MwsBcbObmRax60pA4efeE/+ON/n0P0w3fBxccTP72xHeWn8u0ZrlXxzJyMXDyeg+Sxi5r+aaxt/Z6YrPe/wme3L8BXE/+GfvOnwtXXy46RilNaWoolS5agtLRUdChEVtUn0g8Zm+/FXx/vd9N51W5EpQKendUbJ7ZMYSMnU3LOg+bWwejZ45D/+Q/YMnAutg3+E7pPvR3BI/vZOVrrYTMnE7WF5+EZ8mvidfZyh5OHGy5rym84ruJ0IS5ryhE0vLetQyQiG3NzdcKrCwbjp62T8eSMaIsmFnZzdcRjU6KQsXky/rVoKDwETEpMdCssqYPRj96Nc1u+AwDUX6pGyb4MSddBNnMyUZ5ZAGOjoembRfQjdyP/i4MwXtFft61PVJem/1Z36wS/PuGoPMuZwInkok+kH/79/AiUfPMA3l96O56cEY3Y3gFwc/110lxXF0f8oZc/npjWE++88Ou2A6LldR8VKYcldbCm8AJCRg0EcPVSbNCIPqg884td47UmfvWSkQPz3sRtb8yDy4onUFOgwYHENfDtGXrddrF/nwWv0I4wNephNBjx45L3UZVTIiBiIrIlH7ULHpsShcemRDUtM/xvSiJHR36XJ/kxtw7+sGAdhvzjccTMuQcOLk4o2p2O/M8PCojYOtjMyUjlmV+wc9xfbrrdvodftUM07ZOrqyt69uwJV1dX0aEQCcEmjuScB82tg+Wn8rHr3r/bISL74N9qmTM06uHqq8akvavg5n/zp5Zin5+Fvs9MQUOlPN/ZFx4ejk2bNiE8PFx0KEREQigtD1paB2PmTsDQFXNQX15jh+isg2fmZO5ieja2xj5l9vbpL29C+subbBgRERGR/VhaB0+/sxOn39lpw4isj2fmSFGys7MxYsQIZGdniw6FiEgI5kH5YTNHimIymdDY2AiTySQ6FCIiIZgH5YeXWdspJ3dXJOR+JDoMszm5y+9GWiIiEkdqdRAQVwvZzLVTKpUKzh5uosMgIiISgnXQfLzMSkRERCRhPDNHihIWFoakpCSEhISIDoWISAjmQflhM0eK4ubmhh49eogOg4hIGOZB+eFlVlKUsrIyvPLKKygrKxMdChGREMyD8sNmjhSlqqoKycnJqKqqEh0KEZEQzIPyw2aOiIiISMLYzBERERFJGJs5IiIiIgljM0eK4uDggIEDB8LBgR99IlIm5kH54W+SFMVoNOL48eMwGo2iQyEiEoJ5UH7YzBERERFJGJs5IiIiIgljM0dEREQkYWzmSFHUajXGjRsHtVotOhQiIiGYB+WH72YlRQkJCcGyZctEh0FEJAzzoPzwzBwpSkNDA4qKitDQ0CA6FCIiIZgH5YfNHClKfn4+pk2bhvz8fNGhEBEJwTwoP7zM2k6ZTCboddL51uTk7gqVSiU6DCIikgmp1UFAXC1kM9dO6XUN+LjHQ6LDMFtC7kdw9nATHQYREcmE1OogIK4W8jIrERERkYSxmSMiIiKSMF5mJUWJjo7G0aNHRYdBRCQM86D88MwcERERkYSxmSNFKSwsxGOPPYbCwkLRoRARCcE8KD+8zEqKotPpcOrUKeh0OtGhEJEdGI0mnC2swrHTWmRkXUJ51dWpLsqrG/D3tekYFBOAQTEB6BrkqZjplZgH5YfNHBERyU7Zxct4d3s23tl2BiUXLl+3XldvwD/e/anpz30ifPH0/b3w0IQeUHu62DNUolvGy6xERCQbtZcb8cyrhxF696d48e2MFhu5lpw6V4Gn/3EIIWM+xT//exIGg9HGkRJZD8/MyUjQsN4Yt2Nps2WNdTpU55Uhd9sBZL3/FUxMUEQkU9+lleGxF1KRX1LT5n3U1DXi//55FNu/KcB/lt2OnuEdrBcg2YUSayGbORnK25GK4v0ZgEoF98AOiJhxB+KWPgKfyBAcXrRBdHhCBQcHY+nSpQgODhYdChFZ0fs7sjF32UEYjSar7O/wTxcQl5CMnWvvwu2Dgqyyz/ZCKXlQSbWQl1ll6NLJfORtT0XetgPIXJ+MlPFLUFeiRdSDf4Srv7fo8ITy8fFBfHw8fHx8RIdCRFbywWdnMeelH6zWyF1TXduIcX/ajUMnzlt1v6IpJQ8qqRaymVMAva4BFzNyoHJwgHe3TqLDEaqiogJbt25FRUWF6FCIyAoOpJfhiaU/2Gz/l+v1mJC4ByXn62x2DHtTah6Ucy1kM6cQ6rCrH9yGylrBkYh1/vx5rFq1CufPy+ubNpES1V1uxKMvpFp0Ri4taRKK9s5EWtIks8dUVF/Bky8fhMlk3TN/oig5D8q1FvKeORlycneBq5+66T6Bng/fBf++3XExIwfVeWWiwyMisoq/rT2GvGLLHnYICvBAl06eFh8r5UARNn15Dg9PirR4LImhpFoo+2ZOq9Xitddew44dO1BcXIzAwEBMnToVy5cvx/z58/HBBx9g7dq1SExMFB2q1QxcPBMDF89stqwg5Uccee49QREREVnXhUs6vL05y67HXLbhOB6aEAEHB2VMLix1SqqFsm7mTpw4gfj4eGg0Gnh6eiImJgalpaVYs2YNcnNzUV5eDgAYMGCA2ECtLHvTHhR8eRgOzk7wjQ5Fn3mT4RnsD0PDlaZt7lj/LOCgwvdP/qtpmUsHL0z+7nWkL9uIvB2pIkInIjLL+5+dRaPevtNL5BbVYO/hEtw9ootdj0tto6RaKNt75rRaLSZOnAiNRoOFCxeirKwMGRkZ0Gg0WLlyJVJSUpCWlgaVSoV+/fqJDteqqvM0KEs9iZL9x3Hq7S+wb/YKBAzogWErn2za5vBz76Lj4J4InzyiadnQ5XNw4egZyXx428LDwwNDhgyBh4eH6FCIqI1MJhM2bDsj5Nj/3irmuNaklDyopFoo22Zu/vz5KC4uRmJiIlavXg21Wt20bvHixejfvz/0ej3CwsLg7S2vR5R/72J6NnK3HUD45BEIjO0JALhSWYtDC9djyD/mwL2TL7qNH4qg4b1x+C/ymnvn90JDQ7F27VqEhoaKDoWI2ii/pAaFpWJuYP8+vUzyD0IoNQ/KuRbKspnLysrC5s2bERAQgFdffbXFbQYNGgQA6N+/f6v7iY+Ph0qlwksvvWSLMO3qp9e3wag3YOCi+5uWlXx7AgVfHsLIdfMxdMUTOLRwPRoq5PWEz+8ZDAbU1tbCYDCIDoWI2ujY6UvCjl1RfeWW3jDRHig5D8q1FsqymUtKSoLRaERCQgK8vLxa3Mbd3R1A683cli1bcOLECVuFaHc1BRrkf3EQnUf2Q8chvZqWpy/dCHV4EEr2H0fxvgyBEdpHTk4ORo8ejZycHNGhEFEbHc8S18wBYptJa1ByHpRrLZTlAxD79+8HAIwaNarVbYqLiwG03MxVV1fj//2//4fVq1fjoYceuuV4YmNjodFoLBrjbHLAi4i75WP/1s9vbkf45BEYuOh+7J7+EoCrkyjWFl5ARdYvt7TvqMgoNKrs/6676dOnW7T9hQsXAAC7du3CsWPHzBozZcoUi+MiItup8JgEuA1qcV1a0iQEBbR+L1hQgHvTv4v2zmx1OwDQaC9j8APJ1y1/4k9/xrMNaRZEbFtyzYO2qINA+62FQUFBSE9Pb9NYWTZzhYWFAIBu3bq1uF6v1+PgwYMAWm7m/va3vyEqKgoJCQlWaeY0Gg1KSkosGuOicgQsnKBaczgTHwa3/pe6KqcEG7vc3+r6W1FaVoorJvufsq+rs2xWdp1O1/Rvc8da+rsjIhvrUg+4tbzK3HnknBwd2jTfHABUVdWg6lL7yQtyzYNtqYOAMmuhLJu5ax/Oax/Y39u8eTO0Wi3UajXCw8ObrUtPT8e7775r9rcVcwQFWf6SZmeTA2D/E11t1jm4s5Azc56eliXja58Nd3d3s8eGhIRYHBcR2U6Fuysut7JOo21tzVVBAe5wcnSA3mCERttyjbjZvjr4eMHTrf3kBbnmQanVQeDWamFbeoVrZNnMBQUFoaKiAhkZGRg2bFizdWVlZVi0aBEAoF+/flCpfp380WAw4Mknn0RiYiJ69+5ttXjactq08XI9Pu5x62cF7eVszlk4e7TyVdmG0tIsu9Rx5swZJCUlIT4+HtHR0WaNeeONN9oQGRHZyj/eOYG/r2v5C3dLl0V/q2jvTHTp5AmNVoeuYz9t0/GT/rsO425rP3PNyTUPSq0OAuJqoSybuTFjxiArKwsrV67E2LFjERUVBeDqB37WrFnQarUArp8seN26dTh//rwsnl61xNfTXhQdgt1ERERg9+7dzaaqISJpGRQTIPj4/kKPf6uYB1sm5Vooy6dZFy9eDH9/fxQVFaF3797o27cvIiMjERcXh+7du2P06NEAmt8vp9Vq8fzzz+OFF16AXq9HZWUlKisrAQD19fWorKyE0Six8710HScnJ/j6+sLJSZbfY4gUQWQz1TXIE4F+7sKObw3Mg/Ijy2auS5cuSE1Nxfjx4+Hm5oaCggL4+flhw4YNSElJwdmzZwE0b+aKi4tRU1ODJ598Er6+vk3/AMDKlSvh6+uLX365tadcSLzi4mIsXLiw6WlmIpKeQD93DOkbKOTYE0Z2FXJca2IelB/ZtuW9evXCzp07r1teW1uLgoICODg4oE+fPk3LIyIi8O233163/ahRozB79mw88sgjt3RzIrUPtbW1SE1NxRNPPCE6FCK6BU/f3wtHTl4UclypYx6UH9k2c63JzMyEyWRCVFRUs/fSeXl54c4772xxTFhYWKvriIjI/u67Oxx/Xn0Elyob7HbM2wZ2Qp9IP7sdj8hcsrzMeiMnT54EcOPXeBERUfvm5uqE5fNj7XY8BwcVVi+0/gS2RNaguDNzljZzUnqhsm9MNwxf/RScvdxRV3wRB55ZC9+orhjz8RJU55Ziz8yXUX+puml7n8gQTNz9Gs5+tBdHX/gQABAzdwKiH7kb+rp6JI9dJOgnISK6uSem9cTWPfn45sdSmx/r/2b3wZB+HW1+HLo15tZBdXgQhr36BNwCfKBycsRP/9qKguRDAKRZB3lmTkZueyMRhxdtwOcj/x/ykw9j8AsPAwCqc0uRPHZRs0ZO5eSI4aueQuGuo832cfqdnTi08N92jdueAgMDsWDBAgQGirl5moisR6VS4b2XbkOAr/nzemm0l1F8vu6mkwv/1oBoPyx9+g9tCbFdknMeNLcO3vZGIvKTDyF5zP/h62kvIvb5WfAIunoJXYp1UHHN3P79+2EymTB+/HjRoViVX59w6C/XozyzAACQu+U7dL0rFg4uLZ98HfDnGSj48jBq8srsGKV4/v7+SEhIgL+/tOeJIqKrunVWY/f6u+GjdjFr+8EPJKPr2E9vOrnwNVHdfPD1+nFwc5XPhSy55kFL6qBf724o3pcBAGi4VI3yzAKE3TvcnuFalXw+nQrnFdoRvtGhmLR3VdMyJ3fXpm8avxUwMBKBg6Kw5/5lGLDwPnuGKVx1dTWOHj2KuLg4eHt7iw6HiKzgDzEB+O79exD/9O6bvqLLEgOj/bFr/d3o5C/teeV+T6550JI6eOnnPPSYNhKn3v4CXqEd0XFwT9QW2f/paGtR3Jk5Obt4PAfJYxc1/dNYe/1lBEd3FwxdMQeH/k9ap5CtpbS0FEuWLEFpqe3vsSEi+xkQ7Y+T26di5rjut7wvR0cVlszpj8MfTZRdIwfIOw+aUwcB4If56xDwh0hM2rsKcUsfRVnqSZgMBjtHaz08MycTtYXn4Rny6ytunL3c4eThhsua8mbbqbsFwSskAOO2vwQAcPH2BBxUcPHxwg8L1tkzZCIiqwrwdUPSa6Nw393heGn9cfx8tvzmg35ndFwwVj47GLG95Xc/mdyZWwcBoLb4Ir6bs7rpz2M/+RtKv//JLnHaAps5mSjPLICx0YDgkf1QduBnRD9yN/K/OAjjFX2z7SrP/IJP+zze9OcBC++Di49H09OsRERSN+WPYZg8uhsOnbiA9Vuy8G1aGUovtP7AQ0SoN+65rQv+dH8vRId3sF+gZFXm1kEAcAvwufowhMmEznf2h09UF+R99oOAqK2DzZyMHJj3Jm57Yx5cVjyBmgINDiSugW/PUNFhERHZnUqlwoiBnTBiYCcAQNnFy8jI0uJiRT2uNBrh6uyIrkGe+EMvf3TwdhUcLVmLuXWw612x6Js4GSaDEZfPV+CbhOUw1F8RELF1sJmTkcozv2DnuL9YNObEP7fYKJr2ydXVFT179oSrK5M3kZIEB3pgfCC/3ALyzoPm1sGcT/Yh55N9dojIPvgAhMwZGvVw9VVj0t5VcPO/+VNLMXMnYOiKOagvr7FDdPYXHh6OTZs2ITw8XHQoRERCKC0PKqEO8syczF1Mz8bW2KfM3v70Oztx+p2dNoyIiIjIfpRQB3lmjhQlOzsbI0aMQHZ2tuhQiIiEYB6UHzZzpCgmkwmNjY2SeucuEZE1MQ/KDy+ztlNO7q5IyP1IdBhmc3KX3420REQkjtTqICCuFrKZa6dUKhWcPcx/eTQREZGcsA6aj5dZiYiIiCSMZ+ZIUcLCwpCUlISQkBDRoRARCcE8KD9s5khR3Nzc0KNHD9FhEBEJwzwoP7zMSopSVlaGV155BWVlZaJDISISgnlQftjMkaJUVVUhOTkZVVVVokMhIhKCeVB+2MwRERERSRibOSIiIiIJYzNHREREJGFs5khR/Pz8MHv2bPj5+YkOhYhICOZB+VGZ+HI2IiIiIsnimTkiIiIiCWMzR0RERCRhbOaIiIiIJIzNHBEREZGEsZkjIiIikjA2c0REREQSxmaOiIiISMLYzBERERFJGJs5IiIiIgljM0dEREQkYWzmiIiIiCSMzRwRERGRhLGZIyIiIpIwNnNEREREEsZmjoiIiEjC/j8vqMv9e7cT+gAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 789.163x451.5 with 1 Axes>"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "## Let's plot an example\n",
    "\n",
    "params = ParameterVector('θ',10)\n",
    "variational_ansatz(5, params).draw(\"mpl\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "332d5c92",
   "metadata": {},
   "source": [
    "#### Evaluating energy and the gradient\n",
    "\n",
    "Now we focus on the core part of the VQE algorithm: the evaluation of the energy and of its gradient on the quantum hardware.\n",
    "\n",
    "Qiskit has built-in methods for this, but we are going to implement ours from scratch."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "dca6b018",
   "metadata": {},
   "source": [
    "First, we want a circuit to measure the expecation value of the Hamiltonian on our trial state"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "id": "c3442af4",
   "metadata": {},
   "outputs": [],
   "source": [
    "def energy(quantum_circuit, hamiltonian, parameters, estimator):\n",
    "    ## This function evaluates the energy during a VQE calculation\n",
    "    return estimator.run(quantum_circuit, hamiltonian, parameters).result().values[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "id": "99c303c1",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/var/folders/tm/_gmf5zrn1rx6sb_cxbflh3_00000gq/T/ipykernel_53439/3923375788.py:4: DeprecationWarning: The class ``qiskit.primitives.estimator.Estimator`` is deprecated as of qiskit 1.2. It will be removed no earlier than 3 months after the release date. All implementations of the `BaseEstimatorV1` interface have been deprecated in favor of their V2 counterparts. The V2 alternative for the `Estimator` class is `StatevectorEstimator`.\n",
      "  estimator = Estimator()\n"
     ]
    }
   ],
   "source": [
    "## Example energy estimation\n",
    "param_vec = ParameterVector(\"θ\",4)\n",
    "q_circuit = variational_ansatz(2,param_vec)\n",
    "estimator = Estimator()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "id": "e5a3dafb",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "np.float64(-0.7895223755019953)"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "energy(q_circuit, qubit_op, np.random.rand(4), estimator)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "efa2c5a9",
   "metadata": {},
   "source": [
    "Now things get interesting! In order to optimize our parameters $\\theta$, a quantum computer has to give to classical optimizer important information such as first- or second-order derivatives! But how can we measure the derivative wrt to a specific parameter on a quantum circuit?\n",
    "\n",
    "$$\n",
    "\\frac{\\partial }{\\partial \\theta_i} L(\\theta) = \\frac{\\partial }{\\partial \\theta_i} \\langle \\psi(\\theta) | H | \\psi(\\theta) \\rangle\n",
    "$$\n",
    "\n",
    "many different methods have been proposed recently, in this case we are going to see a method  that is called _parameter shift_:\n",
    "\n",
    "- assume that every parametrized gate is of the form $$ U_j(\\theta_j) = e^{-i \\theta_j G_j}= \\cos(\\theta_j)\\mathbf{I} -i \\sin(\\theta_j)G_j$$ where $G_j$ is an operator such that $G_{j}^{2} = \\mathbf{I}$\n",
    "\n",
    "- then the derivative can be expressed as $$ \\frac{\\partial }{\\partial \\theta_i} L(\\theta) = \\frac{L(\\theta+ e_i s)-L(\\theta-e_is)}{2\\sin(s)}  $$ where $s \\in \\mathbf{R}$ and $e_i$ indicates the versor in the $i$-th direction. In our case we are going to consider $s= \\frac{\\pi}{2}$.\n",
    "\n",
    "This means that to calculate the gradient with $N_p$ parameters, we have to measure $H$ on $2N_p$ different circuits, but it's possible!\n",
    "\n",
    "Note that the assumption we made is quite general: $G_j$ could be every tensor product of Pauli operators"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "id": "6d40bafd",
   "metadata": {},
   "outputs": [],
   "source": [
    "#useful function to shift the parameters\n",
    "def ei(i,n):\n",
    "    '''unit vector in direction i of size n'''\n",
    "    vi = np.zeros(n)\n",
    "    vi[i] = 1.0\n",
    "    return vi[:]\n",
    "\n",
    "\n",
    "def gradient(quantum_circuit, hamiltonian, parameters, estimator):\n",
    "\n",
    "    n_parameters = len(parameters)\n",
    "    g = np.zeros(n_parameters)\n",
    "\n",
    "    for i in range(n_parameters):\n",
    "        Ep  = energy(quantum_circuit, hamiltonian, parameters + ei(i,n_parameters)*np.pi/2.0, estimator)\n",
    "        Em = energy(quantum_circuit, hamiltonian, parameters - ei(i,n_parameters)*np.pi/2.0, estimator)\n",
    "        g[i] = (Ep-Em)/2.0\n",
    "    return g"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "867b7184",
   "metadata": {},
   "source": [
    "#### The VQE algorithm\n",
    "\n",
    "Now we declare a function to repeat iteratively the procedure of measuring energy, its gradient and then optimizing the parameters using a standard gradient descent technique, namely $$ \\theta_{new}= \\theta_{old} - \\eta \\nabla_{\\theta} L(\\theta)$$ with $\\eta \\in \\mathbf{R}$ as the learning rate."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "id": "af9861a2",
   "metadata": {},
   "outputs": [],
   "source": [
    "def VQE(operator=None, ansatz=None, init_params=None, init_state=None, estimator=None, max_iter=100, lr=0.1):\n",
    "\n",
    "    \"\"\"\n",
    "    Args: \n",
    "        operator: the hamiltonian as a qubit operator\n",
    "        ansatz: the variational ansatz\n",
    "        init_params: the initital parameters\n",
    "        init_state: circuit to prepare the initial state (e.g. the Hartree-Fock state)\n",
    "        estimator: qiskit Estimator object, to be passed to energy(...) and gradient(...)\n",
    "        max_iter: number of gradient descent iterations\n",
    "        lr: learning rate η\n",
    "    Returns:\n",
    "        energies: list of estimated energies at each step of the vqe \n",
    "        gradients:  list of estimated gradients at each step of the vqe \n",
    "    \"\"\"\n",
    "    # compose initial state preparation and ansatz\n",
    "    quantum_circuit = init_state.compose(ansatz(operator.num_qubits, ParameterVector('θ', len(init_params))))\n",
    "    \n",
    "    energies = []\n",
    "    gradients = []\n",
    "    \n",
    "    params = init_params.copy()\n",
    "    \n",
    "    for i in range(max_iter):\n",
    "   \n",
    "        ## Measure energy and gradient\n",
    "        E = energy(quantum_circuit, operator, params, estimator)\n",
    "        g = gradient(quantum_circuit, operator, params, estimator)\n",
    "     \n",
    "        # Update the parameters\n",
    "        params = params - lr * g\n",
    "\n",
    "        # log energies and gradients\n",
    "        energies.append(E)\n",
    "        gradients.append(g)\n",
    "\n",
    "    return energies, gradients"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0eb21f92",
   "metadata": {},
   "source": [
    "#### Perform the optimization on a single configuration"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "id": "820a4d86",
   "metadata": {},
   "outputs": [],
   "source": [
    "molecule    = MoleculeInfo([\"H\", \"H\"], [(0.0, 0.0, 0.0), (0.0, 0.0, 0.735)], charge=0, multiplicity=1)\n",
    "driver      = PySCFDriver.from_molecule(molecule, basis=\"sto6g\")\n",
    "problem     = driver.run()\n",
    "hamiltonian = problem.second_q_ops()[0]\n",
    "    \n",
    "nucl_shift  = problem.nuclear_repulsion_energy\n",
    "\n",
    "\n",
    "mapper      = ParityMapper(num_particles=problem.num_particles) # Parity mapper requires the spin up and down electrons\n",
    "qubit_op    = mapper.map(hamiltonian)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "id": "c9a280f0",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/var/folders/tm/_gmf5zrn1rx6sb_cxbflh3_00000gq/T/ipykernel_53439/2826603837.py:9: DeprecationWarning: The class ``qiskit.primitives.estimator.Estimator`` is deprecated as of qiskit 1.2. It will be removed no earlier than 3 months after the release date. All implementations of the `BaseEstimatorV1` interface have been deprecated in favor of their V2 counterparts. The V2 alternative for the `Estimator` class is `StatevectorEstimator`.\n",
      "  estimator = Estimator()\n"
     ]
    }
   ],
   "source": [
    "# Now create the circuit\n",
    "n_qubits    = qubit_op.num_qubits\n",
    "init_params = np.random.rand(2*n_qubits)\n",
    "init_state  = HartreeFock(num_spatial_orbitals=problem.num_spatial_orbitals, num_particles=problem.num_particles, qubit_mapper=mapper)\n",
    "\n",
    "\n",
    "n_reps = 50\n",
    "lr = 0.5\n",
    "estimator = Estimator()\n",
    "\n",
    "energies_vqe, gradients_vqe = VQE(qubit_op,variational_ansatz,init_params,init_state,estimator,n_reps,lr)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "id": "a51420e1",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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RVF037VhQHbAW2+9Jfbq1UsMDQ0Vk5KSxCNHjkhdksd99913IoBWX08++aQois1TPV588UUxNjZWlMvlYkpKilhYWCht0R5i67oAED/88ENLm1u3bom/+c1vxG7duoldu3YVp0+fLpaWlkpXtAc99dRTYu/evcXQ0FAxOjpaTElJsYSjKAb2tbGlZUAG8vWZOXOmqNFoxNDQULFHjx7izJkzxQsXLliOu+vacLsrIiIiG/gMkoiIyAYGJBERkQ0MSCIiIhsYkERERDYwIImIiGxgQBIREdnAgCQiIrKBAUlERGQDA5LIz1y/fh0LFixAr169IJfLoVarMXHiRBw+fBgAIAgCtm/fLm2RRD6A210R+ZkZM2agoaEBmzZtQt++fXHt2jXs3bsXFRUVUpdG5FO41ByRH6msrES3bt2wf/9+jBs3rtXxPn364NKlS5bve/fujX/+858AgK+++gqZmZkoKCiAVqvFk08+iRUrViA4uPnf0YIg4J133sGOHTuwf/9+aDQarFmzBo8++qhH3huRp/EWK5EfCQ8PR3h4OLZv3476+vpWx82703/44YcoLS21fP/999/jiSeewLPPPouCggK8++672LhxI1566SWr81988UXMmDEDP/zwA9LT0zFr1iycPXu2898YkQTYgyTyM1988QXmzZuHW7duITExEePGjcOsWbMwdOhQAM09wW3btmHatGmWc1JTU5GSkoLly5dbXtu8eTOef/55lJSUWM575plnsG7dOkube++9F4mJiXjnnXc88+aIPIg9SCI/M2PGDJSUlGDHjh1IS0vD/v37kZiYiI0bN9o954cffsAf/vAHSw80PDwc8+bNQ2lpKerq6iztWm44m5yczB4k+S0O0iHyQwqFAhMmTMCECRPw4osv4te//jUyMjIwZ84cm+1ramqQmZmJRx55xObPIgpE7EESBYCEhATU1tYCAEJCQmA0Gq2OJyYmorCwEP3792/1JZP99DFx5MgRq/OOHDmCQYMGdf4bIJIAe5BEfqSiogKPPfYYnnrqKQwdOhQRERE4fvw41qxZg6lTpwJoHsm6d+9e3HfffZDL5ejWrRtWrlyJX/ziF+jVqxceffRRyGQy/PDDD8jPz8ef/vQny8//7LPPMGrUKIwdOxZbtmxBTk4O3n//faneLlHnEonIbxgMBnHZsmViYmKiqFQqxa5du4p33XWX+MILL4h1dXWiKIrijh07xP79+4vBwcFi7969LedmZWWJY8aMEbt06SJGRkaKSUlJ4oYNGyzHAYhvv/22OGHCBFEul4t9+vQRP/nkE0+/RSKP4ShWImoXW6NfifwZn0ESERHZwIAkIiKygYN0iKhd+DSGAg17kERERDYwIImIiGxgQBIREdnAgCQiIrKBAUlERGQDA5KIiMgGBiQREZENDEgiIiIbGJBEREQ2/B9LGHufXPeK2AAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 480x340 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "steps = list(range(n_reps))\n",
    "\n",
    "plt.figure(figsize=(4.8,3.4),dpi=100)\n",
    "plt.errorbar(steps,np.array(energies_vqe)+nucl_shift,marker='o',linestyle='dashed',label=\"VQE\")\n",
    "plt.hlines(-1.145, xmin= -10, xmax= 1000,label='Theoretical',linestyle ='dashed',color='black')\n",
    "plt.xlabel('Step')\n",
    "plt.xlim(xmin=-1,xmax=51)\n",
    "plt.ylabel('Energy')\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "88c12825",
   "metadata": {},
   "source": [
    "#### Quantum simulation\n",
    "\n",
    "Now we are going to perform the VQE algorithm for every configuration of the $H_2$ molecule."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "id": "57d4d448",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/var/folders/tm/_gmf5zrn1rx6sb_cxbflh3_00000gq/T/ipykernel_53439/1232114922.py:2: DeprecationWarning: The class ``qiskit.primitives.estimator.Estimator`` is deprecated as of qiskit 1.2. It will be removed no earlier than 3 months after the release date. All implementations of the `BaseEstimatorV1` interface have been deprecated in favor of their V2 counterparts. The V2 alternative for the `Estimator` class is `StatevectorEstimator`.\n",
      "  estimator = Estimator()\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "=======================================\n",
      " DISTANCE: 0.3\n",
      "=======================================\n",
      "\n",
      "Final energy:  -0.6130309679389012\n",
      "\n",
      "=======================================\n",
      " DISTANCE: 0.4\n",
      "=======================================\n",
      "\n",
      "Final energy:  -0.9251782194731377\n",
      "\n",
      "=======================================\n",
      " DISTANCE: 0.5\n",
      "=======================================\n",
      "\n",
      "Final energy:  -1.0653851727714743\n",
      "\n",
      "=======================================\n",
      " DISTANCE: 0.6\n",
      "=======================================\n",
      "\n",
      "Final energy:  -1.1255968661617182\n",
      "\n",
      "=======================================\n",
      " DISTANCE: 0.7\n",
      "=======================================\n",
      "\n",
      "Final energy:  -1.1449790794982961\n",
      "\n",
      "=======================================\n",
      " DISTANCE: 0.8\n",
      "=======================================\n",
      "\n",
      "Final energy:  -1.1426131622865499\n",
      "\n",
      "=======================================\n",
      " DISTANCE: 0.9\n",
      "=======================================\n",
      "\n",
      "Final energy:  -1.1286542685212215\n",
      "\n",
      "=======================================\n",
      " DISTANCE: 1.0\n",
      "=======================================\n",
      "\n",
      "Final energy:  -1.108873060168323\n",
      "\n",
      "=======================================\n",
      " DISTANCE: 1.1\n",
      "=======================================\n",
      "\n",
      "Final energy:  -1.0867110009000567\n",
      "\n",
      "=======================================\n",
      " DISTANCE: 1.2\n",
      "=======================================\n",
      "\n",
      "Final energy:  -1.0642957381937603\n",
      "\n",
      "=======================================\n",
      " DISTANCE: 1.3\n",
      "=======================================\n",
      "\n",
      "Final energy:  -1.0429659381947396\n",
      "\n",
      "=======================================\n",
      " DISTANCE: 1.4\n",
      "=======================================\n",
      "\n",
      "Final energy:  -1.0227170157806778\n",
      "\n",
      "=======================================\n",
      " DISTANCE: 1.5\n",
      "=======================================\n",
      "\n",
      "Final energy:  -1.0057092445732878\n",
      "\n",
      "=======================================\n",
      " DISTANCE: 1.7\n",
      "=======================================\n",
      "\n",
      "Final energy:  -0.9761531084200655\n",
      "\n",
      "=======================================\n",
      " DISTANCE: 1.9\n",
      "=======================================\n",
      "\n",
      "Final energy:  -0.9571370625198539\n",
      "\n",
      "=======================================\n",
      " DISTANCE: 2.1\n",
      "=======================================\n",
      "\n",
      "Final energy:  -0.9443724871547493\n",
      "\n",
      "=======================================\n",
      " DISTANCE: 2.3\n",
      "=======================================\n",
      "\n",
      "Final energy:  -0.9390854506199307\n",
      "\n",
      "=======================================\n",
      " DISTANCE: 2.5\n",
      "=======================================\n",
      "\n",
      "Final energy:  -0.9427968560524911\n",
      "\n",
      "=======================================\n",
      " DISTANCE: 2.7\n",
      "=======================================\n",
      "\n",
      "Final energy:  -0.9420898511006371\n",
      "\n",
      "=======================================\n",
      " DISTANCE: 2.9\n",
      "=======================================\n",
      "\n",
      "Final energy:  -0.9420340999862022\n",
      "\n",
      "=======================================\n",
      " DISTANCE: 3.1\n",
      "=======================================\n",
      "\n",
      "Final energy:  -0.9419457759590693\n",
      "\n",
      "=======================================\n",
      " DISTANCE: 3.3\n",
      "=======================================\n",
      "\n",
      "Final energy:  -0.9419863920743566\n",
      "\n",
      "=======================================\n",
      " DISTANCE: 3.5\n",
      "=======================================\n",
      "\n",
      "Final energy:  -0.9420564715722722\n",
      "\n",
      "=======================================\n",
      " DISTANCE: 3.7\n",
      "=======================================\n",
      "\n",
      "Final energy:  -0.9420589518900343\n",
      "\n",
      "=======================================\n",
      " DISTANCE: 3.9\n",
      "=======================================\n",
      "\n",
      "Final energy:  -0.9420739529357242\n"
     ]
    }
   ],
   "source": [
    "# Prepare the backend\n",
    "estimator = Estimator()\n",
    "vqe_distances = list(np.arange(0.3, 1.5, .1)) + list(np.arange(1.5, 4.0, .2))\n",
    "\n",
    "energies[\"VQE_\"+basis] = []\n",
    "energies[\"VQE_error\"+basis] = []\n",
    "\n",
    "# Repeat for every r\n",
    "for (i,r) in enumerate(vqe_distances):\n",
    "    print(\"\\n=======================================\")\n",
    "    print(f\" DISTANCE: {r:0.3}\")\n",
    "    print(\"=======================================\\n\")\n",
    "    \n",
    "    molecule    = MoleculeInfo([\"H\", \"H\"], [(0.0, 0.0, 0.0), (0.0, 0.0, r)], charge=0, multiplicity=1)\n",
    "    driver      = PySCFDriver.from_molecule(molecule, basis=\"sto6g\")\n",
    "    problem     = driver.run()\n",
    "    nucl_shift  = problem.nuclear_repulsion_energy\n",
    "    \n",
    "    \n",
    "    # Build the (reduced) qubit operator\n",
    "    hamiltonian = problem.second_q_ops()[0]\n",
    "    mapper     = ParityMapper(num_particles=problem.num_particles)\n",
    "    qubit_op   = mapper.map(hamiltonian)\n",
    "    \n",
    "    # Now create the circuit\n",
    "    n_qubits   = qubit_op.num_qubits\n",
    "    params     = np.random.rand(2*n_qubits)\n",
    "    init_state = HartreeFock(num_spatial_orbitals=problem.num_spatial_orbitals, num_particles=problem.num_particles, qubit_mapper=mapper)\n",
    "    \n",
    "    #Run the algorithm\n",
    "    n_reps  = 150\n",
    "    lr = 0.5\n",
    "    energies_vqe, gradients_vqe = VQE(qubit_op,variational_ansatz,params,init_state,estimator,n_reps,lr)\n",
    "    \n",
    "    print(\"Final energy: \",energies_vqe[-1]+nucl_shift)\n",
    "    \n",
    "    energies[\"VQE_\"+basis].append(energies_vqe[-1]+nucl_shift)\n",
    "    "
   ]
  },
  {
   "cell_type": "markdown",
   "id": "aa826ead",
   "metadata": {},
   "source": [
    "#### Plot the final results"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "id": "49766423",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkUAAAG1CAYAAAD3BIBFAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAB5HElEQVR4nO3dd3hUZfbA8e+UzKQ3UiZASCGhhN6lCQoK4k8FC4pYUARRsaIrrrq6usoq6q4dK6jguipGXFQUpCPSg0AgJLQAyRBCSM8kU+7vjwmDkQTSJlNyPs9zn2Tu3HJuJsmced/3nlelKIqCEEIIIUQrp3Z1AEIIIYQQ7kCSIiGEEEIIJCkSQgghhAAkKRJCCCGEACQpEkIIIYQAJCkSQgghhAAkKRJCCCGEACQpEkIIIYQAQOvqADyFzWYjJyeHoKAgVCqVq8MRQgghRD0oikJJSQlt27ZFrT5/W5AkRfWUk5NDbGysq8MQQgghRCMcPXqU9u3bn3cbSYrqKSgoCLD/UIODg10cjRBCCCHqo7i4mNjYWMf7+PlIUlRPZ7rMgoODJSkSQgghPEx9hr7IQGshhBBCCCQpEkIIIYQAJCkSQgghhAAkKRJCCCGEACQpEkIIIYQAJCkSQgghhAA8MCkqKChg8uTJBAcHExoaytSpUyktLb3gfhs3buTSSy8lICCA4OBgLr74YioqKlogYiGEEEJ4Ao9LiiZPnsyePXtYvnw5S5cuZe3atUyfPv28+2zcuJGxY8dy+eWXs3nzZrZs2cLMmTMvWO5bCCGEEK2HSlEUxdVB1NfevXtJSUlhy5Yt9O/fH4Bly5Yxbtw4jh07Rtu2bWvd76KLLuKyyy7j+eefb/S5i4uLCQkJoaioSIo3CiGEEB6iIe/fHtVUsnHjRkJDQx0JEcDo0aNRq9Vs2rSp1n3y8vLYtGkTUVFRDBkyhOjoaEaMGMH69evPe67KykqKi4trLEIIIYTwXh6VFBmNRqKiomqs02q1hIeHYzQaa93n4MGDADz77LNMmzaNZcuW0bdvX0aNGkVmZmad55ozZw4hISGORSaDFUIIIbybWyRFs2fPRqVSnXfZt29fo45ts9kAuPvuu7njjjvo06cP//rXv+jcuTMff/xxnfs98cQTFBUVOZajR4826vxCCCGE8AxuMSHsrFmzmDJlynm3SUxMxGAwkJeXV2O9xWKhoKAAg8FQ634xMTEApKSk1FjftWtXsrOz6zyfXq9Hr9fXI3ohhBBCeAO3SIoiIyOJjIy84HaDBw+msLCQbdu20a9fPwBWrlyJzWZj0KBBte4THx9P27ZtycjIqLF+//79XHHFFU0PvomKTWZWZ5zEZlMY36edq8MRQgghWi236D6rr65duzJ27FimTZvG5s2b2bBhAzNnzuSmm25y3Hl2/PhxunTpwubNmwFQqVQ89thjvPHGG3z99ddkZWXx9NNPs2/fPqZOnerKywEgv6SSGW8u4cGXPiA9Pd3V4QghhBCtllu0FDXEokWLmDlzJqNGjUKtVnPdddfxxhtvOJ43m81kZGRQXl7uWPfQQw9hMpl4+OGHKSgooFevXixfvpyOHTu64hIc8vPzuXnyNZgqj0GCwjWPLcJgNZC6MJWIiAiXxiaEEEK0Nh5Vp8iVnFGnaPjY4RiHGfGN9XWsMx01YVhvYN2ydc1yDiGEEKI189o6Rd4kPT0do6ZmQgTgG+uLUWOUrjQhhBCihUlS5CKZmZlYYiy1PmeJsZCVldXCEQkhhBCtmyRFLpKcnIw2t/YhXdpcLUlJSS0ckRBCCNG6SVLkIikpKRisBkxHTTXWm46aMFgN59RVEkIIIYRzedzdZ94kdWEqEyZfg9G0B0uCP5oTfsQobUldmOrq0IQQQohWR5IiF4qIiGDdsvWk3x9G1qlCkp5dRMqgS1wdlhBCCNEqSVLkaioVKbGhpESchoQYV0cjhBBCtFoypsgNmDUBABzMMbo4EiGEEKL1kpYiN1Bg1RMNbNl3hMTero5GCCGEcC6T2cqx0xUcO13O0dMVHCsoJzrYlzuHJbg0LkmK3IBFGwiAUlns4kiEEEKIplMUhZMllWQXlJNdUE73diF0ig4CYHVGHlPmbzlnn96xoZIUCbD62LvPFFOpiyMRQgghGu5oQTkLfzvCkVPlHD5VxpFT5VSYrY7nHx/bxZEUGULsMzkE6DTEhvvTPsyP9mH+dDEEuST2P5KkyA0ouupfhKoS1wYihBBC/MnpsioO5pdy8GQZh/LPLpMGduD2IfEAlFZaeG/twRr7qVXQNtSPDuH+RAXpHeuTIgPZ/vRlhPn7oFKpWvJSLkiSInegt3efqc3SUiSEEKLlWW0Kx06Xo1apiA33ByArr5SJ722koKyq1n32Gc9+kI9r48+UIfHEt/EnLiKA+DYBtAv1Q6c9934urUZNeIDOORfSRJIUuQGVr72lSCtJkRBCCCey2hQOnyoj80QJmSdKycyzLwdPllJpsXHrRXE8P747YO/mOpMQtQ3xJSEygMSIQBIiAkiIDKBz9NnuLn+dlmev7uaSa2pOkhS5AY1vCABac7mLIxFCCOENFEUhp8hEhrEYX62GIUkRABRXmBn16ppa99Fp1VRZbI7HgXotPz44nLg2/vjrWke60Dqu0s2FhoYBMKidj4sjEUII4WlsNoWdxwrZZyxhX24xe3NL2GsspsRkAeDiTpGOpCgsQEdcG3+CfX1Ijg4kOSqI5KhAkqICiQ33R6OuOcana0xwi1+PK0lS5AYCgu1JkUFvdnEkQggh3FlBWRV7coqoqLJyeTcDACoV3PbxZkcSdIZWraJjZCCJEQE11q9+dKTbDXB2F5IUuQOdfaA1VTKmSAghhF1+aSW7jhex+1gRu47bl9wiE2Af2Hw2KVJxcXIkJZUWuhqC6BITRBdDMB0jA2sd6CwJUd0kKXIDij4IFVBYeApfsxVfH42rQxJCCNGCSkxmDp4so1dsqGPd7R9vZk/OuUV9EyICSGkbjNWmOLq73p7ct6VC9WqSFLkBld4+gr+goADfsirahvq5OCIhhBDOYrUpZBhL2J59mrSjhew8WkjWyVJ81Gp2/f1y9Fr7B+Oe7UOpMFvp2S6E7u1C6NEuhG7tQgjUy1u3s8hP1h1UJ0VBqgpOV1ousLEQQghP9dry/Xy07iBlVdZznosM0mMsMhHXxj4G6IXx3VGrpaurJUlS5A6qk6IATGSbJCkSQghPdux0OVsOF7Dl8Gm2HCpg/h0DaB9mL4jor9NQVmUlUK+ld2wofTqE0js2lJ7tQ4n8Q9VnQBIiF5CkyB1UT/Phr6qkrMLk4mCEEEI0hLHIxC/7TrDpYAFbDxeQU1Tz//iWwwWOpGhCn3aM7BxJclTQObe/C9eTpMgdVE/zAWAqKwJiXBeLEEKIOimKwsH8MgL1WqKD7RObbj1SwJOpux3baNUqurULYWB8GP3jwxmUEO54LjrY17GfcD+SFLkDrR4zPvhgpqrs3DsNhBBCuM6JYhMbsvJZn5XPhqx8ThRX8ujlnZh5aTIAFyW2YVBCuONr7w6hraYCtLeRV81NmDT++FiLqCovcnUoQgjR6hWVm/nXiv2sz8onK69mDTmdVk1RxdliuxGBev579+CWDlE4gSRFbsLHLxhKixgQI1N9CCFES1IUhX3GEgrKqhhaPR2Gn07DV1uPUlZlRaWCnu1CGJoUwbCkCPrGhUk9OS8lSZGb8A0IhdKjxAbI3WdCCOFspZUW1mee5Je9eazNPMmJ4koSIgJY9ehIwN4aNHtcVyIDdVyU2IZQf51rAxYtQpIid1F9Wz6VMtWHEEI4yzfbj5G64zi/HTyF2ao41vv6qIlv409FlRU/nb0V6NaL4lwVpnARSYrcRKXGHz1wJPcEcd1cHY0QQng+RVHYfbyYbm2DHTV/thw+zbrMfAA6hPszqmsUl3aJYkB8uHSJCUmK3IWx0oc44Nc9h4gb7epohBDCM1msNjYfKuCnPUZ+Tj9BbpGJxfcMoV9cGADX92tHQoQ/l3aJpmNkgEyOKmqQpMhNqHT2WkVqs3SfCSFEQ5itNjZk5fPDrlx+Tj9BYfnZO8P8dRqOnCpzJEX94sLpFxde16FEKydJkZtQ+QYDoLWUuTgSIYTwLNuPnGbK/C2Ox+EBOkZ3jWJMNwNDkyKkW0zUmyRFbkLjax9oLUmREELUzmZT2Hy4gCVpObQJ0PHomM4A9I8PJyUmmL5xoYzrEcPA+HC0GrWLoxWeSJIiN6H1CwFAb5WkSAghzlAUhb25JSzZeZz/peU45hWLCNTz8GWd0KhVaNQqfnhwuIsjFd5AkiI3ofW3d5/prOUujkQIIdzDok1H+OTXw+w/cXasZZBeyxU9DFzTux0yRFo0N0mK3IRvgL2lKIByqiw2dFpp+hVCtC4msxWdRu24ff7QyTL2nyhFp1FzaZcoxvdpy8jOUTJGSDiNJEVuQl+dFHUKdW0cQgjRkhRF4fdjRXy17SjfpeXwzuR+DEu2T7Vx86AOJEUFckWPGEL8ZAok4XySFLkJjZ+9+yxMUwnSSiSE8HLFJjNL0nL4z6Zs0nOLHet/2mN0JEWJkYEkRga6KkTRCklS5C4c03yUuDYOIYRworJKC8/9L53vduZQYbYC9nnGruhu4IZ+sQzu2MbFEYrWTJIid1GdFFkrSygqqyI8QCYfFEJ4B5tNcYwT8tdp2HKkgAqzleSoQCYN7MC1fdvJhKvCLUhS5C6qK1prrJX8fuQkI1PauTggIYRomiOnyvhs4xFW7D3BsocuxtdHg0ql4m//l0KgXku/uDCZZkO4FUmK3MWZ7jPAVFYESFIkhPA8NpvC2syTfPLrYVbvP4lSPRH9T3uMXNPb/n9tZOcoF0YoRN0kKXIXGh+qVDp0ShVVZUWujkYIIRrEZLaSuuM4H60/RFbe2bpCIztHcvvgeEZ0inRhdELUjyRFbqRSHYDOWoW5XJIiIYRnOXa6nCe+2QVAoF7LxP6x3Do4joSIABdHJkT9SVLkRqo0/mA9jaVC7kATQri3Q/llbDlUwMQBsQAkRQUxaWAHOkYGcOOAWIJ8pa6Q8DySFLkRszYAqsBqKr7wxkII4QJ7cop4d/UBftiVi1qlYninCGJC/ACYc20PF0cnRNNIUuRGrD72O9AUk7QUCSHcy5bDBbyzKotVGScd60Z2jsRktrkwKiGalyRFbiQwOAyKYFBbaXYWQriHAydLeWLxLjYfLgBArYL/69mWe0Z2pGtMsIujE6J5SVLkRkJCw+EoJIW6OhIhhLAL99eRnluMTqPmun7tuPvijsTL4GnhpSQpcifVBRxlqg8hhCsoisLGA6dYvvcEf/u/FFQqFWEBOt6c1IeuMcEYQnxdHaIQTuWRM48WFBQwefJkgoODCQ0NZerUqZSWlta5/eHDh1GpVLUuX331VQtGfn5VWntSdOLkyQtsKYQQzWvTwVPc+P5v3PzhJuZvOMzGA6ccz13SJUoSItEqeGRL0eTJk8nNzWX58uWYzWbuuOMOpk+fzueff17r9rGxseTm5tZY9/777zN37lyuuOKKlgi5XvLNPrQFNu07wtWuDkYI0Sqk5xTz8k/7WF09gFqnUXPTwFg6Rsns9KL18bikaO/evSxbtowtW7bQv39/AN58803GjRvHK6+8Qtu2bc/ZR6PRYDAYaqxLTU1l4sSJBAa6zx++j5990KLOWubiSIQQ3q6o3Mwz3+1myc4cFAW0ahU3DojlvkuSaBvq5+rwhHAJj+s+27hxI6GhoY6ECGD06NGo1Wo2bdpUr2Ns27aNtLQ0pk6d6qwwG0UXEAqA3laOcmbCICGEcAJ/vYadx4pQFPi/njGseGQEL0zoIQmRaNU8rqXIaDQSFVVzMkGtVkt4eDhGo7Fex/joo4/o2rUrQ4YMqXObyspKKisrHY+Li51fUFHnb28pCqCCSosNXx+N088phGgdTGYrX2zO5uZBcei0anw0auZc24MAnZYe7UNcHZ4QbsFtWopmz55d52DoM8u+ffuafJ6Kigo+//zzC7YSzZkzh5CQEMcSGxvb5HNfiL66pSgQE6WVFqefTwjh/RRF4budOYx6dQ3P/i+dRZuOOJ67KLGNJERC/IHbtBTNmjWLKVOmnHebxMREDAYDeXl5NdZbLBYKCgrOGTdUm6+//pry8nJuu+228273xBNP8MgjjzgeFxcXOz0xUvsGARBIOaUmCxGBeqeeTwjh3bZnn+b5pensyC4EICbEF0Ow3EUmRF3cJimKjIwkMjLygtsNHjyYwsJCtm3bRr9+/QBYuXIlNpuNQYMGXXD/jz76iKuvvvqC59Lr9ej1LZyU6KuTIlUFOdJSJIRoJGORiTk/7mVJWg4Afj4a7hnZkWnDE/HTSbe8EHVxm+6z+uratStjx45l2rRpbN68mQ0bNjBz5kxuuukmx51nx48fp0uXLmzevLnGvllZWaxdu5a77rrLFaFfWHXxxhB1JVFB0kokhGicv6buYklaDioV3NCvPasfG8kDo5IlIRLiAtympaghFi1axMyZMxk1ahRqtZrrrruON954w/G82WwmIyOD8vLyGvt9/PHHtG/fnssvv7ylQ66f6pYijWImyl/l4mCEEJ7EalPQqO3/N2Zf0YXSSgt/+78UureTMUNC1JdKkXu/66W4uJiQkBCKiooIDnbSJIg2KzwXbv/+sYMQ0MY55xFCeI3cogr+8f1eIgP1PHt1N1eHI4Tbacj7t0e2FHkttQab1g+1pYK8/JNESVIkhKiDxWpjwa+HeW35fsqrrOg0au69pCNRQTKQWojG8rgxRd6uFHvhtDW7D7k4EiGEu9p9vIgJ7/zKP77fS3mVlf5xYaTeN0QSIiGaSFqK3EyVJgAsBVjKi1wdihDCzZRXWfj3ikw+Wn8Iq00h2FfLk1d25YZ+sajVMg5RiKaSpMjNWLQBUAk2k/MraAshPEupycJ/NmdjtSn8X88Y/nZVirQOCdGMJClyMxYf+235SmWpiyMRQrgDk9nqmPInKtiXf4zvTpCvlku7RLs4MiG8j4wpcjNKdVJEZYlrAxFCuNzKfScYMXcVqzLOVvG/pnc7SYiEcBJpKXIzSnWtInWVtBQJ0VoVVZh5fmk6X287BsCH6w5ySeeoC+wlhGgqSYrcjEpvbylSmyUpEqI1WpWRxxOLd2EsNqFSwV3DEph1eWdXhyVEqyBJkZsJCrEXb+wTLS+NEK1JWaWF55em88WWowAkRAQw9/qe9I8Pd3FkQrQe8s7rZkJDwwDoHCqFxoVoTdZn5fPFlqOoVHDHkAQeG9NZ5ioTooVJUuRu9NUlyGWgtRCtyphuBu6+OJGRnaMY3FGq2QvhCnL3mZux6exjioqLTyPT0gnhvY4WlHP3Z1vJL610rHtiXFdJiIRwIWkpcjNmjT96YH92Ll2rrATo5SUSwtt8u+M4T327m9JKCzqthjcn9XF1SEIIJClyO7qAUAACqKCs0iJJkRBepKLKyt+W7Oar6lvt+8eF8ZcxcmeZEO5C3nHdjKq6TlGQqoKSSgtSmUQI75B5ooR7F20nM68UlQoeHJXMzEuS0GpkFIMQ7kKSIndTnRQFYOKUyeLiYIQQzeHXA/ncuWALJrONyCA9r9/UmyEdI1wdlhDiTyQpcjfVA60DqaDMZHZxMEKI5tCjXQjRwb50CPfntYm9iQzSuzokIUQtJClyN9UtRT4qK2UVZUCka+MRQjSKschEdLAelUpFkK8P/50+mKggPWq1ytWhCSHqIJ3Z7qa6pQigsrTIhYEIIRpr2e5cRr26mk9+PexYZwjxlYRICDcnSZG7Uasxa/wB6BTq2lCEEA1jtSm8tGwfMxZup6zKyoq9edhsUm9MCE8h3WduyMc/BErK6RTm6kiEEPVVUFbFA//ZwfqsfMA+kevsK7pI65AQHkSSInd0pgtNpvoQwiPsOlbEjIXbOF5YgZ+Phpev78lVvdq6OiwhRANJUuSGrLpANMCpglO0iXd1NEKI88kvreTG9zdSXmUlvo0/793an86GIFeHJYRoBBlT5IZyTT4A/Lhtv4sjEUJcSESgnkcu68SoLlEsmTlMEiIhPJi0FLkhxdF9VuraQIQQtSqttFBUYaZdqB8AU4clcOfQBBk/JISHk5YiN6To7J801VWSFAnhbo4WlHP9u79y+8ebKa4usKpSqSQhEsILSFLkhlR6e0uRxixJkRDuZMvhAq55ewP7jCUUlpvJKaxwdUhCiGYk3WduSO0bDIDWUubiSIQQZ3yz/RiPL/4ds1WhW9tgPritP22ru8+EEN5BkiI3pPWrnupDkiIhXE5RFN5cmcVry+03PlzR3cCrE3vhr5N/n0J4G/mrdkNa/xAA9DZJioRwtXdWH3AkRHePSOTxMVKQUQhvJWOK3JB/kL2UdadQ+6dUIYTr3NCvPbHhfjw/vjtPXNFVEiIhvJi0FLkhvwB7S1FCkA1U8g9YiJZWXmVxdI9FBfuy/OER+PpoXByVEMLZpKXIHemri79JnSIhWtw+YzGjXl3DkrTjjnWSEAnROkhS5I6qb8m3VBRhMltdHIwQrceWwwXcMG8juUUm3ltzEKvMcC9EqyJJkTvS22/JLyspJD232MXBCNE6/LL3BLd8uIkSk4UB8WH8Z9pFaGT8kBCtiowpckfV03wEUkFphdnFwQjh/RZvO8ZfFv+O1aYwqksUb93cFz+ddJkJ0dpIS5E7qh5TpFEpVJTLuCIhnOnDdQeZ9dVOrDaFa/u2Y96t/SQhEqKVkpYid6QLwIYKNQqVZUWujkYIr5ZfWgXAtOEJcsu9EK2cJEXuSKWiUu2Pn62MKkmKhHCqx8d2ZlBCOCM7R6KSEhhCtGrSfeamKjUBAFgqZKC1EM3JYrXx3poDjjs7VSoVl3SJkoRICCFJkbsya/wBsJokKRKiuVRZbNz/nx3M+XEfD/xnh1SMF0LUIN1nbsrHPwRMkNJGPr0K0RxMZiv3LtrOyn156DRqbugfK61DQogaJClyU6GhYVAAfaLkJRKiqcqrLEz/dBvrs/Lx9VHz/q39ubhTpKvDEkK4GXnHdVdnpvqoKnFtHEJ4uBKTmakLtrL5cAH+Og0fTxnARYltXB2WEMINyZgiN2XT2ZOikqLTLo5ECM9276LtbD5cQJCvls+mDpKESAhRJ0mK3FROhb143A9b97s4EiE820OjOxEb7sd/pl1Ev7gwV4cjhHBj0n3mptS+9vnPtJYyF0cihGfrFxfGylkj8dHIZ0AhxPnJfwk3pfWzJ0U6qyRFQjREaaWFuz7Zyu7jZwufSkIkhKgP+U/hprR+IQDorOUujkQIz1FWaeHO+VtYsfcE9yzahtlqc3VIQggPIkmRm9IH2JMif6Vc/rELUQ/lVRbuWLDFMaj6rUl9pYVICNEg8h/DTekD7N1ngSoTpSaLi6MRwr1VVFm5c8EWNh8qIEhvv8usV2yoq8MSQngYj0uKCgoKmDx5MsHBwYSGhjJ16lRKS0vPu4/RaOTWW2/FYDAQEBBA3759Wbx4cQtF3Dhnus8CqaCgvMrF0QjhvqosNmYs3MZvBwsI1Gv5ZOpAektCJIRoBI9LiiZPnsyePXtYvnw5S5cuZe3atUyfPv28+9x2221kZGTw3XffsWvXLq699lomTpzIjh07WijqRtAHAhCtr8LPR+PiYIRwX++szmLN/pP4+qiZf8cA+naQ2+6FEI3jUUnR3r17WbZsGR9++CGDBg1i2LBhvPnmm3zxxRfk5OTUud+vv/7K/fffz8CBA0lMTOSpp54iNDSUbdu2tWD0DaS3d58FqytpG+rn4mCEcF/TL05kVJcoPritPwPiw10djhDCg3lUUrRx40ZCQ0Pp37+/Y93o0aNRq9Vs2rSpzv2GDBnCf//7XwoKCrDZbHzxxReYTCZGjhzZAlE3ks7eUkRlCchM3kLU8MfZ7f11Wj68vT/Dk2UuMyFE03hU8Uaj0UhUVFSNdVqtlvDwcIxGY537ffnll9x44420adMGrVaLv78/qampJCUl1blPZWUllZWVjsfFxcVNv4CGODP3GQqnC08TFiafgIU445WfM9Cq1Tw0OhmVSiWz3QshmoVbtBTNnj3b8Y+trmXfvn2NPv7TTz9NYWEhK1asYOvWrTzyyCNMnDiRXbt21bnPnDlzCAkJcSyxsbGNPn+j+PhhUfkA8NnKtJY9txBu7J3VWby96gCv/5LJ9myZG1AI0XzcoqVo1qxZTJky5bzbJCYmYjAYyMvLq7HeYrFQUFCAwWCodb8DBw7w1ltvsXv3brp16wZAr169WLduHW+//Tbz5s2rdb8nnniCRx55xPG4uLi4ZRMjlYpKn1C0VScxl+S33HmFcGOLNh3h5WUZAPx1XBf6xUkLqhCi+bhFUhQZGUlk5IXHAwwePJjCwkK2bdtGv379AFi5ciU2m41BgwbVuk95ub0itFpds1FMo9Fgs9VdFFGv16PX6+t7CU5h1odB1UlsZSddGocQ7mDZ7lye/nY3APdfmsT0izu6OCIhhLdxi+6z+uratStjx45l2rRpbN68mQ0bNjBz5kxuuukm2rZtC8Dx48fp0qULmzdvBqBLly4kJSVx9913s3nzZg4cOMCrr77K8uXLGT9+vAuv5sKsfm0AUFcUuDgSIVzrt4OneOCLNGwKTBrYgUcu6+TqkIQQXsijkiKARYsW0aVLF0aNGsW4ceMYNmwY77//vuN5s9lMRkaGo4XIx8eHH374gcjISK666ip69uzJp59+yieffMK4ceNcdRn1ogqwJ0UakyRFovUqKKti2qdbqbLYuDwlmn+M7y4Dq4UQTuEW3WcNER4ezueff17n8/Hx8TVu1wVITk52+wrWtdEG2rsUfc0ymFS0XuEBOp6+MoXUHcd5Y1IfNGpJiIQQzuFxSVFroguxJ0VB1mJMZiu+UtlatFITB8Ryfb/2qCUhEkI4kcd1n7Um+iB7UtQnworFJgUcRetRVmlh9uLfyS89WytMEiIhhLNJUuTGVAERAKSEmAnUS6OeaB0sVhszP9/OF1uOMv3Tred0hwshhLPU+532u+++a/DBL7vsMvz8ZN6uRvO3D7Sm/JRr4xCihSiKwjPf7WFVhn2C16f+L0UGVQshWky9k6KG3r6uUqnIzMwkMTGxoTGJM6pbimylJyk1mQn29XFxQEI41/trD7JoUzYqFfz7xj4y470QokU1qPvMaDRis9nqtfj7+zsr5tajuqVIKS/g6y3ZLg5GCOf6/vdc5vxon87nqStTGNu99ir1QgjhLPVOim6//fYGdYXdcsstBAcHNyooUc3PPoWBRqVQXiRTfQjvte1IAQ9/mQbAlCHx3Dk03qXxCCFap3p3n82fP79BB3733XcbHIz4E62OSk0gemspVTL/mfBibQL0tAv1o2NkIE/LOCIhhIvILU1urlIXhr6iFKskRcKLxUcE8M09Q9D7qKU4oxDCZRp9S/66deu45ZZbGDx4MMePHwfgs88+Y/369c0WnABrdRca5ZIUCe9SabGy7cjZau1hATr8dfI5TQjhOo1KihYvXsyYMWPw8/Njx44dVFbaC6wVFRXx4osvNmuArZ1yZlJYmf9MeBFFUXgqdTcT39vIfzbLTQRCCPfQqKToH//4B/PmzeODDz7Ax+fsbeJDhw5l+/btzRacAE2g/bZ8XaUkRcJ7fLjuEF9tO4aiKMSE+Lo6HCGEABqZFGVkZHDxxRefsz4kJITCwsKmxiT+QB8cBUD/KKnqK7zDyn0nePHHvYD91vuRnaNcHJEQQtg1KikyGAxkZWWds379+vVSrLGZ+VZPCjtYSrYIL5BhLOGB/6ShKDBpYAfukFvvhRBupFFJ0bRp03jwwQfZtGkTKpWKnJwcFi1axKOPPso999zT3DG2bmem+iiTgdbCs50qrWTqJ1sorbRwUWI4z13TTW69F0K4lUbd6jF79mxsNhujRo2ivLyciy++GL1ez6OPPsr999/f3DG2btVTfZhLT2KussjdOcJjLd5+jGOnK4hr48+7k/vho5H5qIUQ7kWlNGEK6qqqKrKysigtLSUlJYXAwMDmjM2tFBcXExISQlFRUctW6j66GT66jKO2SPZMXMfY7jEtd24hmpGiKHy84TAjOkWQFBXk6nCEEK1EQ96/m1Sn6M477+Suu+6iXbt2BAYGSp0iZ6juPgtTlXCqrMrFwQjReCqViqnDEiQhEkK4rSbXKdq+fbvUKXKm6qQoUGWiuKTExcEI0TCbDxVwz8JtlJjMrg5FCCEuSOoUuTvfEKwqDQAVRSddHIwQ9ZdTWMG9i7bx424jb608925VIYRwN1KnyN2pVFT6hAFgLZGkSHgGk9nKPQu3kV9aRdeYYB4a3cnVIQkhxAVJnSIPYNbbkyKb3JYvPICiKDyZupudx4oI9ffh/Vv74afTuDosIYS4IKlT5AFs1fOfqcplqg/h/j759TCLtx9DrYK3JvUlNtzf1SEJIUS9SJ0iD+ATFAF5MDBapvoQ7u23g6d4/nv7FB5PXNGVYckRLo5ICCHqr1FJkUql4sknn+Sxxx5rNXWKXCkwLBqAke2l2J1wb34+GiID9QxKDOeu4QmuDkcIIRqkwUmR2Wxm7NixzJs3j+TkZFJSUpwRl/ij6qrWlJ9ybRxCXECv2FD+d/8wAvVamcJDCOFxGtz04OPjw++//+6MWERdqmsVmYryqLLYXByMEOfKKzE5vo8M0svAaiGER2pUf8wtt9zCRx991NyxiLpUJ0U79h1gn7HYxcEIUdPS33O4+OVVLN52zNWhCCFEkzRqTJHFYuHjjz9mxYoV9OvXj4CAgBrPv/baa80SnKj2h6k+cmWqD+FGsvJKePzr3zGZbWSdLHV1OEII0SSNSop2795N3759Adi/f3+N52QcgRNUJ0VtVMWkS1Ik3ERZpYUZC7dTVmVlcGIbZl0mBRqFEJ6tUUnRqlWrmjsOcT7VA63DKKGgtNLFwQhhL9D4xDe7yMorJSpIzxuT+qDVyN2RQgjP1qj/YtnZ2ShK7TVzsrOzmxSQqIVfOABalY2yYingKFzv041H+G5nDlq1incm9yUySO/qkIQQoskalRQlJCRw8uS583CdOnWKhASpTdLsfHyp0tirAlcV57k4GNHa7c0t5h/fpwMw+4ou9I8Pd3FEQgjRPBrVfaYoSq1jh0pLS/H19W1yUOJclbowdBXlWEtl/jPhWslRgcwY0ZGDJ8uYOkw+BAkhvEeDkqJHHnkEsA+mfvrpp/H3PzunkdVqZdOmTfTu3btZAxR2qoA2UHGcgVEy1YdwLa1GzazLO2Oz1f7hSAghPFWDkqIdO3YA9paiXbt2odPpHM/pdDp69erFo48+2rwRCgACwwyQ/zuXdpCieMI1fjt4ij4dQtFr7b+DarUkREII79KgpGjVqlVUVVUxduxYXn/9dXr06OGsuMSfVd+WL1N9CFfYdayI2z7aTCdDIIumXkSIv4+rQxJCiGbX4IHWOp2OXbt2ydihlladFJWdPoHNJl1oouUUm8zc9/l2qqw22ob4EezXqKGIQgjh9mSaDw9h87MnRT9s2k1BuRRwFC1DURSeWLyL7IJy2oX6Mff6XjKOSAjhtWSaDw+hDrAnReGqEgrKqogIlLowwvkWbcrm+125aNUq3rq5j3SbCSG8mkzz4Smqq1qfSYqEcLb0nGKeW2qvR/T42C706RDm4oiEEMK5ZJoPT3FmUlhKZP4z4XSKovDX1F1UWWyM6hLFXcOlHpEQwvvJZEWewv9M91mxtBQJp1OpVLxxUx8uT4lm7g0yjkgI0To06TaS9PR0srOzqaqq+SZ99dVXNykoUYvqpChYVUFhSZmLgxGtQYc2/rx/W39XhyGEEC2mUUnRwYMHmTBhArt27UKlUjkmhz3zadJqtTZfhMLONxQbGtRYqSzKA1JcHZHwQjmFFRw8Wcaw5AhXhyKEEC2uUd1nDz74IAkJCeTl5eHv78+ePXtYu3Yt/fv3Z/Xq1c0cogBArcasDwWgd4QknaL5WW0KD/03jVs+2sRnGw+7OhwhhGhxjUqKNm7cyHPPPUdERARqtRq1Ws2wYcOYM2cODzzwQHPHKKrpgyMBGNVBiueJ5vf2qiw2HyogQKdheHKkq8MRQogW16ikyGq1EhQUBEBERAQ5OTkAxMXFkZGR0XzRiZocU33kuzYO4XW2HSng9V8yAXjumu7ERwRcYA8hhPA+jWpy6N69Ozt37iQhIYFBgwbx8ssvo9PpeP/990lMTGzuGMUZ1UlRScEJglwcivAexSYzD36RhtWmcE3vtlzbt52rQxJCCJdoVEvRU089hc1mA+C5557j0KFDDB8+nB9++IE33nijWQMUZ5VpQwFYsHyrY3C7EE319Le7OXa6gthwP/4xvrvcfi+EaLUa1VI0ZswYx/dJSUns27ePgoICwsLC5B+qE+mqxxQFK8WUVVkJ1MvYItE0Ww4XsCQtB41axes39SHIV6bxEEK0Xg16Vy0uLq77QFotJSUlAAQHBzctKlErnyB7UhSuKqGgtEqSItFk/ePC+PeNvTEWm+gr03gIIVq5BnWfhYaGEhYWVudy5nlnKigoYPLkyQQHBxMaGsrUqVMpLS097z4HDhxgwoQJREZGEhwczMSJEzlx4oRT43SKM1WtKaGgXKpai6ZTqVSM79OOGSM6ujoUIYRwuQY1NfxxzjNFURg3bhwffvgh7dq13MDMyZMnk5uby/LlyzGbzdxxxx1Mnz6dzz//vNbty8rKuPzyy+nVqxcrV64E4Omnn+aqq67it99+Q632oJlOHFN9lJBbVuniYIQn+2XvCfp0CCM8QOfqUIQQwm00KCkaMWJEjccajYaLLrqoxe4427t3L8uWLWPLli3072+ffuDNN99k3LhxvPLKK7Rt2/acfTZs2MDhw4fZsWOHo1vvk08+ISwsjJUrVzJ69OgWib1Z/GH+s92l0lIkGmefsZh7Fm4nxN+HJfcNpW2on6tDEkIIt+BBzST2opGhoaGOhAhg9OjRqNVqNm3aVOs+lZWVqFQq9Hq9Y52vry9qtZr169fXea7KykqKi4trLC5XnRSFUcJpaSkSjWAyW3noizSqrDZ6tgshJsTX1SEJIYTb8KikyGg0EhUVVWOdVqslPDwco9FY6z4XXXQRAQEBPP7445SXl1NWVsajjz6K1WolNze3znPNmTOHkJAQxxIbG9us19Io1UmRTmWlU5jc5Sca7tWfM9hnLKFNgI5/XtdT7hYVQog/aHJS1Bz/VGfPno1KpTrvsm/fvkYdOzIykq+++or//e9/BAYGEhISQmFhIX379j3veKInnniCoqIix3L06NHGXl7z0fmDjz8AI9vLm5lomF8P5PPh+kMAvHRdTyKD9BfYQwghWpcGjSm69tprazw2mUzMmDGDgICaUwJ88803DQpi1qxZTJky5bzbJCYmYjAYyMvLq7HeYrFQUFCAwWCoc9/LL7+cAwcOkJ+fj1arJTQ0FIPBcN6xUHq9vkaXm9vwj4CibCgvgHCpHi7qp9hk5tEvd6IoMGlgLKNTol0dkhBCuJ0GJUUhISE1Ht9yyy3NEkRkZCSRkReegHLw4MEUFhaybds2+vXrB8DKlSux2WwMGjTogvtHREQ49snLy+Pqq69uWuCu4B8ORdkUn8oluL2rgxGe4o0VmeQUmegQ7s9TV6a4OhwhhHBLDUqK5s+f76w46qVr166MHTuWadOmMW/ePMxmMzNnzuSmm25y3Hl2/PhxRo0axaeffsrAgQMBe9xdu3YlMjKSjRs38uCDD/Lwww/TuXNnV15OoxSpggkB3vl+E7N7XeXqcISHuH9UMoUVZm4cEEuAFP0UQoha1fu/4++//0737t3rXddnz549dO7cGa22ef8BL1q0iJkzZzJq1CjUajXXXXddjfnWzGYzGRkZlJeXO9ZlZGTwxBNPUFBQQHx8PE8++SQPP/xws8bVUlSB9tYun6rTLo5EeJIQPx9euaGXq8MQQgi3plLqObOoRqPBaDTWq5sL7FN9pKWltVgNI2crLi4mJCSEoqIil05jYvrfX/Dd9h7zLFcx9e+f4qPxqBsIRQtbn5nP0KQ2cpeZEKLVasj7d72bcRRF4emnn8bf379e21dVSXFBZ9AF20sS2GsVVREVLHVmRO3+tzOH+/+zg8tSonnvln6o1ZIYCSHE+dQ7Kbr44ovJyMio94EHDx6Mn59Uym1u6oCzVa0LyiUpErXLKzbx9JLdAKTEBEtCJIQQ9VDvpGj16tVODEPU2x/mP8svqYK6KxGIVkpRFGZ/s4vCcjPd2wUz89IkV4ckhBAeQQakeJoA+0DrMErIKaxwcTDCHX259Sgr9+Wh06h5bWJvGXcmhBD1JP8tPU11S5FBW0r7cOmeFDUdL6zg+aV7AZh1eSc6RQe5OCIhhPAcUrDE0/hHkH7SSuap0ySXHwciXB2RcCN//WYXpZUW+sWFcddw77jzUwghWookRR4kPz+fCbeMx2jSYon3R/v4tRhsbUldmOqo1i1at/svTeJEsYmXr++JRgZXCyFEg9S7ThHAlClTeOedd+p9W743cYc6RcPHDsc4zIhv7Nk7zkxHTRjWG1i3bJ1LYhLuR1EUqUskhBDVGvL+3aAxRZ999hmlpaWOx/fccw+FhYU1trFYLA05pKin9PR0jJqaCRGAb6wvRo2R9PR0F0UmXE1RlBqD7iUhEkKIxmlQUvTnRqVFixZRUFDgeHzixAmXVnv2ZpmZmVhiak84LTEWsrKyWjgi4S6+2nqMS19dzacbD7s6FCGE8GhNuvustp43k8nUlEOKOiQnJ6PNrX0ImDZXS1KS1KJpjXKLKnh+aTomsw2T2erqcIQQwqM1+y350nTvHCkpKRisBkxHayadpqMmDFYDKSkpLopMuIqiKDzxzS5KKi306RDK1GFyt5kQQjRFg5Oizz//nO3bt2M2m50RjziP1IWpGNYbMH1eSOmqUxR/nIvqx1BSF6a6OjThAl9tO8bqjJPotGrmyt1mQgjRZA26JX/48OE888wzlJSU4OPjg8Vi4ZlnnmHo0KH07t2byMhIZ8UpgIiICNYtW0f6z5+SNX8GupRoNoyZL7fjt0LGIhPPL7UPrn/ksk4kRUmRRneUnp5OZmYmycnJ0porhAdoUFK0Zs0awD7od9u2bWzfvp3t27fz17/+lcLCQuk6ayEp/YeR8qsPFUopX54ud3U4ooUpisJT3+6mxGShV/sQ7hqW4OqQxJ/Ya4pNwKgxYomxoM3VYrAapKaYEG6uUcUbk5OTSU5O5qabbnKsO3ToEFu3bmXHjh3NFpyoQ3A7FFT4qaoYmyj1N1sbmwLd2wXz64F8Xr6+F1qZ28ztTLhlwjk1xYxHjUy4ZUKz1xRzdmtUS7R2ecM5vOEavOkcjdVs76gJCQkkJCRwww03NNchRV20elSB0VBqZGKytM61Nhq1iodGd2LKkHhC/XWuDsdjOesfc31qijXH+ZzdGtUSrV3ecA5vuAZvOkdTNaiidWvmDhWta/hgFBzfChM/g5SrXR2NaCFWmyIDqpvI2f+YlyxZwkP/e4jA4YHnPFe6rpTXr36dq69u+t+ssyvct0QFfW84hzdcg1uc48e1Zzds5qE4DXn/lr4XTxUaC8e3UpBzEF1HC4F6eSm93S97T/DKz/uZe31PurcLcXU4HsvZXVstUVPM2a1R6bt+x6jJxTfW79zjc4z0X/5LSsf2YK0EqwVsZrCawWap/nrme4v9q616G5vV8Tj9kBGj9QC+sW3OPYclk/TXJ5LSPti+j2IDxQqK8qfHtj8syp8e20g/XoKx6gC+sTHnnqNyL+lP9iAlxvfs/ii1fKWO9QrpJ0wYK0vwjW137vFNu0l/pC0pUT5UH8Tx5exj5fyPgfQTZowmK76x7Ws5xy7S7w8jJUr7h31r7k+d7R5/OEeeFaNJjW9s7LnnqNhF+n1BpERqah63gdJPWjGatHWfY2b1OQw9YYbrpq2Sd1JPFWL/A/lm9W/Et53E6JRoFwcknKnYZObJ1N0Yi018tzNHkqJGaomurTM1xYxHa/lE3Ew1xTL3pWMxmAHfc56zRFeS9f2bpOQnQlU5mCvAXF69VJz9ajGB2WT/6lgqwWIic28llshQwO/c4xsqyfrwDlI6+zTxGsxY2oXW+pylvZqs35Y2zzk61HGOOB1ZBw+Q4tP4c2QeNWOJq+P48X5k5RaSEtzEa8gzY4mv6xz+ZOUXktLG1rRznLLUfY4Ef7IKCkmJbNrYxcxTNizxtc+bevYcmiadozlIUuSpQuzZdlvVKY7/Yd4r4Z3++eM+jMUm4tv48/DoTq4Ox2PVZ7qc5khaUhem1tlF52CzQkUhlJ86dzEVgqnI/rypsPprEVQWQ2UJycYKtAe0cPG5pRi0B4pJ8vsMyhr/BpPcRo12TznQ5pzntEdMJF0UCxHBoPYBTfWi9gGN9uw6tfbsovEBtabGuuS2p9F+tbTW82uPq0i6/SHo2A5UalBpQF39VaW2H0v1h8cqVfWiBlSO55MPHEP75ou1n8PoQ9Ij8yA54ewxUP3p+zNf+dNj+9fk/QfR/vPh2o9/wpekJ7+Czkl/2Ic/fU/N9bU8Tt6Xifb56bWfI8+PpGcWQpfOf9r3z2o73x/PkYH2mTvqPsdz/z17DhrYtVV9vuS9GWj/dvt5zvEVdO1sf+1cSJIiT1XdUtROlc9OSYq82sYDp/h8UzYA/7yuJ34613+a8lQtMl1OVRkRFLLu3RdI37GZrP37SBqoJqWNAt/fCWUnofQElBfQ2O6IlEgNhnwTxuwKfDucbc0xZZswlPuScsk48PEHXSD4+FV/73/2e62v/XutHrR+4ONrX6fVg0ZPilaPYcL/YTx68tzWLn03UuY0vXsjBTB8M7z2FjVNIim31J7MNOgcXcDw5sLaz0EHUi6/rWnHj+mJYc6rtR9faUfKsCubdHyAlMFxGGztaj+HrS0pgy5t+jkGRGOwta37HP2HN/0c/SMw2GLOc46hTT5Hc5CkyFM5WoryOSZJkdeqqLIy+5vfAZg8qAMXJZ77yV3UX5O7thTF3pJTeAROH4HC7LNL8XEozrG37Jw5X/VCTvVSG99Q8A8H/zb2xS8c/ELt62t8DQF9MPgGgz6I1HtNTLjteoy//ak16seN0AwDxlMXfXfh1q6mnqM+LWpufg5vuAZvOkdTyd1n9eR2d5+VF8DL9qJ9EyNS+XJm0z8tCPcz54e9vLf2IDEhvvz88MUE+TZtfIKo591n5QVw6gCcyjq7FByAUwfBXHbhk/gEQHBb+xJkgMAoCIiCwGgIjLR/DYi0J0Capn02TU9PJysri6SkJKfV33Hm8b3lHN5wDd50jj9qyPu3JEX15HZJkaJgfaEtGks512vf5OunmtYMLNyP1aYw+cPf+O1gAR/d3p9RXVvXYPqWKLaXlf47SWGQEmqCvL2Qlw55+6As7zx7qiAoBkI7QFic/WtoB3uXdlBbCI6xt+hIhX8h3ILckt8aqFQoIbFwKgN9eQ6VFit6rYw18SYatYrP77qI9Vn5XNyp9cwr6LQ6QuUFkJsGOWmQm0ZKThophUfq3j64PbRJhDZJZ5fwjvZyGFp94+MQQrgtSYo8mCbMnhTd1lWDxaogpYq8j1qtalUJETRTHSGrBU7shqObIHsjHN9uHwdUm6AYiEqBqK5nv0Z2Bl1AM1yNEMKTyNuoB1NV34E2pr0FyYi8x5FTZSzalM1Do5Px17Wu17XRdYTMFfYE6MjG6iRoG1SVnrtdWDzE9Ia2vaFtH3uhOP9wZ1yKEMIDta7/uN6m+g40io66Ng7RbBRF4YlvdvHrgVPkl1by2sTerg6pRdW7jpDNCsbf4cAqOLgasn+zV1f+I30IxA6A2IvsX2N6gV+Y8y9CCOGxJCnyZNVJUUX+EfILyokNr71aqPAcX207xq8HTuHro+bBUcmuDqfFnbeOUI6GJHMGfHkbHFoLFadrbhDUFuKHQYeL7EtkV3vBPyGEqCdJijxZdfeZMTuTt3/J5JUberk4INEUJ0sqeeH7vQA8PLoTcW1a35iWOusIZZswZB8jZdc/zm6sD4b44ZA40r5EJMsdX0KIJpGkyJOFnp3qI6egHrVThFv7+//2UFRhplvbYKYOS3B1OC6T+vorTLhjEkZ9DpY4PdpD5RhOmUgd5wPRPaDzWEi+HNr2bXKNHyGE+CP5j+LJgmJQVGr0WCgvNLo6GtEEv+w9wdLfc9GoVbx0XU+0mlbW7VN0HPZ8A7u+IiJ3J+sut8+qnXW6iqSxA0i59EboNNZeF0gIIZxEkiJPpvHBGmBAW5qDpuQYNpuCWi3dB55GURReXpYBwNRhCXRvF+LiiFpIVRnsSYW0/8CRDTjmAVNroeOlpEy4npROY+xTXAghRAuQpMjDacJioTSHKFs+J0sriQ72vfBOwq2oVCo+nTqQt1Zm8dDoVjC4Ovd32P4J/P6lfdb3M+KGQvfrIGU8BMgcb0KIlidJkYdThcTC0U20U+Vz7HSFJEUeKjrYl+fHd3d1GM5TWQq7F8O2BZCz/ez6sAToexv0nOi4cUAIIVxFkiJPV/1G0k6VT05hBf3ipA6Lp7BYbWw9ctojZ76v97xkxTmw6T3YNh9MRfZ1ah/oehX0m2K/e0xumxdCuAlJijxddVI0PMqEOSrQxcGIhvh4wyFe/GEft14U5zGtRPWel8y4Gza+Bbu+BpvZvi48EfrdAb1vhoAmzGEmhBBOIkmRpwvtAECS7jTEnH/2X+E+jhaU86/lmQD0aO85A6vPOy/Zj2vh4CrY8Ib96xkdhsCQmdDpCmkVEkK4NUmKPN2ZcRhFx1wbh6g3RVF46tvdVJitXJQYzg39PGMszXnnJSOb9H8MJcW6x75SpbYPmB4yE9r1a/lghRCiESQp8nRnkqKKAnYeOE6vju1cG4+4oO925rBm/0l0WjUvTuiBykOqMJ93XjKDmaz0NFK6BdnHCl10r9QUEkJ4HGnL9nS+IVh19m6zpz9d5uJgxIUUllfx/NJ0AGZekkRipOeMAzvvvGSHK0gaOQke3AlXvCQJkRDCI0lS5AVU1a1FoeYTFFWYXRyNOJ9//riP/NIqkqMCmTGio6vDaZCUlBQMlaGYjppqrDcdNWHw6UTK3R9BkMFF0QkhRNNJ95kXUIfGwsl02qpOcfx0BSF+Pq4OSdRhZOco1uw/yYvX9kCn9aDPJBWnYc1cUvsdYMIX5RgjfLEkBKE9ocNga0vqf1JdHaEQQjSZJEXewDExrL1WUUpbuQvNXY3tbuDSLlGekxBZzbB1PqyeAxUFRPjButn/R3rcFLJO20hKSjp/nSIhhPAgkhR5gz8UcDxeWOHiYERtqiw2RyLkMQnRobXw/aOQb5+XjcguMOYFSBpNCiCpkBDC23jIf2dxXiH2lqJ2qlOSFLmhQ/llDH95JV9uOYqiKK4O58LKTkHqPfDJVfaEyL8NXPkqzNgASaNdHZ0QQjiNtBR5g+qkqC3SUuRuFEXhydRdnCiu5H+/53BDfzeuSaQosPML+OmvUFEAqGDAVLj0aZmpXgjRKkhS5A3OdJ9pChjfU+7+cSepO47z64FT6LVq/jG+u/vWJDp1AJY+DIfW2B9HpcBVr0PsQNfGJYQQLUiSIm8QZACVBo1i5bIOrg5GnHG6rIp/fL8XgAdGJRPXJsDFEdXCZrXPUbbyBbBWgtYXRjwOQ+4HjdzFKIRoXSQp8gZqDQS3g6Js+3QfwW1dHZEA5vy4l4KyKjpHBzH94kRXh3Ou00cgdQZk/2p/nHgJ/N9r9olbhRCiFfK4gdYvvPACQ4YMwd/fn9DQ0HrtoygKf/vb34iJicHPz4/Ro0eTmZnp3EBbWvVt+RkZ6VLA0Q38dvAUX261z0f34rXd8dG40Z+aosCOhfDuUHtCpAuEq9+EW1MlIRJCtGpu9J+6fqqqqrjhhhu455576r3Pyy+/zBtvvMG8efPYtGkTAQEBjBkzBpPJdOGdPUX1uKJvVv3G7uNFLg5GbM8+jUoFNw/qQL+4cFeHc1bpSfhiMiy5D6pKIPYimLEe+t4G7jreSQghWojHdZ/9/e9/B2DBggX12l5RFP7973/z1FNPcc011wDw6aefEh0dzbfffstNN93krFBbVnVS1FaVz/HTcgeaq907MomLEtvQMcKN5jbb/zMsuRfKToLaBy59EoY8YO9+FUII4XktRQ116NAhjEYjo0efra8SEhLCoEGD2LhxY537VVZWUlxcXGNxa2duy1edIjOvxMXBCIC+HcII8XeDwcpWCyx/Bj6/wZ4QRaXAtJUw7GFJiIQQ4g+8PikyGo0AREdH11gfHR3teK42c+bMISQkxLHExsY6Nc4mq06K2qvy2WeUpMgVFEXhpWX7OJRf5tI40tPTWbJkCenp6VCcay/CuOHf9icHTodpqyCmp0tjFEIId+QWSdHs2bNRqVTnXfbt29eiMT3xxBMUFRU5lqNHj7bo+RvsD91ne3MlKXKFb9OO8+7qA4x/ewNllZYWP39+fj7Dxw7nmseu4aH/PcQ1j1zB8OHJ5O9bD7oguGEBjJsLPr4tHpsQQngCtxhTNGvWLKZMmXLebRITG3dXjMFgL2Z44sQJYmJiHOtPnDhB796969xPr9ej1+sbdU6XqE6KQlTlmEpPc7KkksggD4rfw50uq+L5pfaaRHePSCRA3/J/WhNumYBxmBHf2LNJjzHbhwnfFLBuxRpo07HFYxJCCE/iFklRZGQkkZGRTjl2QkICBoOBX375xZEEFRcXs2nTpgbdweb29IHgFwYVp4lRFbDPWExkkHN+puJc//xxHwVlVXSKDmTa8Ja/rT09PR2jpmZCBODbwQ9jTDjpJypJadPiYQkhhEdxi+6zhsjOziYtLY3s7GysVitpaWmkpaVRWlrq2KZLly6kpqYCoFKpeOihh/jHP/7Bd999x65du7jtttto27Yt48ePd9FVOEl1a9Ezw4PoHB3k4mBaj82HCvjvVnv36osTerikJlFmZiYWQ1Wtz1naWsnKymrhiIQQwvO4RUtRQ/ztb3/jk08+cTzu06cPAKtWrWLkyJEAZGRkUFR0tlbPX/7yF8rKypg+fTqFhYUMGzaMZcuW4evrZWMrQjqAcRfDIsog2MuuzU1VWWz8NXUXAJMGdqB/vGtqEiXrTqI9WAwXB5/znDZXS1JSkguiEkIIz+JxSdGCBQsuWKNIUZQaj1UqFc899xzPPfecEyNzAxFJkAGcbNlB6a3ZfzZnk5VXSkSgjtlju7R8AIoCG98mZfPTGE5WYMw24dvhbEJsOmrCYDWQkpLS8rEJIYSH8bikSJxHVDcAio/sJPXXw9w8qIN7TS/hhSYN7ECJyUx8REDL1ySyVNpntk9bBEDq45OZsHAfRm0elhgL2lwtBquB1IWpLRuXEEJ4KEmKvEm0PSlSTqTzzHe7uSixDZ0NMrbImXRaNTMvTW75E5edgi8mwdFNoFLDmDlEDLqbdbeqSE9PJysri6SkJGkhEkKIBpCkyJtEdAK1lhBbGQYK2JtbLEmRk+wzFtMxMtA1LXEFh2DhdVBwAHxD7PWHOl7qeDolJUWSISGEaATpW/EmWh20sbdadFEfZa/Rzacm8VAFZVXc/MEm/u+N9RwvdP48czUqVB/fDh9dZk+IQjrA1OU1EiIhhBCNJy1F3iY6BU7upYsqWypbO8mcH/ZSUFZFRKCOyEDnFcjMz8+3F2TUGO1jhI7ZMBw/SeoVGiISe8HkryHI4LTzCyFEayNJkbeJSgEW01l9lFRpKWp2Gw+c4qttxwCYc20PdFrnNbbWWaF6STHrnvsBfM+9/V4IIUTjSfeZt6kebN1FdZQTxZUUlNVe0E80XKXFypPVNYkmD+pAvzjn1SQ6b4XqqGDSDx5z2rmFEKK1kqTI21QnRUnqHLRY2JcrrUXN5Z1VBziYX0ZkkJ6/OLkmkb1CtbnW56RCtRBCOIckRd4mJBb0wfhg4dsbo+ndIdTVEXmFrLxS3l19AIBnrkohxM+5NYmSOyaiPWKq9TmpUC2EEM4hSZG3UakgqisA3bXH8NfJsLHmoFWr6NMhlEs6R3JljxjnnsxSRUr6KxiMhZiya97dJhWqhRDCeeQd0xtFpdiL+p3YAz2ud3U0XiE+IoAvpl9EaaUFlUrlvBOZK+DL2yHzJ1Kv9GfCCl+MgSapUC2EEC1AkiJvVD2uKGf/Nj6sSOev47qglek+GsVmU1Cr7UmQSqUiyNeJ3WaVJfCfSXB4HWj9iJi2kHUvjZYK1UII0UIkKfJGf5ju4+PsQ0waGEtytFS2boyHv0wjzF/Ho2M6E6h34p9LxWlYdAMc2wK6ILj5vxA/FJAK1UII0VKk+cAbVY8paqc6SRDl7DVKEcfGWLnvBEvScvjstyMczi9z3okqCuGzCfaEyC8Mbl/iSIiEEEK0HEmKvJFfGAS3A6CT6qjclt8IZZUWnkrdDcDUYQl0bxfinBNVFMJn4yFnB/i3gduXQrt+zjmXEEKI85KkyFtF2btbuqiPsk9aihrslZ8zyCkyERvux0Ojk51zkjMtRI6E6H9g6O6ccwkhhLggGVPkraJTIGs5nVVHWSktRQ2SdrSQBb8eBuCF8T2ataxBeno6mZmZJHcwkLL1CcjZDn7hcNt3jrFgQgghXEOSIm8VZX+D7aw+Sm6RicLyKkL9dS4Oyv2ZrTZmL/4dRYEJfdpxcafIZjlujcldDWa0h8ow5JWQem0UEdJCJIQQbkG6z7xVdatDijobUNh/otS18XiIzBOl5BRWEObvw1NXdm224zomd53oS+DFQfjebsB4Y3smbIiUhEgIIdyEtBR5q4hOoNYSZCtn2/0ptGnnvMlLvUlK22BWzBrBwZNltAnUN8sxzzu5q28x6enpcsu9EEK4AWkp8lZaHbSxDxBuUyaThzZEVJAvFyW2abbjnXdy1xiLTO4qhBBuQpIibxZd3fqQt8e1cXiAb3ccZ3n6CaccOzkxHu2Rilqfk8ldhRDCfUhS5M2qb8vfk/Yb0z/ditWmuDgg93S8sIInU3cx7dOtrNqX17wHt1lJyXgDg7FIJncVQgg3J2OKvFm0fQCv9mQ6Px87wZFTZSRGBro4KPeiKApPpu6irMpKv7iwZrvbrPrgsPQh2P01qVf6MeEXP4wBMrmrEEK4K0mKvFl191miKgctFvYZSyQp+pPUHcdZnXESnUbNS9f1QFM9+WuTKQr89FfY/imo1ETc9jHrXpogk7sKIYQbk6TIm4XEgj4Yn8piElW57M0tZlyPGFdH5TZOllTy3NJ0AB4cnUxSVDNOmrt6Dvz2jv37q9+CbhMAmdxViKay2WxUVVW5OgzhZnQ6HWp100cESVLkzVQq++SwRzfRRXWUTYcKXB2RW3n2uz0UlptJiQlm+sWJzXfgTe/Bmpfs318xF/pMbr5jC9GKVVVVcejQIWw2m6tDEW5GrVaTkJCATte0IsWSFHm7qBQ4uonO6mx+OHKaEpOZIF8fV0flcjuPFvL9rlw0ahUvX98TH00z3XOw62v48S/27y95EgZNb57jCtHKKYpCbm4uGo2G2NjYZmkVEN7BZrORk5NDbm4uHTp0QKVq/DAISYq8XXVl6776HCxlCr8eOMWYbgYXB+V6vWJD+XhKfw6eLKN7u5DmOWjWCki92/79wOlw8WPNc1whBBaLhfLyctq2bYu/v7+rwxFuJjIykpycHCwWCz4+jf/gL0mRt6tOirqqjxLsq6WgTPriz7i0SzSXdmnaMRwTvAZVkrLxIbBZoPt1MPYle/elEKJZWK1WgCZ3jwjvdOb3wmq1SlIkziPKPn9XTk4Oz16cT5fA1j0H2pbDBcSG+WMI8b3wxudRc4LXKrQHSzCcLCf13kuJGD8PpGlfCKdoSteI8F7N9XshSZGXyy+zMiFVwRimxVLxV7Sf6hz1cSIiIlwdXos6VVrJjM+2Ybba+HzaRU3qNnNM8BrrC/jCxcEYs01MWFLIunvlk6wQQngi+Tjr5SbcMgHjDdH43hFL4IhgfCf6YhxmZMItE1wdWotSFIWnvt3NqbIqYkL8SI5ufL2muid49cWoPUl6enpTwxVCCOECkhR5sTrfvGN9MWqMrerN+7udOfy424hWreLVib3QazWNPpZM8CqEqK8pU6Ywfvz4c9avXr0alUpFYWFhjcd/Xp566qkWj62xKisrefLJJ4mLi0Ov1xMfH8/HH3/cbMdvCdJ95sUyMzOxxFhqfe7Mm3drKCR4otjE35bYJ8W9/9LkJt9tltwxsXqC13OLPcoEr0KIpsjIyCA4ONjxODDQc2YhmDhxIidOnOCjjz4iKSmJ3Nxcj6spJS1FXiw5ORltbu15r3JM3SrevBVF4YlvdlFUYaZHuxDuvaRjUw9IypEFMsGrEMIpoqKiMBgMjqWpSdHXX39Njx498PPzo02bNowePZqysjKeffZZPvnkE5YsWeJolVq9ejUAu3bt4tJLL3XsM336dEpLz3+TzrJly1izZg0//PADo0ePJj4+nsGDBzN06FDHNhaLhQceeIDQ0FDatGnD448/zu23396srVVNJUmRF0tJScFgNWA6aqqxviLbhLowrFW8eX+3M4eV+/LQadS8OrFX04s0rn8NtnxI6jgdhhV6TF+aKF1XiulLE4b1MsGrEC2tvMpS52IyW5t9W0+Sm5vLpEmTuPPOO9m7dy+rV6/m2muvRVEUHn30USZOnMjYsWPJzc0lNzeXIUOGUFZWxpgxYwgLC2PLli189dVXrFixgpkzZ573XN999x39+/fn5Zdfpl27dnTq1IlHH32UioqzHx5feuklFi1axPz589mwYQPFxcV8++23Tv4pNIx0n3m51IWp9sHW1oNY2imosy2cMEbRf9LTrg6tRVyeYmDKkHjahvrSKbqJc5ulfQ6/PAdAxHVzWffy3TLBqxAulvK3n+p87pLOkcy/Y6Djcb/nV1Dxp+TnjEEJ4fz37sGOx8NeWlVrXbfD/7yywTEuXbr0nBafM3WX/qx9+/Y1Hh85coQ2bdo0+JxgT4osFgvXXnstcXFxAPTo0cPxvJ+fH5WVlRgMZwv6fvLJJ5hMJj799FMCAgIAeOutt7jqqqt46aWXiI6OrvVcBw8eZP369fj6+pKamkp+fj733nsvp06dYv78+QC8+eabPPHEE0yYMMFx3B9++KFR1+YskhR5uYiICNYtW0f6ii/I+uhOEnuFMn7QHA6XqcktqiAmxM/VITqVn07Ds1d3a/qBMlfAkupPSkMfhEH2ytUywasQ4kIuueQS3n333RrrNm3axC233HLOtuvWrSMo6OwHuLCwsFqPOWPGDBYuXOh4XFv3Vq9evRg1ahQ9evRgzJgxXH755Vx//fV1HhNg79699OrVy5EQAQwdOhSbzUZGRgbR0dE1ErxbbrmFefPmYbPZUKlULFq0iJAQ+7jN1157jeuvv5533nmHqqoqTpw4wcCBZ5NUjUZDv3793GrckSRFrUTKJdeTsvlRqCphfFg+X+dGsXb/SW4c0MHVoTnFtiMF9I4NQ6NuhoJeOTvgy9tAsUKPiTDq2aYfUwjRLNKfG1Pnc+o/FfTb9vToem+7/vFLmhbYHwQEBJwzhvPYsWO1bpuQkEBoaOgFj/ncc8/x6KOPnncbjUbD8uXL+fXXX/n555958803efLJJ9m0aRMJCQn1jv/P0tLSHN+fGRQeExNDu3btHAkRQNeuXVEUhWPHjhEVFdXo87UkGVPUWmi0kDAcgJsjDzFlSDxdY4IvsJNn2p59monv/cbNH/zW9DEAp4/AoolgLoPEkXDN21KtWgg34q/T1rn4+miafVt3ERUVRVJSkmOpi0qlYujQofz9739nx44d6HQ6UlPtYx91Ot053Xhdu3Zl586dlJWVOdZt2LABtVpN586dAWqc90yyM3ToUHJycmq0WO3fvx+1Wk379u0JCQkhOjqaLVu2OJ63Wq1s37696T+MZiT/3VuTRPsnn77mHTx7dTd6tg91bTxOUGIy8+AXO7DaFKKCffHzaXw9IsoLYOF1UJYH0d1h4meglWrVQgjPsGnTJl588UW2bt1KdnY233zzDSdPnqRrV/v0T/Hx8fz+++9kZGSQn5+P2Wxm8uTJ+Pr6cvvtt7N7925WrVrF/fffz6233lrneCKAm2++mTZt2nDHHXeQnp7O2rVreeyxx7jzzjvx87MP07j//vuZM2cOS5YsISMjgwcffJDTp0+71dQtkhS1Jh2rm4Ozf4OqctfG4iRPf7ubowUVtA/z44UJ3Rv/x2Y2wX8mwalMCG4Hk78CX+9sWRNCeKfg4GDWrl3LuHHj6NSpE0899RSvvvoqV1xxBQDTpk2jc+fO9O/fn8jISDZs2IC/vz8//fQTBQUFDBgwgOuvv55Ro0bx1ltvnfdcgYGBLF++nMLCQvr378/kyZO56qqreOONNxzbPP7440yaNInbbruNwYMHExgYyJgxY/D1bdpclM1JpSiK4uogPEFxcTEhISEUFRXVKKzlURQF/tUdio9hnvQ1W7V9sdhsDE+OdHVkzeKb7cd45MudaNQqvrx7MP3i6h5MWJf09HQyMzJIPjSflOI1oA+BO5dBtAymFsKVTCYThw4dIiEhwa3eREXj2Ww2unbtysSJE3n++eebdKzz/X405P3bfTpIhfOpVNBxJOxYyMFN/2NSehW9YkO9Iik6nF/G09/uBuChUckNTohqzHofZUJ7qATDqSpSF7xNhCREQgjRZEeOHOHnn39mxIgRVFZW8tZbb3Ho0CFuvvlmV4fmIN1nrU31uKLEkq0A/H6ssNZaHJ5EURT+svh3yqqsDEwI595LGl6p2zHr/URfAkeG4ntHLMYb2zPhyZedELEQQrQ+arWaBQsWMGDAAIYOHcquXbtYsWKFY4yTO5CkqLVJGAGAz8k9DIq0oCiwPivfxUE1jUql4rlrujEwPpx/39i7wbfhy8S5QgjhfLGxsWzYsIGioiKKi4v59ddfufjii10dVg2SFLU2gZFgsFc0nRR5CIA1GSddGVGz6GII5ssZg2kb2vBilJmZmViia28tk1nvhRCi9ZCkqDWq7kIbovodgB9351JUbnZlRI2SlVfKpoOnmnyc5DZatIdKan1OZr0XQojWQ5Ki1qj61vzIvI10NQRRXmVl4aYjLg6qYUpMZqZ/tpXJH25i2e7cxh+oOJeULY9jOFmOKbvmxLky670QQrQukhS1Rh0Gg0aPqiSHWX3tFRm2HTnt4qDqz2ZTmPXlTg6eLCMySE+/uPDGHchUDJ/fAEVHSb25E4Z1bWTWeyGEaMU87pb8F154ge+//560tDR0Oh2FhYUX3Oebb75h3rx5bNu2jYKCAnbs2EHv3r2dHqvb8vGDuMFwcDWX+Ozli+k3MCihkYmFC7yzOouf00+g06h595Z+RAbpG34QS5V9PjPjLgiIJGLqEtb9NUFmvRdCiFbM41qKqqqquOGGG7jnnnvqvU9ZWRnDhg3jpZdecmJkHiZxJACaQ6u5KLGNW5VZP59VGXm8unw/AM+P70bv2NCGH0RR4H8PwMFV4BMAN38J4fbJEVNSUrj66qslIRJCiFbI41qK/v73vwOwYMGCeu9z6623AnD48GEnROShEi8BnoXD68FqBo0PxSYzJ0sq6RgZ6OroanU4v4wH/7MDRYGbB3XgxgEdGneglc/Dzv+ASgMTP4F2fZs3UCGEEB7J41qKWkplZSXFxcU1Fq9i6An+baCqBI5tZXVGHkPmrOSxr3a6OrI6fbXtKMUmC306hPLMVY1syfltHqx71f79Vf+G5MuaLT4hhPizKVOmoFKpzln+WOrDaDRy//33k5iYiF6vJzY2lquuuopffvnFsU18fDz//ve/nRbn6tWrUalU9RqSUl/ff/89gwYNws/Pj7CwMMaPH99sx3YWj2spailz5sxxtEp5JbXaXshxzzdwcBUp/ftQZbGxPbuQrYcL6B/vfmOMHr28M1FBvoztbkCv1TT8ALu+hmWP27+/9Cnoe1vzBiiEELUYO3Ys8+fPr7EuMtI+vdLhw4cZOnQooaGhzJ07lx49emA2m/npp5+477772LdvnytCbrLFixczbdo0XnzxRS699FIsFgu7d+92dVgX5BYtRbNnz641k/7j0tK/GE888QRFRUWO5ejRoy16/hZRfWs+GT8QFajn2r7tAJi35qALg6rJYrVhttoAe+Xq24fEEx3ciMkgD6yE1Bn27wfeDcMfbcYohRCibnq9HoPBUGPRaOwf7O69915UKhWbN2/muuuuo1OnTnTr1o1HHnmE3377rVnjOHLkCFdddRVhYWEEBATQrVs3fvjhBw4fPswll9jfD8LCwlCpVEyZMgWw95o88MADREVF4evry7Bhw9iyZct5z2OxWHjwwQeZO3cuM2bMoFOnTqSkpDBx4sQa23333XckJyfj6+vLJZdcwieffNLsrVUN5RYtRbNmzXK8AHVJTExsmWCq6fV69PpG3NXkSTpfCZpH7XdgHd3MtIu78d+tR1mx9wRZeaUkRbl2bJGiKDzxzS5OlVXx9s198dM1rHUoPT2dzMxMkoOrSPn1QbCZodu1MPaf9slxhRCeS1HAXO6ac/v4N8v/kIKCApYtW8YLL7xAQEDAOc+HhoY2+Rx/dN9991FVVcXatWsJCAggPT2dwMBAYmNjWbx4Mddddx0ZGRkEBwfj52efHeAvf/kLixcv5pNPPiEuLo6XX36ZMWPGkJWVRXh47T0K27dv5/jx46jVavr06YPRaKR3797MnTuX7t27A3Do0CGuv/56HnzwQe666y527NjBo4+6/sOqWyRFkZGRjqZE0YIC2kCPGyBtIWx+j47Xf8zortEsTz/BB2sP8tL1PV0a3j+X7eOrbcdQq2BH9mmGJEXUa78aM94bqtAeLMFwspzUe0YSMWGevetQCOHZzOXwYlvXnPuvOaA7N4mpy9KlSwkMPPsh84orruCrr74iKysLRVHo0qWLM6I8R3Z2Ntdddx09etinevpjY8OZBCcqKsqRjJWVlfHuu++yYMECrrjiCgA++OADli9fzkcffcRjjz1W63kOHrT3Njz77LO89tprxMfH8+qrrzJy5Ej2799PeHg47733Hp07d2bu3LkAdO7cmd27d/PCCy845drry+PeHbKzs0lLSyM7Oxur1UpaWhppaWmUlpY6tunSpQupqWeL7hUUFJCWluaY2DMjI4O0tDSMRmOLx+92Bk23f01fAsW5zBhh/yNJ3XGcvGLTeXZ0rvfXHuC96m68f17bs94JEfxpxvuLg/Gd0g7jjbFM+K4YtF7e+ieEcDuXXHKJ470qLS2NN954A7C3hjeHdevWERgY6FgWLVpU63YPPPAA//jHPxg6dCjPPPMMv//++3mPe+DAAcxmM0OHDnWs8/HxYeDAgezduxeAGTNm1Dg3gM1mH/Lw5JNPct1119GvXz/mz5+PSqXiq6++AuzvwwMGDKhxvoEDBzbuB9CM3KKlqCH+9re/8cknnzge9+nTB4BVq1YxcuRIwP7DLioqcmzz3Xffcccddzge33TTTQA888wzPPvss84P2p3F9LJXuM7eCFs/pt+lT9IvLoy0o4X8dqiAq3u1/Cexr7Ye5cUf7GPIZl/RhYkDYuu9b50z3nfwxag9SXp6utQgEsIb+PjbW2xcde4GCAgIqHUOxeTk5GYZM9u/f3/S0tIcj6Ojo2vd7q677mLMmDF8//33/Pzzz8yZM4dXX32V+++/v9Hnfu65587p9oqJiQGo8b9Wr9eTmJhIdnZ2o8/VEjyupWjBggUoinLOciYhAnv2/ccxSlOmTKl1n1afEJ0x6G77123zwVLJ89d0Z/WjI12SEH2+KZvZ3+wCYPrFicwY0bFB+2dmZmIx1D65rcx4L4QXUansXViuWJppTGJ4eDhjxozh7bffpqys7Jzn6zvg2M/Pj6SkJMcSFBRU57axsbHMmDGDb775hlmzZvHBBx8AoNPpALBarY5tO3bsiE6nY8OGDY51ZrOZLVu2OBKeqKioGucG6NevH3q9noyMjBr7HT58mLi4OMDeXbZ169YasV1oAHdL8LikSDhBl/+DoLZQdhL2pJLSNpjY8IZ9EmoOp8uqePmnfVhtCpMGxvLEFQ3vZ0+Oa4f20Ln/XEBmvBdCuJ+3334bq9XKwIEDWbx4MZmZmezdu5c33niDwYMHN+u5HnroIX766ScOHTrE9u3bWbVqFV27dgUgLi4OlUrF0qVLOXnyJKWlpQQEBHDPPffw2GOPsWzZMtLT05k2bRrl5eVMnTq1zvMEBwczY8YMnnnmGX7++WcyMjIcs1DccMMNANx9993s27ePxx9/nP379/Pll186ijK7coYFSYoEaHxgQPUv+KZ59rs6qm05XMDkD3+jtNLi9DDCAnS8f2t/Zl3WiRcn9Gj4H4a5gpS0ZzHklWDKrqjxlMx4L4RwR4mJiWzfvp1LLrmEWbNm0b17dy677DJ++eUX3n333WY9l9Vq5b777qNr166MHTuWTp068c477wDQrl07/v73vzN79myio6OZOXMmAP/85z+57rrruPXWW+nbty9ZWVn89NNPhIWFnfdcc+fO5aabbuLWW29lwIABHDlyhJUrVzr2S0hI4Ouvv+abb76hZ8+evPvuuzz55JMALr3zW6U010gvL1dcXExISAhFRUUEBwe7OpzmV5YPr6WAtRKmroDYAVRZbFzyymqOF1ZwSedIPritP1pN8+bRJ0sqOXyqjAFNLRZpqYQvboasFeSb/Zmw0YDRrxRLjAVtrhaD1T7jfURE/QdsCyHch8lk4tChQyQkJODr24haZcLtvfDCC8ybN69RdQHP9/vRkPdvaSkSdgER0ON6+/eb3wNAp1Xz9uS++PqoWZVxkr//L73Z7pYAyDxRwvi3N3DH/C1kGEsafyCrGb6+E7JWgI8/EdO/Yd3KHSyZu4TXr36dJXOXsG7ZOkmIhBDCjbzzzjts2bKFgwcP8tlnnzF37lxuv/12l8YkSZE4a2D17fl7UqHEXq6gd2wo/76xDyoVfPbbET7ecLjJp7FYbSzadIRr3/2V44UVRATq8NE0sg/ZaoZvpsO+paDRw02fQ5y9H15mvBdCCPeVmZnJNddcQ0pKCs8//zyzZs1y+Q1Q0n1WT17ffXbGR5fD0U2kx91BZvglJCcnk5KSwgdrD/LCD3tRqeDdyf0Y293Q4EMrisIve/P457J9ZOXZ60r1jwvj/dv6Ex6ga3isZhN8fQdk/ABqrT0h6jSm4ccRQrg96T4T59Nc3WceV6dIOFd+p0lM+NdajJGfYkn8Fq3RB4PVwDeffcPhUx1YtCmbGQu3sfaxS+jQpv53qCmKwl2fbOWXfXkAhPn78MCoZCYPikOnbUSDZWWpfQzRoTWg9YWJn0Gnyxt+HCGEEKKaJEWihgkvfITxptgaxQ+NR41ce+u1rPp+DSUmC8dOl9dIiNbuP0mv9qGE+Ps41hWWV3HkVDmGEF+ig31RqVT0bB/Kuqx87hyawD0jOxLi50NDOOYyi40mZcff4Ogm0AXCpC8gYXjTL14IIUSrJkmRcLBXgz5xbjXoWF+MGiP7M/bxxqQ+mMxni3sVllcx7dOtqFQwpGME+aWVHM4vo9hkv4X/71d34/Yh8QBMuziB6/q1o31Yw2og1ZzLzIz2UCmGvFJSJ7Qh4rYl0L5/0y5cCCGEQJIi8QeZmZlYYmqvR3SmGnRKSgq+Pmdnq88tMpEQEcA+Ywkrq7vGzogK0mP7w5A1f50Wf13Df+Ucc5nF+gK+cHEQxuwKJqwOYd3zkhAJIYRoHpIUCYfk5GS0ubX/StRVDbprTDA/PjicrUdOs+d4ETGhfsS18adDuH+jEqA/q3suMz+MvsUyl5kQQohmI0mRcEhJScFgNWA8WjMJMWVXYDBH1Jl8qFQqBsSHN70AYy0yMzOxRFcC595t8sfWKyGEEKKppE6RqCF1YSqG9QZMX5ooXVeKaUEuhv8eI/XqELBZL3yA5mSzkpz/M9qDxbU+LXOZCSGEaE6SFIkaIiIiWLds3dlq0M9/wrpJYUTk/wbrXm25QCoK4fMbSTm6EEO+CdNRU42nZS4zIYS7u+qqqxg7dmytz61btw6VSsXvv//uWPfJJ58wYMAA/P39CQoKYsSIESxdurTGfqtXr0alUtW6GI1Gp11LfHw8//73v5vteMePH+eWW26hTZs2+Pn50aNHD7Zu3dpsx28sSYpErRzVoIddCVdWJ0Or58Dh9c4/ed4++OBSyFoOWl9S3367ZuvVlyYM6+1zmQkhREOlp6ezZMkS0tPTnXqeqVOnsnz5co4dO3bOc/Pnz6d///707NkTgEcffZS7776bG2+8kd9//53NmzczbNgwrrnmGt56661z9s/IyCA3N7fGEhUV5dTraS6nT59m6NCh+Pj48OOPP5Kens6rr756wUlmW4Qi6qWoqEgBlKKiIleH4hrfzFCUZ4IVZW4nRSnJc845LFWKsuENRflHjP1cr3VTlOM7HE/v2bNHWbJkibJnzx7nnF8I4bYqKiqU9PR0paKiotHHOHnypDJszDAlaVySEj81Xkkal6QMGzNMOXnyZDNGepbZbFaio6OV559/vsb6kpISJTAwUHn33XcVRVGUjRs3KoDyxhtvnHOMRx55RPHx8VGys7MVRVGUVatWKYBy+vTpZo3VZrMpzzzzjBIbG6vodDolJiZGuf/++xVFUZQRI0YoQI3ljK+//lpJSUlRdDqdEhcXp7zyyisXPNfjjz+uDBs27Lzb5OTkKOPGjVN8fX2V+Ph4ZdGiRUpcXJzyr3/9q9btz/f70ZD3b2kpEvVz5SsQ0RlKjbB4qr17q4lqfFo7tBbmDYOfnwJzGcQPh+mroW1vx/Yyl5kQoikc5T0m+hI4PBDfib4YhxmZcMsEp5xPq9Vy2223sWDBghqTaX/11VdYrVYmTZoEwH/+8x8CAwO5++67zznGrFmzMJvNLF682CkxnrF48WL+9a9/8d5775GZmcm3335Ljx49APjmm29o3749zz33nKNVCmDbtm1MnDiRm266iV27dvHss8/y9NNPs2DBgvOe67vvvqN///7ccMMNREVF0adPHz744IMa29x2223k5OSwevVqFi9ezPvvv09eXl4dR2w+cveZqB9dANywwN6tdWgNvNUfLn8Bek4ElepstenqudLOp2Yxxiq0R0wYjEWkjvMhIiISRv8dek8GteTsQojmUWd5j+ritM4q73HnnXcyd+5c1qxZw8iRIwF719l1111HSEgIAPv376djx47odOfOAdm2bVuCg4PZv39/jfXt27ev8TguLo49e/Y0Os7s7GwMBgOjR4/Gx8eHDh06MHDgQADCw8PRaDQEBQVhMJyd9/K1115j1KhRPP300wB06tSJ9PR05s6dy5QpU+o818GDB3n33Xd55JFH+Otf/8qWLVt44IEH0Ol03H777ezbt48VK1awZcsW+ve316L78MMPSU5ObvT11Ze864j6i06BW1MhohOUnYTU6eS/NYbho/tzzWPX8ND/HuKax65h+Njh5Ofn13mYGp/WLg7G99YojDe2Z8LaMJi5FfreKgmREKJZ1ac4rTN06dKFIUOG8PHHHwOQlZXFunXrmDp1ao3tlAvMzf7nhGndunWkpaU5lh9++KHOfbt160ZgYCCBgYFcccUVtW5zww03UFFRQWJiItOmTSM1NRWLpfaf1xl79+5l6NChNdYNHTqUzMxMrFYr69atc5w3MDCQRYsWAWCz2ejbty8vvvgiffr0Yfr06UybNo158+YB9vFSWq2Wvn37Oo6blJTUImOOpKVINEzcYJixATa+CWvmMuG9tbXOlTbhlgmsW7au5r7FOaT/8AFG8z58Yw01nvLt4IexjYr0w0ZSUpq/3pEQonVrTHHa5jJ16lTuv/9+3n77bebPn0/Hjh0ZMWJEjdjWr19PVVXVOclPTk4OxcXFdOrUqcb6hIQEQkND63X+H374AbPZDICfn1+t28TGxpKRkcGKFStYvnw59957r6OFy8enYfNUntG/f3/S0tIcj6OjowGIiYk5p1Wua9euTu8irA/5OC4aTquD4bNIH7UQoyGk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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(distances,energies[\"HF_\"+basis],linestyle=\"dashed\",label=\"HF - \"+basis)\n",
    "plt.plot(distances,energies[\"FCI_\"+basis],label=\"FCI - \"+basis)\n",
    "plt.errorbar(vqe_distances,energies[\"VQE_\"+basis],label=\"VQE - \"+basis,linestyle=\"\",marker=\"o\",markersize=5,mew=0.5,mec=\"black\")\n",
    "\n",
    "plt.xlabel(r\"$r$ [$\\AA$]\")\n",
    "plt.ylabel(r\"$E$ [Hartree]\")\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "01aa6f2e",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "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.12.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
