{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## Programmation Quantique\n",
    "\n",
    "### Nicolas Ollinger et Ioan Todinca\n",
    "<img style=\"width:15%; height: auto;\" src=\"img/lifo.png\">\n",
    "\n",
    "#### M2 info, S9 2025/2026"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "## Enseignement hybride multi-lingue\n",
    "\n",
    "Cette année nous expérimentons une version de ce cours pour un <b class=\"cool\">public international</b>.\n",
    " - les étudiants du **M2 ARIAS** de l'Université d'Orléans ;\n",
    " - des étudiants **GPEX** du programme Minerve de l'Université d'Orléans ;\n",
    " - des étudiants des universités partenaires du programme **Athena** avec évaluation ;\n",
    " - des étudiants auditeurs libres des universités partenaires du programme **Athena**.\n",
    " \n",
    " Les cours (CM) sont proposés à tous ces publics en hybride sur une même séance. Le cours se déroule en anglais avec une retransmission sur **Teams**.\n",
    " Le support de cours est disponible :\n",
    "  - en **anglais** sur le <b class=\"cool\">canal Teams</b> du cours ;\n",
    "  - en **français** sur la <b class=\"cool\">page Celene</b> du cours."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "## Descriptif du cours\n",
    "\n",
    "Ce cours propose de découvrir l'informatique quantique à\n",
    "travers la <b class=\"cool\">programmation de circuits quantiques</b>. \n",
    "\n",
    "Les étudiants sont\n",
    "invités à <b class=\"cool\">construire des circuits</b> et à <b class=\"cool\">simuler leur exécution</b> pour\n",
    "comprendre ce que propose la technologie quantique actuelle et comment\n",
    "elle se distingue des modèles classiques de <b class=\"cool\">calcul booléen</b>. Cette\n",
    "approche expérimentale permettra ensuite de présenter plus précisemment\n",
    "les promesses algorithmiques et les enjeux actuels de cette technologie.\n",
    "\n",
    "L'évaluation prend la forme d'un contrôle terminal et d'<b class=\"cool\">éléments à réaliser sur machine</b> et à\n",
    "rendre à l'issu des TPs."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "## Plan de bataille\n",
    "\n",
    "$$\n",
    "\\begin{align*}\n",
    "\\textbf{ARIAS}\\quad 10\\mathrm{h~} &\\textbf{CM} + 10\\mathrm{h~} \\textbf{TD} + 10\\mathrm{h~} \\textbf{TP}\\\\\n",
    "\\textbf{GPEX}\\quad 10\\mathrm{h~} &\\textbf{CM} + \\phantom{1}6\\mathrm{h~} \\textbf{TD} + \\mbox{TP en autonomie}\\\\\n",
    "\\textbf{Athena}\\quad 10\\mathrm{h~} &\\textbf{CM} + \\mbox{documents traduits et sessions en ligne}\n",
    "\\end{align*}\n",
    "$$\n",
    "\n",
    "| Séance | Intervenant | Durée | Programme |\n",
    "| :-- | :-- | :-: | :-- |\n",
    "| CM1 | N. Ollinger | __2h__ | *Circuits quantiques et calcul réversible* |\n",
    "| CM2 | N. Ollinger | __2h__ | *Circuits et calcul quantique, l'algorithme de Bernstein-Vazirani* |\n",
    "| CM3 | I. Todinca | __2h__ | *Informatique quantique, algorithmes importants* |\n",
    "| CM4 | I. Todinca | __2h__ | *L'algorithme de recherche quantique de Grover* |\n",
    "| CM5 | I. Todinca | __2h__ | *Informatique quantique pour informaticien !* |"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "## Évaluation UO\n",
    "\n",
    "$$\n",
    "\\textbf{UE} = \\frac13 \\textbf{CC} + \\frac23 \\textbf{CT}\n",
    "$$\n",
    "\n",
    "$\\textbf{CC}$ : Des notebook Jupyter à compléter et à rendre sur [Celene](https://celene.univ-orleans.fr/course/view.php?id=12816).\n",
    "\n",
    "Exercices à réaliser à l'aide de Python et de la bibliothèque [Qiskit](https://qiskit.org) (v1.2)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## Circuits quantiques ?\n",
    "\n",
    "Les ordinateurs quantiques d'aujourd'hui (ou plutôt de demain ?) s'utilisent comme des _coprocesseurs_ : on y fait subir une <b class=\"cool\">transformation unitaire</b> à un <b class=\"cool\">registre de qubits</b> initialement tous à zéro avant d'effectuer des <b class=\"cool\">mesures</b> sur son état.\n",
    "\n",
    "Les <b class=\"cool\">transformations unitaires</b> sont codées sous forme de circuits et la programmation quantique ressemble à de la <b class=\"cool\">programmation assembleur</b>.\n",
    "\n",
    "La programmation quantique propose une <b class=\"cool\">nouvelle forme de parallélisme</b>."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "<img style=\"width:100%; height: auto;\" src=\"img/quito1.png\">"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "<img style=\"width:100%; height: auto;\" src=\"img/quito2.png\">"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "<img style=\"width:100%; height: auto;\" src=\"img/quito3.png\">"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "## Illustré avec Qiskit\n",
    "\n",
    "Ce cours est aussi un notebook jupyter téléchargeable et exécutable dans le Cloud dont les exemples sont construits à l'aide de la bibliothèque __[Qiskit](https://qiskit.org)__ qui permet de manipuler des circuits quantiques en Python :\n",
    "  1. <b class=\"cool\">construire</b> des circuits ;\n",
    "  2. <b class=\"cool\">exécuter</b> ces circuits localement dans un  simulateur ;\n",
    "  3. <b class=\"cool\">exécuter</b> ces circuits sur des processeurs quantique (par exemple d'IBM) ;\n",
    "  4. <b class=\"cool\">analyser</b> les résultats des exécutions."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "\n",
    "### Importons le nécessaire"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "from qiskit import QuantumCircuit, transpile\n",
    "from qiskit.providers.basic_provider import BasicProvider\n",
    "from qiskit_aer import UnitarySimulator\n",
    "from qiskit.visualization import plot_histogram\n",
    "import qiskit.quantum_info as qi\n",
    "from math import sqrt\n",
    "import numpy as np\n",
    "\n",
    "# Un simulateur de circuit complet\n",
    "sim = BasicProvider().get_backend('basic_simulator')\n",
    "\n",
    "# Un simulateur calculant la matrice de transformation\n",
    "usim = UnitarySimulator()\n",
    "\n",
    "# Afficher un circuit\n",
    "def draw_circ(circ): display(circ.draw(output='mpl'))\n",
    "    \n",
    "# Calculer la matrice d'un circuit\n",
    "def mat_circ(circ): return usim.run(circ).result().get_unitary()\n",
    "\n",
    "def show(circ):\n",
    "    draw_circ(circ)\n",
    "    display(mat_circ(circ).draw('latex'))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "source": [
    "Mais au fait... <b class=\"cool\">C'est quoi un circuit quantique ?</b>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "# Un zeste de théorie..."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "### Circuits booléens classiques\n",
    "\n",
    "Depuis les travaux de Shannon à la fin des années 30, l'<b class=\"cool\">algèbre booléenne</b> et le système binaire fondent l'électronique numérique.\n",
    "\n",
    "Un registre de <b class=\"cool\">mémoire classique</b> stocke un vecteur de <b class=\"cool\">bits</b> qui prennent chacun une valeur parmi deux : $0$ ou $1$. Les bits sont indépendants, $n$ bits stockent un valeur parmi $2^n$.\n",
    "\n",
    "Des <b class=\"cool\">portes logiques</b> réalisant des fonctions logiques ($\\operatorname{ET}$, $\\operatorname{OU}$, $\\operatorname{NON}$) permettent de <b class=\"cool\">calculer efficacement</b> toute fonction booléenne $f : \\left\\{0,1\\right\\}^n \\longrightarrow \\left\\{0,1\\right\\}^m$."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "### Un qubit\n",
    "\n",
    "Un registre de <b class=\"cool\">mémoire quantique</b> est un <b class=\"cool\">système quantique discret fini</b> constitué de <b class=\"cool\">qubits</b>.\n",
    "\n",
    "Un <b class=\"cool\">bit quantique</b> est une superposition de $0$ et de $1$ :\n",
    "$$\n",
    "\\alpha \\left|0\\right> + \\beta \\left|1\\right> \\quad\\mbox{avec}\\quad \\alpha, \\beta \\in \\mathbb{C}\n",
    "\\quad\\mbox{tels que}\\quad |\\alpha|^2+|\\beta|^2 = 1\n",
    "$$\n",
    "\n",
    "Par exemple $\\left|0\\right>$ ou encore $\\frac{1}{\\sqrt{2}}\\left(\\left|0\\right>+\\left|1\\right>\\right)$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "### Des qubits\n",
    "\n",
    "Un registre de <b class=\"cool\">$n$ qubits</b> est une superposition de chacun des vecteurs de bits possibles, chacun muni d'une amplitude.\n",
    "\n",
    "$$\n",
    "\\left|\\varphi\\right> = \\sum_{x\\in\\{0,1\\}^n} \\alpha_x\\left|x\\right> \\quad\\mbox{tels que}\\quad \\sum_{x\\in\\{0,1\\}^n}  |\\alpha_x|^2 = 1\n",
    "$$\n",
    "\n",
    "Par exemple $\\frac12\\left|1000\\right>+\\frac12\\left|0100\\right>+\\frac12\\left|0010\\right>+\\frac12\\left|0001\\right>$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "### Produit tensoriel\n",
    "\n",
    "La <b class=\"cool\">composition</b> de deux registres quantiques s'obtient par l'opérateur bilinéaire de produit tensoriel $\\otimes$ qui satisfait $\\left|x\\right> \\otimes \\left|y\\right> = \\left|xy\\right>$.\n",
    "\n",
    "$$\n",
    "\\left|1\\right> \\otimes \\frac{1}{\\sqrt{2}}\\left(\\left|0\\right>+\\left|1\\right>\\right) =\n",
    "\\frac{1}{\\sqrt{2}}\\left(\\left|10\\right>+\\left|11\\right>\\right)\n",
    "$$\n",
    "\n",
    "Contrairement au cas classique, tout registre n'est pas décomposable en sous-registres ! \n",
    "\n",
    "Exemple d'état <b class=\"cool\">intriqué</b> : $\\frac{1}{\\sqrt{2}}\\left(\\left|00\\right>+\\left|11\\right>\\right)$."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "## Mesure quantique (observation)\n",
    "\n",
    "<img style=\"width=100%; height=auto; margin: auto\" src=\"img/mesure.png\" />"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "## Mesure quantique d'un qubit particulier\n",
    "\n",
    "Partant d'un état $\\left|\\varphi\\right> = \\sum_x \\alpha_x\\left|x\\right>$, si on mesure le qubit numéro $i$, on observe la valeur $r$ avec la probabilité $p_r$ et le système change d'état :\n",
    "\n",
    "$$\n",
    "\\sum_{x\\in\\left\\{0,1\\right\\}^n} \\alpha_x\\left|x\\right> \\underset{\\phantom{blop}p_r\\phantom{blop}}{\\longrightarrow}\n",
    "\\frac{1}{\\sqrt{p_r}} \\sum_{x\\in\\left\\{0,1\\right\\}^n | x_i = r} \\alpha_x\\left|x\\right>\n",
    "$$\n",
    " \n",
    "$$\n",
    "\\mbox{avec}\\quad p_r = \\sum_{x\\in\\left\\{0,1\\right\\}^n | x_i = r}|\\alpha_x|^2\n",
    "$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "## Évolution unitaire\n",
    "\n",
    "En l'absence de mesure, lorsqu'il est isolé, l'état d'un système quantique évolue de manière <b class=\"cool\">unitaire</b>.\n",
    "\n",
    "$$\n",
    "U : \\mathbb{C}^{\\{0,1\\}^n} \\rightarrow \\mathbb{C}^{\\{0,1\\}^n}\n",
    "$$\n",
    "\n",
    "1. $U$ est linéaire : $$\n",
    "U\\left(\\alpha\\left|\\varphi\\right>+\\beta\\left|\\psi\\right>\\right) = \\alpha U\\left|\\varphi\\right>+\\beta U\\left|\\psi\\right>\\quad;\n",
    "$$\n",
    "2. $U$ préserve la norme : $\\left\\| U\\left|\\varphi\\right> \\right\\| = \\left\\| \\left|\\varphi\\right> \\right\\|$."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "## Porte quantique\n",
    "\n",
    "Un circuit quantique code une <b class=\"cool\">transformation unitaire</b> obtenue par composition de <b class=\"cool\">portes quantiques</b> elles aussi unitaires, donc réversibles, avec autant de qubits en entrée qu'en sortie.\n",
    "- composition séquentielle : produit de matrices ;\n",
    "- composition parallèle : produit tensoriel.\n",
    "\n",
    "Quelle <b class=\"cool\">famille de portes universelles ?</b>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "## Portes sur 1 qubit\n",
    "\n",
    "$$\n",
    "\\begin{array}{clclcl}\n",
    "X :& \\left|0\\right> \\mapsto \\left|1\\right> & H :& \\left|0\\right> \\mapsto \\frac{\\left|0\\right>+\\left|1\\right>}{\\sqrt2}  & R_\\theta :& \\left|0\\right> \\mapsto \\left|0\\right>\\\\\n",
    "   & \\left|1\\right> \\mapsto \\left|0\\right> &    & \\left|1\\right> \\mapsto \\frac{\\left|0\\right>-\\left|1\\right>}{\\sqrt2} &  & \\left|1\\right> \\mapsto e^{i\\theta}\\left|1\\right> \\\\\n",
    "\\end{array}\n",
    "$$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 185.453x117.056 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/latex": [
       "$$\n",
       "\n",
       "\\begin{bmatrix}\n",
       "\\frac{1}{2} + \\frac{i}{2} & \\frac{1}{2} - \\frac{i}{2}  \\\\\n",
       " \\frac{1}{2} - \\frac{i}{2} & \\frac{1}{2} + \\frac{i}{2}  \\\\\n",
       " \\end{bmatrix}\n",
       "$$"
      ],
      "text/plain": [
       "<IPython.core.display.Latex object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from math import pi\n",
    "circuit = QuantumCircuit(1)\n",
    "# remplacer ici le x par h ou t (=r(pi/4)) ou sx (sqrt(x))\n",
    "circuit.sx(0)\n",
    "show(circuit)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "## Portes contrôlées\n",
    "\n",
    "$$\n",
    "\\begin{array}{cl}\n",
    "CX :& \\left|00\\right> \\mapsto \\left|00\\right> \\\\\n",
    "   & \\left|01\\right> \\mapsto \\left|01\\right> \\\\\n",
    "   & \\left|10\\right> \\mapsto \\left|11\\right> \\\\\n",
    "   & \\left|11\\right> \\mapsto \\left|10\\right> \\\\\n",
    "\\end{array}\n",
    "$$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 203.683x200.667 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/latex": [
       "$$\n",
       "\n",
       "\\begin{bmatrix}\n",
       "1 & 0 & 0 & 0  \\\\\n",
       " 0 & 0 & 0 & 1  \\\\\n",
       " 0 & 0 & 1 & 0  \\\\\n",
       " 0 & 1 & 0 & 0  \\\\\n",
       " \\end{bmatrix}\n",
       "$$"
      ],
      "text/plain": [
       "<IPython.core.display.Latex object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "circuit = QuantumCircuit(2)\n",
    "circuit.cx(0,1)\n",
    "show(circuit)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAVMAAAHKCAYAAAC+Iqj/AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAB2HAAAdhwGP5fFlAAAl1klEQVR4nO3daXxU9aGH8d9kBkiibCFRC4QtEiAQyGJBLEFcoiAtqFAorbLkIhRtilXrLWrrpcX2drFYuLWplpSC9UaMUBUq0hKUQL0WSEIICUUoEkAIJCAEQoBJ5r7gw8iQdZL/rHm+r3LOzDnnHz7m8SxzzlgcDodDAIBWCfH1AAAgGBBTADCAmAKAAcQUAAwgpgBgADEFAAOIKQAYQEwBwABiCgAGEFMAMICYAoABxBQADCCmAGAAMQUAA4gpABhATAHAAGIKAAYQUwAwgJgCgAHEFAAMIKYAYAAxBQADiCkAGEBMAcAAYgoABhBTADCAmAKAAcQUAAwgpgBgADEFAAOIKQAYQEwBwABiCgAGEFMAMICYAoABxBQADCCmAGAAMQUAA4gpABhATAHAAGIKAAYQUwAwgJgCgAHEFAAMIKYAYAAxBQADiCkAGEBMAcAAYgoABhBTADCAmAKAAcQUAAwgpgBgADEFAAOIKQAYQEwBwABiCgAGEFMAMICYAoABxBQADCCmAGAAMQUAA4gpABhATAHAAGIKAAYQUwAwgJgCgAHEFAAMIKYAYAAxBQADiCkAGEBMAcAAYgoABhBTADCAmAKAAcQUAAwgpgBgADEFAAOIKQAYQEwBwABiCgAGEFMAMICYAoABxBQADCCmAGAAMQUAA4gpABhATAHAAGIKAAYQUwAwgJgCgAHEFAAMIKYAYAAxBQADiCkAGEBMAcAAYgoABhBTADCAmAKAAcQUAAwgpgBgADEFAANsvh4AgKbV1jpUvP+UtheXq2DPSX1eeVEOh0OdO7bX0P4RSo7rpvj+EbLZ2D/yFWIaBKqqqpSbm6vS0lKdOHFCYWFh6tevn1JSUhQREeHr4aEVyk9VK3PNXmW8uUcHjlQ2+t7uN4RrzqQBemTSAHW/4TovjRBXWBwOh8PXg0DLFBUVaeHChVq3bp3Onz9f53WbzaZp06bpxRdfVFRUlA4fPqzo6Gjn64mJicrLy/PmkNFMDodDv39zj77/6206W3XJrWU7tLfqJ48l6YnpQ2S1sqfqLfxLByC73a758+crISFB2dnZ9Yb0yvtWrlyp5ORklZaWaufOnS6vJycne2O4cFPF59VKnbNe8xb9w+2QStKFizV6evE2fWX6Wh0pO+eBEaI+xDTAnD17VuPHj9eSJUtUU1Pj8lpkZKQSExMVHx+v0NBQ5/xDhw7p4YcfVkFBgcv7k5KSvDFkuOHEyfMak/ZXbfz4s1av6+NdJzRqxlqVHj1rYGRoCjENIHa7XZMmTdKGDRuc86xWq9LT07Vr1y6dOHFCeXl5Kiws1MmTJ/XKK6+oY8eOkqTNmzfr1VdfdVkfe6b+pfqCXeMe3aCifaeMrfPTz87q7jnv6XTlRWPrRP04ZxpAnnjiCS1evNg53b17d61evVojRoxocJmPPvpIo0ePlt1ud5lvs9lUWVnpsgcL3/rBS9v088xCj6z7Px6I1R8Wpnhk3biMPdMAkZOTo5deesk53aVLF61fv77RkErSyJEjNXv27Drz4+LiCKkf2VZ0Qr9cvstj61+2Zq82/OOwx9YPYhoQ7Ha70tPTdfVBxNKlSxUfH9+s5adNm1ZnHof4/uWnf9ip2lrPHiT+5PcFHl1/W0dMA0BWVpaKi4ud02PGjNFDDz3U7OWHDRtWZ15zLj699dZbuv/++9WrVy+Fhobqxhtv1OjRo7V06dIGP0EA9x0+dk7vfFDq8e1syS/Trr0nPb6dtoqYBoCrD+8lacGCBW4t37lzZ1mtVpd5je2Znj59WmPHjtXkyZP19ttv69ChQ7pw4YKOHz+u3Nxcffe731VCQoJ2797t1jhQv9f/ut/je6VXrFy7zyvbaYu4AOXnSkpKFBcX55zu16+f9u3bJ4vF0ux1XLx4UR06dHBOW61WnTlzRuHh4XXee+nSJd17773atGmTpMsXuebMmaPY2FiVlZVp5cqVzg/69+jRQx9//LF69OjR0l+vWaqrq7V//36PbsOXvrd4r/72T+/sMd4yqKOW/2iwV7blazExMV69LsDtpH5u7dq1LtPjx493K6SSdPKk6x/qwIED6w2pJGVkZDhDOnToUG3cuFGRkZHO19PT0zVz5ky99tprOnLkiJ588kllZWW5NR537d+/X0OGDPHoNnxqwM+k9lFe2dT2ouMaMuQbkoJ/H6qoqEiDB3vvfxwc5vu5LVu2uEyPHj3a7XXs2+d6aNfQIb7dbtcLL7wgSbJYLFqxYoVLSKXLe7W///3vnXujq1at4nC/tdp58fkJ1jAphE9xeAIx9XMlJSUu01cf8jfX1q1bXaYbiukHH3ygsrIySdIdd9xR74UrSQoPD9ecOXMkXb6HfNWqVW6PCVdYJIu16bcZ3SQHpJ5ATP3ckSNHXKajotw/HFy3bp3LdENX8t9//33nz+PGjWt0nWPHjnX+/N5777k9JlzhkGrtTb/N6Ca9vL02gpj6MYfDoaqqKpd57p5Q37Vrl3Jzc53TISEhSkhIaPC9V9xyyy2NrjcpKcn5CYHi4mJxHbMVLh733rbsZ6RaPtbmCezv+zGLxaLQ0FBVV1c75508edJ5v31zPP/88y7TsbGxuv766+t97969e50/9+nTp9H12mw29ejRQ6WlpTp37pyOHDminj17Nntc7oiJiVFRUZFH1u0PfvDbfVq7pdwr2xqVHK2MN4P33/JqMTExXt0eMfVz3bp1cznULygoUO/evZu1bHZ2ttasWeMyr7HPl37++efOn6+98NTQ2EpLS53LeiqmoaGhXr0q62333R7itZjeMyomqP8tfYnDfD937SF5cz+GtH37dqWlpdWZ31hMz5794lFtzTmdEBYW5vy5srLxp8CjYdPG9VNYqOcvQoWEWDRzYn+Pb6etIqZ+7q677nKZXrVqlXJychpdZuPGjRo3bly9geMZpv6nS6cO+uY4zx+Sfu32aEXfVP8pHrQeMfVzM2bMcPmAfW1trSZMmKCMjAyXc6mSlJeXp9mzZys1NVXl5eXq27evbLYvzuRYLBYlJiY2uK2rz6Veu+76XH1/vjvncVHXs48k6Lowz511s9ksWvgo/yP1JGLq5yIiIrRo0SKXeefOndO8efMUERGhYcOGKSkpSZGRkUpOTtayZcvkcDgUHR2tzMxMl+eY9u/fX506dWpwW126dHH+XF7e9Dm8ioqKepeF+/r27KhffO/LHlv/D+ckatiAbh5bP4hpQHj88cc1d+7cOvPPnz+vwsJC5efnu4QtNTVVW7Zs0alTrk9sb+oQf8CAAc6fP/3000bfa7fbnRfGrrvuOo/fn98WfHvKID14Vx/j673jy1/Sgv+o/wYMmENMA4DFYlFGRoYyMzMbvWIeHx+vFStWaMOGDerVq1edbx5t6hmmV9//vn379kbfm5eX5/wOqri4OLefF4C6QkIsev3nYzR+dHTTb26mlKQb9faSu9WuHX/qnsZHowLIrFmzNGPGDG3btk0FBQWqqKiQzWZTdHS0hg8fXudzdfn5+S7TTe2Zjh07Vr/61a8kXb6r6amnnmrwvevXr3f+3NTdUmi+Du2tWrP4bj29+J/6zZ93qzX3Qsy6v7/+Z8FtCvfguVh8gUfwBbHu3bvr6NGjzulTp041em7TbrerZ8+eKisrk8ViUX5+fr3351dVVSk2NlZHjhyRxWJRUVFRi54ZgMbl7jim2f+1RXsPnnZruV5fuk4Zz31F41LM7eGiaez7B6mysjKXkMbExDR5kchms+m5556TdPlW1unTp7uci5Wkmpoaffvb33aeL50yZQoh9ZCU5JtU8vYk/fW39+iro6PVvpFDdZvVortv7a7Vi+/S/nVTCKkPsGcapNavX+9y+P31r3+9WU93qu/h0HPnzlVsbKyOHz+uP/3pT15/ODQuu3ipRm/nHNSU72+q89qOrIlKimv6rjV4DidTgpS7F5+uaNeundasWaOpU6fq/fff12effVbn/n7p8j3+q1evJqRe1L6dVXExXet9rUN7Lz/GD3VwmB+krr345M63kXbu3Fnr16/Xm2++qQkTJqhnz55q3769oqKiNGrUKP3mN79RQUEB93gDV2HPNEhdu2fakttIJ0+erMmTJ5saEhDU2DMNQqdPn9aBAwec03369FFEhBe/GgNog4hpECooKHB5WDMPNwE8j8P8IHT77bfz5HvAy9gzBQADiCkAGEBMAcAAYgoABhBTADCAmAKAAcQUAAwgpgBgADEFAAOIKQAYQEwBwABiCgAGEFMAMICYAoABxBQADCCmAGAAMQUAA4gpABhATAHAAGIKAAYQUwAwgJgCgAHEFAAMIKYAYAAxBQADiCkAGEBMAcAAYgoABhBTADCAmAKAAcQUAAwgpgBgADEFAAOIKQAYQEwBwABiCgAGEFMAMICYAoABxBQADCCmAGAAMQUAA4gpABhATAHAAGIKAAYQUwAwgJgCgAHEFAAMIKYAYAAxBQADiCkAGEBMAcAAYgoABhBTADCAmAKAAcQUAAwgpgBgADEFAAOIKQAYQEwBwABiCgAGEFMAMICYAoABxBQADCCmAGAAMQUAA4gpABhATAHAAGIKAAYQUwAwgJgCgAHEFAAMIKYAYAAxBQADiCkAGEBMAcAAYgoABhBTADCAmAKAAcQUAAwgpgBgADEFAAOIKQAYQEwBwABiCgAGEFMAMICYAoABxBQADCCmAGAAMQUAA2y+HgCAxtXWOpTzz8+09sND2rzjWL3vWfRKgb55X4zuS+kpq5V9JF+wOBwOh68HgdarqqpSbm6uSktLdeLECYWFhalfv35KSUlRRESEr4eHFqipqVXGm3u05M/F2nvwdLOW6d39ej02dZC++63B6tDe6uER4mrENMAVFRVp4cKFWrdunc6fP1/ndZvNpmnTpunFF19UVFSUDh8+rOjoaOfriYmJysvL8+aQ0Qwl//5cs364WR/vOtGi5Yfc3FXLF41Wclyk4ZGhIRwPBCi73a758+crISFB2dnZ9Yb0yvtWrlyp5ORklZaWaufOnS6vJycne2O4cMM7mw4qaepfWhxSSSrad0ojvvWOVrzzicGRoTGcMw1AZ8+e1aRJk7Rhw4Y6r0VGRio6Olp2u12ffPKJqqurJUmHDh3Sww8/rHvuucfl/UlJSV4ZM5rnnU0H9eATG1VT0/oDxpoah2Y8t1kOhzRjYn8Do0NjOMwPMHa7XePHj3cJqdVq1aOPPqo5c+ZoyJAhzvnnz5/Xa6+9pieffFKVlZWSpN69e+vgwYPO93z88ccaPny4934BNGjPgc+VOOUvqr5QY3S9ISEW/WPFVzVi6A1G1wtXxDTAPPHEE1q8eLFzunv37lq9erVGjBjR4DIfffSRRo8eLbvd7jLfZrOpsrJSoaGhHhsvmqemplajZqzV/xW2/NC+MQP7dlb+qvsV2oGDUU/hnGkAycnJ0UsvveSc7tKli9avX99oSCVp5MiRmj17dp35cXFxhNRPvJL9L4+FVJL2HDitXy7f5bH1g5gGDLvdrvT0dF19ILF06VLFx8c3a/lp06bVmcfFJ//gcDi05PXdHt/Oy2+U6NKlWo9vp60ipgEiKytLxcXFzukxY8booYceavbyw4YNqzOvoYtPNTU1Kioq0vLly5Wenq6RI0cqPDxcFotFFotFM2fOdHv8aNgH245qz4HmfY60NY6Vn9eanE89vp22ihMoAeLqw3tJWrBggVvLd+7cWVarVTU1X1zcaGjPdMqUKVq9erXbY0TLrNt8yGvb+mvuYU25t5/XtteWENMAUFJSoh07djin+/Xrp9TUVLfWcfHiRZeQWq3WevdWJbm8T5IiIiLUrVs3ffKJbz6zWF1drf379/tk297w4baDTb/JkK15h7V7t+dPKfiDmJgYr14TIKYBYO3atS7T48ePl8VicWsdJ0+edJkeOHCgwsPD633v8OHDNWjQICUnJys5OVl9+/bV8uXLNWvWLPcGbsj+/ftdPvIVdOJ+I1mv88qm9h06pyHxCZLD3uR7A11RUZEGDx7ste0R0wCwZcsWl+nRo0e7vY59+/a5TDd28emZZ55xe/1oBS+FVJJkCZFCOkg1wR9Tb+MCVAAoKSlxmY6Li3N7HVu3bnWZ5kp+W+beUQ2ah5gGgCNHjrhMR0VFub2OdevWuUxzG6kfqany3rYctVJttfe214YQUz/ncDhUVeX6x+buSfVdu3YpNzfXOR0SEqKEhAQTw4MJ1Ye9t60Lx9rE+VJf4Jypn7NYLAoNDXU+sES6fDGpY8eOzV7H888/7zIdGxur66+/3tgYPS0mJkZFRUW+HobH/HzFp1r5Xv0PfTbtq3cP1X+vCd5/y6vFxMR4dXvENAB069bN5VC/oKBAvXv3btay2dnZWrNmjcu8QDtfGhoa6tWrst720MTOXovptPFDNHiwdyPTVnCYHwCuPSTPyspq1nLbt29XWlpanfmBFtNgd/etPXRzr04e305U11BNSu3j8e20VcQ0ANx1110u06tWrVJOTk6jy2zcuFHjxo1zPnrvalx88i8hIRZ95xuDPL6duV8fyFeZeBAxDQAzZsxw+YB9bW2tJkyYoIyMDJdzqZKUl5en2bNnKzU1VeXl5erbt69sti/O5lgsFiUmJnpt7GieR6fGKWlQN4+tPya6o36QNtRj6wcxDQgRERFatGiRy7xz585p3rx5ioiI0LBhw5SUlKTIyEglJydr2bJlcjgcio6OVmZmpstzTPv3769OnTx/SAn3tGsXouU/Ga12NvN/khaL9Mcfj9Z14e2MrxtfIKYB4vHHH9fcuXPrzD9//rwKCwuVn5+viooK5/zU1FRt2bJFp06dcnk/h/j+Kz42Qit/ervcvFO4Sb995jalJN9kdqWog5gGCIvFooyMDGVmZqpnz54Nvi8+Pl4rVqzQhg0b1KtXrzrfPMrFJ/82dWw/vf7fY2Sztb6oFov08rO3ad5Uz5+PBR+NCjizZs3SjBkztG3bNhUUFKiiokI2m03R0dEaPnx4nc/W5efnu0yzZ+r/vjEuRgP6dNbMH+aqcO/Jpheox829OumPP07RqCT2SL2FmAagkJAQjRgxosmvK5FUZ8+UmAaGxEGR2va/E/TSyt1a+r/FOlx2rlnL3RARqm9/fZD+M22owsP48/Ym/rWDWFlZmY4ePeqcjomJUZcuXXw3ILilfTurnk4bqiemD9HazaVat/mQtuaXqaSep/Lff0cvTR3bTw/e3Uft2/HxJ18gpkGspYf4Bw4c0LJly1zmFRYWuqz3ueeec3n9zjvv1J133tnCkaIxNluI7r+zj+6/s4927zulIQ/W/RaERem3aPDNXX0wOlxBTINYSy8+HTx4UC+88EKDrxcWFrrEVbr8tdHEFG0ZV/OD2LV7plzJBzyHPdMg1tKLT2PGjHH5SmkATWPPNEidPn1aBw4ccE736dNHERERPhwRENyIaZAqKChw2bvkI1GAZ3GYH6Ruv/12DtUBL2LPFAAMIKYAYAAxBQADiCkAGEBMAcAAYgoABhBTADCAmAKAAcQUAAwgpgBgADEFAAOIKQAYQEwBwABiCgAGEFMAMICYAoABxBQADCCmAGAAMQUAA4gpABhATAHAAGIKAAYQUwAwgJgCgAHEFAAMIKYAYAAxBQADiCkAGEBMAcAAYgoABhBTADCAmAKAAcQUAAwgpgBgADEFAAOIKQAYQEwBwABiCgAGEFMAMICYAoABxBQADCCmAGAAMQUAA4gpABhATAHAAGIKAAYQUwAwgJgCgAHEFAAMIKYAYAAxBQADiCkAGEBMAcAAYgoABhBTADCAmAKAAcQUAAwgpgBgADEFAAOIKQAYQEwBwABiCgAGEFMAMICYAoABxBQADCCmAGAAMQUAA4gpABhATAHAAGIKAAYQUwAwgJgCAaKmplafV16o9zV7Ta2XR4NrWRwOh8PXgwDgqqamVnsOnNaO4nJtLy7XjuJyFew5qapqe73vb98uRAkDuik5rptuGRyl5LhuiuvXVe3asb/kLcQU8BMOh0P/KDiul98o0V9yDjYYzubq0N6q+1J66tGpg3TXiO6yWCyGRor6EFPAx85WXdKf1+3Xy2+UqHDvSY9sI7Z3Z82bMlAzJ/ZXl04dPLKNto6YAj5yruqSFmbkK+PNPao8d8kr2wwLtWrWxFi9kJ5MVA0jpoAPfLj9qNJ+lKt/H670yfa73xCuV58fpftSon2y/WBETAEvOld1SQuWbNfS14t9PRRJ0syJ/bX4+yPYSzWAmAJesjW/TNOf/dBne6MN6X5DuDIXpujer/T09VACGjEFvODtTQc15akcXbzkn58HDQmxKHNhimZM7O/roQQsPoQGeNjKdz/RpCc2+m1IJam21qGZP9ysJX/e7euhBCz2TAEPemP9vzXtPzcpkP7KXn72Ns2bOsjXwwg4xBTwkL/mHtLE+X+T3R5Yf2IWi7Typ7frW+Nv9vVQAgoxBTxgX+kZDZu8ptV3MfmKzWbR/702Qclxkb4eSsAgpoBhtbUO3T5rnbbklxlfd4f2VsVEd6wzf/+hSl24WGN0W0Nu7qrtWRPVob3V6HqDlc3XAwCCzdLXd3skpJIUE91Ru9dMqjN/8ANvqXj/50a3VbTvlBa9UqCffCfZ6HqDFVfzAYM+OXhaC5Zs9/UwjPnZsp3aUVzu62EEBGIKGFJb61Daj3J1vtrs4bYv1dQ4NPO5zcZPIQQjYgoYkv23Ax47vPelon2ntGz1v3w9DL/HOdMgUVVVpdzcXJWWlurEiRMKCwtTv379lJKSooiICF8Pr014+Y0SXw/BY15+o0Tzpg7imaiNIKYBrqioSAsXLtS6det0/vz5Oq/bbDZNmzZNL774oqKionT48GFFR3/xpKDExETl5eV5c8hBafe+U/pw+zFfD8Njdu//XLk7jmn0LV/y9VD8Fof5Acput2v+/PlKSEhQdnZ2vSG98r6VK1cqOTlZpaWl2rlzp8vryclcqTXhd6uCd6/0ipfbwO/YGuyZBqCzZ89q0qRJ2rBhQ53XIiMjFR0dLbvdrk8++UTV1dWSpEOHDunhhx/WPffc4/L+pKQkr4w5mFWeu6gV7+7z9TA87q2/f6pj5VW6KTLc10PxS+yZBhi73V4npFarVenp6dq1a5dOnDihvLw8FRYW6uTJk3rllVfUsePlD3lv3rxZr776qsv62DNtvaz3/u21J+X7kt3uUOaavb4eht8ipgHm6aefdglp9+7dtXXrVi1ZskRDhgxxeW9YWJgeeeQRvf/++7LZLh+EHDx40Pm6zWbT0KFDvTPwIPZBEJ8rvdaHO9rO7+ouYhpAcnJy9NJLLzmnu3TpovXr12vEiBGNLjdy5EjNnj27zvy4uDiFhoaaHmab05Y+1L6juFzcgV4/Yhog7Ha70tPTXf5DXrp0qeLj45u1/LRp0+rM4xC/9SrPXdTeg6d9PQyvqfj8gkqPnvX1MPwSMQ0QWVlZKi7+4nuDxowZo4ceeqjZyw8bNqzOvIYuPp05c0bZ2dl67LHHdOuttyoyMlLt2rVT586dNXjwYM2ePVsffvih+79EEMovqQioZ5WasKO4wtdD8EtczQ8QVx/eS9KCBQvcWr5z586yWq2qqfnitsD69kx//etf65lnntGFCxfqvHbmzBkVFxeruLhYy5Yt09e+9jUtX768Td8UsKOk7YVlR3G5Hry7j6+H4XeIaQAoKSnRjh07nNP9+vVTamqqW+u4ePGiS0itVmu9e6t79+51hrRXr15KTU1VUlKSIiMjdfbsWW3evFlZWVm6cOGC3n33XaWmpmrLli0KCwtr4W8X2Ar3nvT1ELxuZxv8nZuDmAaAtWvXukyPHz/e7dv6Tp50/QMYOHCgwsPrfl7QYrHo3nvv1dNPP6077rijznbS0tL01FNPKTU1VceOHVNeXp5+8Ytf6Pnnn3drPO6orq7W/v37Pbb+1jj0mXsXnxp6HmlzNbRsa9Ypufc81GPHP9fu3f7/XVExMTFevcDKw6EDwMSJE/XOO+84p998801NnjzZrXVs2bJFKSkpzunp06frT3/6U533nTp1Sl27dm1yfe+++64mTJggSerdu7c+/fRTt8bjjt27d9f52Jff6DNf6ti8i4CSFBfTpd7nkfqaW89DrTog7X/Bo+MxoaioSIMHD/ba9rgAFQBKSlxv44uLi3N7HVu3bnWZbuhKfnNCKkn33XefrrvuOkmXP7t65swZt8cUFCxt8OAupJ2vR+CXiGkAOHLkiMt0VFSU2+tYt26dy3RrbyO1Wq0upwkaejZA0HO0wed8tsXfuRmIqZ9zOByqqqpymefueaBdu3YpNzfXOR0SEqKEhIRWjausrEwnTpyQJIWHh7co8EHBEfy3kdZR2wZ/52Ygpn7OYrHUiee1F5Oacu3FodjYWF1//fWtGldGRobz57FjxyokpI3+p1R70dcj8L62+Ds3Qxs84RN4unXr5nKoX1BQoN69ezdr2ezsbK1Zs8ZlXmvvfNq7d69+/vOfS7oce3c/8+qumJgYFRUVeXQbLfVy9mG9/NbhZr9//6FKDX7grRZvLya6o95Zck+d+RO+u0H7D1W2eL3uLPvNSXfomVlpLd6Wt8TExHh1e8Q0ACQkJLjENCsrSxMnTmxyue3btystre5/9K2JaWVlpR544AHnOdLvfOc7uuWWW1q8vuYIDQ316lVZd9xX0dGtmF64WGP8W0SlyzH0xHrrc0/KAA0e3N8r2wokbfTYLLDcddddLtOrVq1STk5Oo8ts3LhR48aNU2Vl3T2Oll58unTpkqZMmeK8rfXLX/6yfvnLX7ZoXcEiOS7S10PwuuS4br4egl8ipgFgxowZLlfOa2trNWHCBGVkZDgf/nxFXl6eZs+erdTUVJWXl6tv377Ox+9Jlw/LExMT3R5DTU2NvvnNb2r9+vWSpCFDhui9995Thw4dWvhbBYebIsPV/Ya287DksFCrBvbt4uth+CViGgAiIiK0aNEil3nnzp3TvHnzFBERoWHDhjlv+UxOTtayZcvkcDgUHR2tzMxM2e1253L9+/dXp06d3Np+bW2tpk+fruzsbEnSoEGD9Pe//13durGHIknJg9rO3mnCgG6y2chGffhXCRCPP/645s6dW2f++fPnVVhYqPz8fFVUfPHQjSv3zJ86dcrl/e4e4tfW1mrmzJl6/fXXJV3+JMDGjRt14403tuC3CE4j4tvOx8La0u/qLmIaICwWizIyMpSZmamePXs2+L74+HitWLFCGzZsUK9evep886g7F59qa2uVlpamlStXSrp8dTQnJ0df+hLfUHm1h74ao5CQtvEVyDMmcOGpIVzNDzCzZs3SjBkztG3bNhUUFKiiokI2m03R0dEaPnx4nY+D5Ofnu0w3d8/U4XDokUcecd6/37dvX23atEk9evQw84sEkd7dO+qro6P1zgelvh6KR92WcIMSBnJqpyHENACFhIRoxIgRTX5diaQ6e6bNianD4dDcuXOVmZkp6fKDTDZt2qTo6OiWDbgNeOwbg4I+po9Ndf+ZEG0Jh/lBrKysTEePHnVOx8TEqEuXLk0u99hjjzm/xTQ6OlqbNm1q9k0CbdXdt/bQzb3cu7AXSKK6hmpSah9fD8OvsWcaxFpyiP/ss8/qd7/7naTLDzOZP3++du7cqZ07dza63KhRoxQZ2Xaual8rJMSieVMG6slf/dPXQ/GI2Q8OUIf2Vl8Pw68R0yDWkotPVz+qr6amRk899VSztrVp0yaNGTPGrfEFm9kPDtDilbt1uOycr4diVNdO7fXdb3GI3xQO84PYtXumfBupZ3W6vr1e+dFXfD0M45b8YKRuimw7Nya0FHumQawlF58++OADD42mbRiXEq20B2KVuWavr4dixIQxvfSt8d59YEigYs80SJ0+fVoHDhxwTvfp06dNf4uoN/36qRHqeeN1vh5Gq3Xt1F4ZP/yK29831lYR0yBVUFCgq7/eq7VP1kfzde4YHIf7S34wUl+K4vC+ufhCPcBDnlu6XS+82vinINzV0LebuvPtos0x9+sD9bvnbmOv1A3EFPAQh8Oh9J99pN9mlTT9Zj/yjbH99NrPbpfVyoGrO/jXAjzEYrFoyQ9GKu2BWF8Ppdnuv7O3VrxASFuCfzHAg0JCLHr1+VF6/CH//KaAq03/2s1681d3ql07stASHOYDXuBwOPSLPxbquf/ZIbvdv/7kLBbpP9OG6oX0W9rM0688gZgCXlSwp0Izf7hZO//l3jfMekr/3p30xx+P1lcSeT5taxFTwMsuXqrRT1/dqRf+UOCzvVSLRfrew0P0k8eSFR7GvTsmEFPARwr2VCjtR7nK31PR9JsNGti3s/7wXynsjRpGTAEfcjgc+nD7Mb38RonW5HzqsT1Vi0X66uheenTqIN1zWw/OjXoAMQX8xGfHz+kPq/fq99l79NnxKiPrjOwaqtkPxmru5IHq06Puh/1hDjEF/MylS7X6Z9EJ7Sgu147icm0vLteeA6dVW9v0n2ps785KjuumWwZHKjkuUrcOvYHnkHoJMQUCwLmqSyr410kdOX5O56trVH2xRg6HQ2EdbArtYNVNkWFKHNhNna5v7+uhtlnEFAAM4FYHADCAmAKAAcQUAAwgpgBgADEFAAOIKQAYQEwBwABiCgAGEFMAMICYAoABxBQADCCmAGAAMQUAA4gpABhATAHAAGIKAAYQUwAwgJgCgAHEFAAMIKYAYAAxBQADiCkAGEBMAcAAYgoABhBTADCAmAKAAcQUAAwgpgBgADEFAAOIKQAYQEwBwABiCgAGEFMAMICYAoABxBQADCCmAGAAMQUAA4gpABhATAHAAGIKAAYQUwAwgJgCgAHEFAAMIKYAYAAxBQADiCkAGEBMAcAAYgoABhBTADCAmAKAAcQUAAwgpgBgADEFAAOIKQAYQEwBwABiCgAGEFMAMICYAoABxBQADCCmAGAAMQUAA/4f7zGVflSl7HEAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 195.73x272.907 with 1 Axes>"
      ]
     },
     "metadata": {
      "image/png": {
       "height": 229,
       "width": 169
      }
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "text/latex": [
       "$$\n",
       "\n",
       "\\begin{bmatrix}\n",
       "1 & 0 & 0 & 0 & 0 & 0 & 0 & 0  \\\\\n",
       " 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0  \\\\\n",
       " 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0  \\\\\n",
       " 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1  \\\\\n",
       " 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0  \\\\\n",
       " 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0  \\\\\n",
       " 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0  \\\\\n",
       " 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0  \\\\\n",
       " \\end{bmatrix}\n",
       "$$"
      ],
      "text/plain": [
       "<IPython.core.display.Latex object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "circuit = QuantumCircuit(3)  \n",
    "circuit.ccx(0,1,2)\n",
    "show(circuit)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "## Universalité\n",
    "\n",
    "La famille de portes $\\left\\{H, CX, R_\\theta\\right\\}_{\\theta\\in[0,2\\pi[}$ est <b class=\"cool\">universelle</b> pour les transformations unitaires.\n",
    "\n",
    "La famille de portes $\\left\\{H, CX, R_{\\frac{\\Pi}4}\\right\\}$ est <b class=\"cool\">approximativement universelle</b> pour les transformations unitaires : elle les réalise avec une erreur $\\varepsilon$ souhaitée.\n",
    "\n",
    "Le <b class=\"cool\">théorème de Solovay-Kitaev</b> nous assure que toutes les familles de portes approximativement universelles le sont <b class=\"cool\">efficacement</b>."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "## Compatibilité\n",
    "\n",
    "Toute fonction classique $f : \\{0,1\\}^n \\rightarrow \\{0,1\\}^m$ est simulée par un circuit quantique de taille similaire.\n",
    "\n",
    "$$\n",
    "\\begin{array}{ccccc}\n",
    "U_f &:& \\mathbb{C}^{\\{0,1\\}^{m+n}} & \\rightarrow & \\mathbb{C}^{\\{0,1\\}^{m+n}}\\\\\n",
    "    & & \\left|x,y\\right> & \\mapsto & \\left|x, f(x)\\oplus y \\right>\n",
    "\\end{array}\n",
    "$$\n",
    "\n",
    "C'est un résultat de <b class=\"cool\">calcul réversible</b>."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "## Algorithme quantique\n",
    "\n",
    "La plupart des <b class=\"cool\">algorithmes quantiques</b> fonctionnent sur le principe suivant :\n",
    "1. créer une superposition pertinente de qubits à partir de $\\left|00\\cdots 0\\right>$ ;\n",
    "2. effectuer <b class=\"cool\">en parallèle</b> un calcul classique sur la superposition des entrées ;\n",
    "3. effectuer une <b class=\"cool\">transformation quantique pertinente</b> ;\n",
    "4. observer le résultat grâce à des <b class=\"cool\">mesures</b>."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 872.774x367.889 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "circ = QuantumCircuit(3,3)\n",
    "for i in range(2): circ.h(i)\n",
    "circ.barrier()\n",
    "circ.cx(0,2)\n",
    "circ.t(1)\n",
    "circ.ccx(1,2,0)\n",
    "circ.barrier()\n",
    "for i in range(3): circ.measure(i,i)\n",
    "draw_circ(circ)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "res = sim.run(circ, shots=1024).result()\n",
    "display(plot_histogram(res.get_counts()))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 2179.62x367.889 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "res=transpile(circ,basis_gates=['h','cx', 'rz'], coupling_map = [[0,1],[1,2],[2,0]], optimization_level=1)\n",
    "draw_circ(res)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "# Pour aller plus loin\n",
    "\n",
    "P. Arrighi et S. Perdrix. _Modèles de calcul quantique_. dans __[Informatique Mathématique, une photographie en 2016](https://www.gdr-ifm.fr/wp-content/uploads/2020/04/recueilEJCIM16-1.pdf)__. CNRS Éditions.\n",
    "\n",
    "M.A. Nielsen et I.L. Chuang. _Quantum Computation and Quantum Information_. Cambridge Univ. Press, 2000.\n",
    "\n",
    "__[IBM Q Experience.](https://quantum-computing.ibm.com)__\n",
    "\n",
    "__[Introduction to Coding Quantum Algorithms: A Tutorial Series Using Qiskit](https://arxiv.org/abs/1903.04359)__"
   ]
  }
 ],
 "metadata": {
  "celltoolbar": "Slideshow",
  "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.11"
  },
  "rise": {
   "autolaunch": true,
   "chalkboard": {
    "readOnly": false
   },
   "enable_chalkboard": true,
   "reveal_shortcuts": {
    "chalkboard": {
     "colorNext": "s",
     "colorPrev": "q",
     "toggleChalkboard": "a",
     "toggleNotesCanvas": "z"
    }
   },
   "scroll": true,
   "theme": "white"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
