{ "metadata": { "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5-final" }, "orig_nbformat": 2, "kernelspec": { "name": "python3", "display_name": "Python 3", "language": "python" } }, "nbformat": 4, "nbformat_minor": 2, "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "#IMPORTS\n", "import qiskit \n", "import matplotlib as mpl\n", "from random import randint" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "n = 4 #the size of the Query and hidden bit string\n", "circuit = qiskit.QuantumCircuit(n+1,n) #initialise circuit, with extra Auxiliary qubit" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "
" ], "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n 2021-02-02T00:34:32.093240\r\n image/svg+xml\r\n \r\n \r\n Matplotlib v3.3.3, https://matplotlib.org/\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", "image/png": "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\n" }, "metadata": {}, "execution_count": 3 } ], "source": [ "for i in range(n): \n", " circuit.h(i) #place Query into superposition of all possible states\n", "circuit.draw('mpl')" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "def Oracle(circuit,n):\n", " hidden_bits = randint(0,(2**n)-1) #random number generator\n", " hidden_bits = format(hidden_bits,'0'+str(n)+'b') #convert number into n-bit binary string\n", "\n", " circuit.barrier()\n", " for i in range(n):\n", " if hidden_bits[i] == '0': #if hidden bit is 1, do not apply CX Gate\n", " pass\n", " elif hidden_bits[i] == '1':\n", " circuit.cx(i,n) #if hidden bit is 1, CX on corresponding Query and Auxiliary\n", " circuit.barrier()\n", " return circuit, hidden_bits #return circuit for use, hidden_bits to verify answer" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "
" ], "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n 2021-02-02T00:34:34.101942\r\n image/svg+xml\r\n \r\n \r\n Matplotlib v3.3.3, https://matplotlib.org/\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", "image/png": "iVBORw0KGgoAAAANSUhEUgAAAKoAAAExCAYAAADsoDm2AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/Il7ecAAAACXBIWXMAAAsTAAALEwEAmpwYAAAOV0lEQVR4nO3df0zU9x3H8df37rRAMNWGaqvC8aNiFAWVzhCbwcmcVeNSUkUlG7F4ibRgF3Fby2JpoljT+mMza4zONcUlriwpUusadNEIB4ri8MfRalL8gXU4Z6kSK7WicLc/HFdA9L5H7+77eXuvR8If/eLx/WiffD/3K/fW3G63G0SKMxm9ACI9GCqJwFBJBIZKIjBUEoGhkggMlURgqCQCQyURGCqJwFBJBIZKIjBUEoGhkggMlURgqCQCQyURGCqJwFBJBIZKIjBUEoGhkggMlURgqCQCQyURGCqJwFBJBIvRC1BdZSNwpd2Yc48ZAbz8vDHnVg1D9eJKO3Dha6NXQdz6SQSGSiIwVBKBoZIIDJVEYKgkAkMlERgqiaB0qC6XC5s2bcK4ceMQFhaGlJQUOBwOjB8/HsuXLzd6eQOqWGfD8T3rdB8nfZR+Zcput6OyshIlJSVITU1FfX09cnJy0NbWhlWrVhm9PAoiZUMtLy/Hzp07UVNTg4yMDADAzJkzcfLkSVRWVmLatGkGr5CCSdmtf/369ZgzZ44n0h7PPfcchgwZguTkZADApUuXkJGRgcTEREyePBl1dXVGLJcCTMkramtrK7744gsUFRU98L3Lly8jKSkJTzzxBAAgPz8fixcvRkFBAerr65GdnY2WlhYMHTr0kefQNE3XWhasrsbYCTaf1n/803dwompTn2P37nQgZtIsn36Ow1GDX8+e6dNtpNE7OFLZUAHgmWee6XP8+++/h8PhwNy5cwEA33zzDQ4fPoy9e/cCAGbMmIHRo0ejuroaL774YnAX3cv0l1ZjetZbfY5VrLMZs5jHhJJbf1RUFACgubm5z/ENGzbg6tWrSE1NBXD/6jpq1CjP1RUA4uLi8NVXX3k9h9vt1vWVkWHz31/MRxkZNt3rlPqll5JX1Pj4eCQnJ2P9+vV46qmnMGbMGFRUVKCqqgoAPKFS6FDyimoymfDxxx8jKSkJr732GvLy8hAVFYXCwkKYzWbPA6mYmBhcu3YNnZ2dntu2tLTAarUatXQKEE3SGPTc3Fw4nU40NTV5js2ePRtZWVmeB1MLFy7EpUuXvD6Y0uv9A8a9wz9hJPD6z405t2qU3PofprGxEWlpaX2Obd++Ha+88gq2bNmCoUOHory83G+RkjrEhNrR0YHm5mYUFBT0OR4fH4/a2lqDVkXBIibUyMhIdHd3G70MMoiSD6aI+mOoJAJDJREYKonAUEkEhkoiMFQSQczzqEYZMyI0z60aUa/1U+ji1k8iMFQSgaGSCAyVRGCoJAJDJREYKonAUEkEhkoiMFQSgaGSCAyVRGCoJALf5ucFh/aqgaF6waG9auDWTyIwVBKBoZIIDJVEYKgkAkMlERgqicBQSQSlQ5U4tJcCQ+lQ7XY7SktLkZ+fj3379mHRokXIycnBxYsXlR3hw+nSgaHsS6gc2ku9KXtF1Tu09+2330ZiYiJMJhMqKiqMWCoFgZKh9gztzc7OfuB7/Yf2zpkzB/v370d6enqwl0lBpOTWr3doL3B/UO9gcLq0GkRPl+49tHfevHme4/2H9qqK06X9T8lQgzG0V+9vspEjJjMybKhYx08FBRS9j6p3aC+FDiWvqACQmJiI6urqPsdyc3MxceJEhIeHG7QqMoqoT5yeMGEC0tLSUFZW5jlWUlKCsrIytLW1ITIyEuHh4XA4HEhISPDLOTldWg1Kbv0D6Rna2/+J/tLSUrS2tqKzsxPXr19Ha2ur3yIldSi79ffHob2hTcwVlUIbQyURGCqJwFBJBIZKIjBUEoGhkghinkc1Cof2qkHUS6gUurj1kwgMlURgqCQCQyURGCqJwFBJBIZKIjBUEoGhkggMlURgqCQCQyURGCqJwLf5ecGhvWpgqF5waK8auPWTCAyVRGCoJAJDJREYKonAUEkEhkoiMFQSQelQObSXeigdKof2Ug9lX0Ll0F7qTdkrqp6hve3t7Zg/fz4SExORkpKC2bNn4/z58watmAJJyVD1Du3VNA0rV65Ec3MznE4n5s+fj7y8PANWTIGm5Navd2jv8OHDMWvWD4NwZ8yYgQ0bNug6B4f2qiEkh/Zu2bIFWVlZwVjiI3For/8pGepghvauWbMG58+fx6FDh3Sdg0N7ZVHyPqqvQ3vXrVuHzz77DPv370dERIRBq6ZAUvKKCugf2rtmzRpUVVXhwIEDGD58eJBXScEi6hOn+w/tPXPmDCZNmoSEhARERkZ6/tzp06f9dk4O7VWDslfU/nqG9hYUFHiOJSUl6b6vSbKJCZVDe0Obkg+miPpjqCQCQyURGCqJwFBJBIZKIjBUEoGhkghinvA3CqdLq0HUa/0Uurj1kwgMlURgqCQCQyURGCqJwFBJBIZKIjBUEoGhkggMlURgqCQCQyURGCqJwLf5ecHp0mpgqF5wurQauPWTCAyVRGCoJAJDJREYKonAUEkEhkoiMFQSQelQJU6X5tDewFD6lSm73Y7KykqUlJQgNTUV9fX1yMnJQVtbG1atWmX08iiIlA2V06WpN2W3fj3TpQEgKysLycnJmDp1KqZPn46DBw8asVwKMCWvqD3TpYuKih74Xu/p0gCwc+dOzyC0U6dOwWaz4caNGzCbzcFcch/+GtpLP1A2VMD7dGkAfab13bx5E5qm6Zo9Fcjp0v4a2svp0j9QcuvvPV26t4dNly4sLER8fDwWLFiA3bt3w2JR8vePfgQl/4/6Ol1669atAACHw4GioiLU1tb2GTk5EE6XlkXJK6qv06V7ZGRkwGQy4ciRI0FeMQWaqA/yzc3NhdPpRFNTE4D781GvX78Oq9UK4P6DqczMTDidTsTExPjlnBzaqwYlt/6HaWxsRFpamue/v/vuOyxevBgdHR2wWCwICwvDrl27/BYpqUNMqANNlx41ahSOHTtm4KooWMSEyunSoU3JB1NE/TFUEoGhkggMlURgqCQCQyURGCqJIOZ5VKNwaK8aRL3WT6GLWz+JwFBJBIZKIjBUEoGhkggMlURgqCQCQyURGCqJwFBJBIZKIjBUEoGhkgh8m58Xv/nyLJy3bhly7pRhw7B5/MRB3daoYcOBGjTMUL1w3rqF2vYbRi/DZ4/bsGFu/SQCQyURGCqJwFBJBIZKIjBUEoGhkggMlURQOlSJQ3spMJQO1W63o7S0FPn5+di3bx8WLVqEnJwcXLx48YERPqpw37uHe6+uQPef/9LnePcne3DvV0vh7ugwaGWPpvpUbGVfQpU6tFcbMgSW4t+h6/WV0Kb/BKapU+BuaYHrw7/C/M5aaF7mX9HAlL2i6h3a22PHjh3QNA0VFRXBXOaAtFgrTMuWonvTH+G+cQNd726E6aVfwJQ82eiliaVkqD1De7Ozsx/4Xv+hvQBw7tw5lJWV9RntYzRT1kvQYqLRlV8ImM0wLc01ekmiKRsq8PChvb23/a6uLixbtgzbtm3rE683mqbp+qqpqRnU30HTNGjJk4GbN2H6WSa0IUN8/hk1NTW619n/y+Hwfd3HP30H25YP7/P1n+bDPv0Mh8O3Neul5H3U3kN7582b5zk+0NDe0tJSzJ07F1OmTAn2Mh/J3dIC10d/h2lxNly7PoLppy9AGznS6GU9kr+mYgeCkqHqHdrb0NCAQ4cODeqqp/fTNmc1Nvj8flT33Xv375e+nAVz3lK429vRvfEPML+3HppJ/yZms9lwcJCfCmrUaMxADRpWcuvXO7S3uroaFy5cQEJCAmJjY3Hs2DEUFBRg8+bNhq7f9WEZNIsFptxfAgDMBa/C/d9rcO3+xNB1SabkFRUAEhMTUV1d3edYbm4uJk6ciPDwcABAcXExiouLPd+32WxYsWIFFi5cGNS19uY6dRquqv2wbP0TNMv9f14tIgLmN3+L7t+/BdPz06DFxRm2PqmUDXUg/Yf2qsg0dQpMeysfPD4pCaZ/qHtFXfhWjU/Hg01MqAMN7e1vsI/QSX1iQuXQ3tCm5IMpov4YKonAUEkEhkoiMFQSgaGSCAyVRGCoJIKYJ/yNkjJsmMhzGzWZOlDn5XRpEoFbP4nAUEkEhkoiMFQSgaGSCAyVRGCoJAJDJREYKonAUEkEhkoiMFQSgaGSCAyVRGCoXhQWFsJi4dt2jcZQH6Gurg4dig6HCDV84/RDdHZ2IjMzE3v27MGzzz6Lrq4uo5cU0nhFfYi1a9fCbrfj6aefNnopBIY6oKamJjQ0NCAvL8/opdD/MdQBHDlyBGfPnkVcXBxiY2PR3d2N2NhYfPvtt0YvLWTxPqoOFouF91ENxisqicArqo/cbrdP85HIP3hF9ZGjwYm/7TmALn76dVCJD/Xzzz/HggULEBUVhbCwMIwbNw6rV68OyLk6O++itsGJu/e6YDGbA3IOGpjo1wZPnDiB9PR0REdHY+PGjbBarWhpaUF9fX1Azld/8gxu3+nErBfUHMH+OBN9H9Vms+Hs2bM4d+4cnnzySZ9uW/zejgCtinzx7pvLdf05sVv/7du3UVdXh5ycHJ8jJXnEbv3t7e1wuVwYO3bsoG6v9zcZuH/f9L3t5YgePRJ52XMHdT76ccSGOmLECJhMJly5cmVQtx/M1v/lxX/zLoOfPfZbf0REBNLT01FeXs6XNkOA6AdTPY/6rVYr3njjDVitVly+fBl1dXX44IMP/HKO6qOn8M/af6EwNwvRo0f65WeS78Ru/QCQmpqKo0ePoqSkBEVFRbhz5w6io6OxZMkSv/z8zs67qDvehPHx0YzUYKKvqIF29evr2LXnAJbMz2SoBmOoXrhcLphMYu/KPzYYKonASwWJwFBJBIZKIjBUEoGhkggMlURgqCQCQyURGCqJwFBJBIZKIjBUEoGhkggMlURgqCQCQyURGCqJwFBJBIZKIjBUEoGhkggMlURgqCQCQyURGCqJwFBJBIZKIvwPTDXciuyYK7YAAAAASUVORK5CYII=\n" }, "metadata": {}, "execution_count": 5 } ], "source": [ "circuit.x(n) #prepare Auxiliary for Phase Kickback\n", "circuit.h(n) #by placing into the |-> state\n", "circuit.draw('mpl')" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "
" ], "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n 2021-02-02T00:34:37.027538\r\n image/svg+xml\r\n \r\n \r\n Matplotlib v3.3.3, https://matplotlib.org/\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", "image/png": "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\n" }, "metadata": {}, "execution_count": 6 } ], "source": [ "circuit, hidden_bits = Oracle(circuit,n) #apply Oracle\n", "circuit.draw('mpl')" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "
" ], "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n 2021-02-02T00:34:39.906059\r\n image/svg+xml\r\n \r\n \r\n Matplotlib v3.3.3, https://matplotlib.org/\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", "image/png": "iVBORw0KGgoAAAANSUhEUgAAAhYAAAExCAYAAAAgBuvAAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/Il7ecAAAACXBIWXMAAAsTAAALEwEAmpwYAAAwLUlEQVR4nO3df1xUdb4/8NfMgEDh+iM0EkRFAWEUUBRJjRkSf+amm2DpxhbaxUXcQutb7Por07hlJt6tdDPzR9l1V5DUvan3oSuMpmuJyqaIoWgRhkrCppSg/Lh/8GVylGEGPMznzDmv5+Oxjx0PZ868eOeBl+ecOaNpaGhoABEREZEEtKIDEBERkXKwWBAREZFkWCyIiIhIMiwWREREJBkWCyIiIpIMiwURERFJhsWCiIiIJMNiQURERJJhsSAiIiLJsFgQERGRZFgsiIiISDIsFkRERCQZFgsiIiKSDIsFERERSYbFgoiIiCTDYkFERESSYbEgIiIiybBYEBERkWRYLIiIiEgyLBZEREQkGRfRAYjscebMGZvrvPvuu5gzZ06L6/Tv31+qSIrFWRPRveARC1KM9957T3QE1eCsicgaFgsiIiKSDIsFERERSYbFghQjKytLdATV4KyJyBoWCyIiIpIMiwUpRlxcnOgIqsFZE5E1fLupDdl5wMVKMa/t0wV4YoiY1yaSI1H7473si6mpqcjPz5c0j73Cw8OxatUqIa9N6sViYcPFSqD4iugURAQ45/6Yn58Pk8kkOgaRw/BUCClGSkqK6AiqwVkTkTUsFqQYtu4ESdLhrInIGhYLUozo6GjREVSDsyYia1gsSDHKy8tFR1ANzpqIrGGxICIiIsmwWJBihISEiI6gGpw1EVnDt5uSYmzbtk10BNXgrNtP//79ERUVhfDwcHTu3Bm1tbUoLi7GsWPH8Pnnn+Pnn3++6zlpaWkIDAzEc889h/r6egGpiX7BYkGKsWjRIrz22muiY6gCZy29J598Ei+88AIefvhhq+v8+9//xsaNG/HWW2/h+++/B9BYKv7zP/8T9fX1WL9+PT7//HNHRSZqlqxPhdTX12PFihUICAiAu7s7wsLCYDKZEBQUhKSkJNHxmpW1zIgvty+zezlJJzMzU3QE1XCWWTvD/ujr64s9e/bgr3/9Kx5++GH8+9//xtatW5GWlobExET8/ve/x3/9138hLy8PnTt3RmpqKgoKCvDss89alIoZM2awVJAsyPqIxcyZM5GdnY2FCxciIiIChw8fxrRp01BeXo558+aJjkdEdE/0ej327dsHb29vXL16FX/605/w8ccf48aNG82uHx4ejtdeew2//vWvsWHDBgAwl4pNmzY5MjqRVbItFlu2bMHGjRuRm5sLg8EAAIiJicHx48eRnZ2NwYMHC05IRNR2Pj4+5lLxj3/8A9OnT8eVKy3frzw/Px+PP/44tm7divj4eADA9u3bWSpIVmR7KiQ9PR3jxo0zl4om/fr1g6urK0JDQwEA33zzDQwGAwIDAzFw4EAcPHhQRFySAX4eg+Nw1vfugw8+gLe3N3JycvDYY4/ZLBVN0tLSEB8fj/r6etTX12PSpEkYMoSfVkjyIcsjFqWlpTh16hTmzp1719dKSkqg1+vh5uYGAJg1axaefPJJzJ49G4cPH0Z8fDwuXLiADh06tPgaGo3GrixT5ufAN9jYqvxf7ngdx3atsFh2q7oKfgNiW7UdkykXz4+JadVzlKq5vwt3Ki4uRt++fVtcJyMjQ6pIiiXnWYvaH6XeF6dMmYLx48ejoqIC06dPR01NjV3Pu/OaigEDBuCll17C+++/j4iIiGZym+z+WUdkS0NDg13rybZYAIC3t7fF8hs3bsBkMmH8+PEAgB9++AGff/45du7cCQAYPnw4evTogZycHIwdO9axoW8TOWk+IicvsFiWtcwoJoyK7Ny5065finTvnGnWctwfn3/+eQCN7665dOmSXc+5s1Rs2rQJ7u7uePrppzF48GCMGDEChw4das/YRHaRZbHw8vICABQVFWHChAnm5cuXL0dZWZm5mZeUlODBBx80H70AgD59+uDbb7+1+Rr2Nq939or7mGaDwYisZfblVLozZ87YXCcjI8Pmu4VWrlwpVSTFkvOsRe2P97IvGo1Gi1NH/v7+iI6OxrVr1+y+NqK5UgEA1dXVWLduHRYsWIDExMS7ioXBYEBubm6bchO1lSyLhb+/P0JDQ5Geno6uXbvCx8cHWVlZ2LVrFwA0e8iPiMgZDBs2DACwf/9+VFVV2VzfWqlosnPnTixYsMC8XSLRZHnxplarRWZmJvR6PZKTk5GYmAgvLy+kpKRAp9OZL9z08/PD5cuXLc5PXrhwAb169RIVnQRasmSJ6AiqwVm3XVhYGADg+PHjNte1VSoA4KuvvkJtbS2Cg4NtXltG5AiyPGIBAIGBgcjJybFYlpCQgJCQEHh4eABoPGUyYsQIfPjhh+aLNy9evIiYGHEXPMYtyG3VcpLO1KlTRUdQDWeZtRz3x/Pnz+Ozzz7DiRMnWlxvxowZNksFANTU1GDHjh1wcXGBq6srbt682R6xiewm22LRnLy8PERFRVks+8tf/oJnn30Wq1atQocOHbBlyxa2dpUKDg5GYWGh6BiqwFm33dq1a7F27Vqb623fvh2zZ8/GO++8Y/NajLi4OKniEd0zpykWVVVVKCoqwuzZsy2W+/v748CBA4JSERG1j4qKCgwbNgx1dXWioxC1itMUC09PT+5gRKQq/JlHzkiWF28StYXRaBQdQTU4ayKyhsWCFGPNmjWiI6gGZ01E1rBYkGIkJyeLjqAanDURWcNiQYrBOww6DmdNRNawWBAREZFkWCyIiIhIMiwWpBi8YZPjcNZEZI3T3MdCFJ8u6nxtZ7R161anudW0sxM1a1H7xL28bnh4eKufc76kDADg7/eQxWNHvDbRvdI02Pv54UQC2fNR3vbcZrp///5SRVIszlq8tDcbb/n9xitJFo+JnAFPhRAREZFkWCyIiIhIMiwWpBirV68WHUE1OGsisobFghRDr9eLjqAanDURWcNiQYphMBhER1ANzpqIrGGxICIiIsmwWJBiDB06VHQE1eCsicgaFgtSjKNHj4qOoBqcNRFZw2JBREREkmGxICIiIsmwWJBiZGVliY6gGpw1EVnDYkFERESSYbEgxYiLixMdQTU4ayKyhh+bbkN2HnCxUsxr+3QBnhgi5rWJ5EjU/qi2fTE1NRX5+flCXjs8PByrVq0S8tokDRYLGy5WAsVXRKcgIoD7o6Pk5+fDZDKJjkFOiqdCSDFSUlJER1ANzpqIrGGxIMWYM2eO6AiqwVkTkTUsFqQY0dHRoiOoBmdNRNawWJBilJeXi46gGpw1EVnDYkFERESSYbEgxQgJCREdQTU4ayKyhsWCFGPbtm2iI6gGZ03Nuf/++xEcHIwBAwagR48eNtd/6qmnoNXy15DS8L8oKcaiRYtER1ANzpqaBAQEYOXKlTh9+jSuXbuG06dP4+TJk7h48SIuX76M7du3Y+LEiXcViFWrVmHLli1YvXq1oOTUXmRdLOrr67FixQoEBATA3d0dYWFhMJlMCAoKQlJSkuh4JDOZmZmiI6gGZ01du3bFxx9/jKKiIsydOxfBwcGora3F119/jVOnTqGiogLdu3fHpEmT8Pe//x2FhYUYOXIkgMZS8cILL6CmpgY7d+4U/J2Q1GRdLGbOnImlS5di1qxZ2L17N6ZOnYpp06bh/PnziIiIEB2vWVnLjPhy+zK7lxNR++H+2D6ioqJQUFCAp59+Gjdu3MC6deswYsQIdOzYEf3798fAgQPxwAMPwN/fHy+99BLOnz+PwMBAmEwmHDlyxFwqnnjiCezatUv0t0MSk+0tvbds2YKNGzciNzcXBoMBABATE4Pjx48jOzsbgwcPFpyQiEh9IiMjsXfvXnh6euLAgQOYMWMGiouLm133woULePvtt/HnP/8ZCxYswIIFCzBs2DDU1tayVCiYbI9YpKenY9y4ceZS0aRfv35wdXVFaGgogMZzvYGBgdBqtcjKyhIRlWSCn23gOJy1OnXu3BmffvopPD098cknn+DRRx+1Wipud+vWLXTq1AlarRYNDQ1wcXGBp6enAxKTCLIsFqWlpTh16hTi4+Pv+lpJSQn0ej3c3NwAAOPGjcOePXt4J0BCQUGB6AiqwVmrU0ZGBnr06IFDhw7hmWeeQV1dnV3Pu/2ainfffRcA8N5776Fbt27tGZcEkeWpkNLSUgCAt7e3xfIbN27AZDJh/Pjx5mXDhw9v02toNBq71psyPwe+wcZWbfvLHa/j2K4VFstuVVfBb0Bsq7ZjMuXi+TExrXqOUs2dO9fmOhkZGTbXy8jIkCqSYsl51qL2R0fvi6+88T6Axp9Ttz8WqU+fPvjd736HmpoaJCYmtqlUNJ3+CA4ORmxsLGbPno0lS5ZYrG8ymYR/r9S8hoYGu9aTZbHw8vICABQVFWHChAnm5cuXL0dZWZlsL9xsEjlpPiInL7BYlrXMKCYMkcpxf5TGrFmzoNVq8be//Q1nz5616znNlQoAeP311xEbG4ukpCS8/vrrqK2tbc/o5GCyLBb+/v4IDQ1Feno6unbtCh8fH2RlZZn/UkpRLOxtXu/sBYqv3PPLtYnBYETWMvtyKt2ZM2dsrpORkWHzbcgrV66UKpJiyXnWovZHR++LaW+uBdD4c+r2x45iNBrvuo5m7NixAIANGzbYtQ1rpQIAcnNzceHCBfTp0wcDBgxAfn6++WsGgwG5ubn3/D2QOLK8xkKr1SIzMxN6vR7JyclITEyEl5cXUlJSoNPpzBduEt3uzkOq1H44a3Vxd3eHXq9HXV0djh49anP9lkpFkyNHjgCQ5h+KJC+yPGIBAIGBgcjJybFYlpCQgJCQEHh4eAhKRXI2depU0RFUg7NWF29vb7i6uuLbb7/FTz/91OK69pQKAPj6668BAH5+fpLnJbFkWyyak5eXh6ioKItlCxcuxIYNG1BeXo6TJ08iNTUVJpMJffv2FZIxbkFuq5aTdIKDg1FYWCg6hio4y6y5P0qjtLQUAQEBNj/Xw9PTE9HR0Xbd/GrNmjX429/+hsuXL0sdlwRzmmJRVVWFoqIizJ4922L50qVLsXTpUkGpiIiUr7a2FufOnbO5XlVVFWJjYxEaGmrzOokrV67gyhVBF7BRu3KaYuHp6Wn325uIiEiMiooKXnypcrK8eJOoLYxGo+gIqsFZE5E1LBakGGvWrBEdQTU4ayKyhsWCFCM5OVl0BNXgrInIGhYLUgye13UczpqIrGGxICIiIsmwWBAREZFkWCxIMZzhhk1KwVkTkTVOcx8LUXy6qPO1ndHWrVt5q2kHETVrUfuE2vbF8PDwNj3vfEkZAMDf7yGLx454bZIPFgsbnhgiOgHZa/HixSwWDiJq1twfHWPVqlVtel7TJ7G+8UqSxWNSF54KISIiIsmwWBAREZFkWCxIMVavXi06gmpw1kRkDYsFKYZerxcdQTU4ayKyhsWCFMNgMIiOoBqcNRFZw2JBREREkmGxIMUYOnSo6AiqwVkTkTUsFqQYR48eFR1BNThrIrKGxYKIiIgkw2JBREREkmGxIMXIysoSHUE1OGsisobFgoiIiCTDYkGKERcXJzqCanDWRGQNP93Uhuw84GKlmNf26cJPcyS6naj9kfuic0hNTUV+fr7DXzc8PLzNnwirRCwWNlysBIqviE5BRAD3R2pZfn4+TCaT6Biqx1MhpBgpKSmiI6gGZ01E1rBYkGLMmTNHdATV4KyJyBoWC1KM6Oho0RFUg7MmImtYLEgxysvLRUdQDc6aiKxhsSAiIiLJsFiQYoSEhIiOoBqcNRFZw2JBirFt2zbREVSDsya10ul00Gr5q7MlvI8FKcaiRYvw2muviY6hCpw1OTsXFxfExsYiMjISoaGh6NixI27evImioiIcO3YMu3fvRmWl5d3YdDodPv74Y1RXV+O5555DfX29oPTyJuvaVV9fjxUrViAgIADu7u4ICwuDyWRCUFAQkpKSRMcjmcnMzBQdodUaGkQnaBtnnDURAHh4eGDhwoX49ttvsXv3bixZsgRTpkzBmDFjMHHiRMybNw+ffPIJLl68iPXr16N3794AfikV06ZNw5QpU9CvXz+x34iMyfqIxcyZM5GdnY2FCxciIiIChw8fxrRp01BeXo558+aJjtesrGVG+A2IReTkBXYtJ/W5/CNg+ho4/g1QfQvo5AFE9QMeCQQ83UWnUxbuj3S7qKgobNq0CYGBgQCA06dP47PPPsOJEydw9epVeHh4YODAgYiOjsbo0aORmJiI+Ph4vPLKKxg5ciSmTZuGa9euYezYsSgqKhL83ciXbIvFli1bsHHjRuTm5sJgMAAAYmJicPz4cWRnZ2Pw4MGCExK1XuH3wIcmoK4eaDpY8eMN4H9PAkfOAX8YDXh1FBqRSJEmTpyIrKwsuLm54dSpU3j++eeRk5Nz13o7duwAAPTt2xfp6emYOnUq3nvvPQAwl4ojR444NLuzke2pkPT0dIwbN85cKpr069cPrq6uCA0NRWVlJSZOnIjAwECEhYVhzJgxOHfunKDEJJrcPyOgqhpYf8CyVNzuWjXw4QHnOD0i91kT3W7YsGHmUrF69WpEREQ0WypuV1xcjOnTp+Pw4cPmZZs3b2apsIMsi0VpaSlOnTqF+Pj4u75WUlICvV4PNzc3aDQapKamoqioCP/6178wceJEJCYmCkhMclBQUCA6QouOFAO36povFUBjoSj7N3DeCe49JfdZEzVxd3fHpk2b4ObmhjVr1iAlJQU3b960+bymayqGDx+On3/+GQDwH//xHwgNDW3vyE5PlqdCSktLAQDe3t4Wy2/cuAGTyYTx48cDADp37ozY2Fjz14cPH47ly5fb9Roajcau9abMz4FvsNGudZt8ueN1HNu1wmLZreoq+A2ItfKM5plMuXh+TEyrnqNUc+fOtblORkaGzfUyMjKkitRqU+bnwCcoGpoW3qrW0FCP3/3hDRzeOt+BySzJedai9kdH74uvvPE+gMafU7c/ljs55k5NTUVQUBAKCgrs+rsNWF6o2XT64+mnn0ZKSgreeeedu46km0wm4d+nIzTYeThVlsXCy8sLAFBUVIQJEyaYly9fvhxlZWWIiIho9nmrVq3C5MmTHRGxRZGT5jd7sRipm87FrcVSAQBoaIBW18ExgVSC+6N66XQ6JCcnA2gszDU1NXY9585SceTIEZw6dQoJCQmIjo7GwIEDcfLkyfaO77RkWSz8/f0RGhqK9PR0dO3aFT4+PsjKysKuXbsAoNlisWTJEpw7dw779++36zXsbV7v7AWKr9ifXUoGgxFZy5zghLsDnDlzxuY6GRkZNt+GvHLlSqkitdpfjwBfFFs/FQIAGq0OK5a+hGH//ZLDct1JzrMWtT86el9Me3MtgMafU7c/ljvRuY1Go8X1P9HR0fDz80NRURH27dtn8/nWSgUAVFVVYdOmTfjDH/6AhIQEvPzyy+bnGQwG5ObmSv79OCtZXmOh1WqRmZkJvV6P5ORkJCYmwsvLCykpKdDpdHed41q2bBn+53/+B3v27MF9990nKDWJtmTJEtERWjQioOVSAQBuLsCgXg6Jc0/kPmsiAIiMjAQA7Nmzx2bBaalUNNm9ezcAYOjQoe0TWCFkecQCAAIDA++6ajchIQEhISHw8PAwL1uyZAl27dqFvXv3onPnzg5OSXIydepU0RFa1POBxntVHGzm7e8aNJaO+Eigg2z3yl/IfdZEADBw4EAAwIkTJ1pcz55Scft2eAFny5zgR9gv8vLyEBUVZf5zQUEBXn31VfTt2xdGo9G8PD8/3/Hh/r+4BbmtWk7SCQ4ORmFhoegYLfrNEKDTfcD+08DPt12Y/oAn8PhgILSnuGyt4QyzBrg/qt2BAwdQXV2Nr776qsX1Fi9ebLNUAMAPP/yADRs2oKqqqj3iKobTFIuqqioUFRVh9uzZ5mV6vd4pzjsSNdFqgFg9YOwPvPTXxmXPjwb6dANUcFE5kUOtXbsWa9eutbneqlWrEB0djbS0tBbvU1FbW4sZM2ZIGVGRnKZYeHp6oq6uTnQMIkm46H557N9dXA4iAioqKiyOetO9keXFm0RtwR8MjsNZE5E1LBakGGvWrBEdQTU4ayKyhsWCFKPpRjjU/jhrIrKGxYIUgzeocRzOmoisYbEgIiIiybBYEBERkWRYLEgxnOGGTUrBWRORNSwWpBhbt24VHUE1OGsissZpbpAlik8Xdb62M1q8eDE/w8JBRM1a1D7BfdE5hIeHt/o550vKAAD+fg9ZPG7v11UyFgsbnhgiOgERNeH+SC1ZtWpVq5/T9PHub7ySZPGY2o6nQoiIiEgyLBakGKtXrxYdQTU4ayKyhsWCFEOv14uOoBqcNRFZw2JBimEwGERHUA3OmoisYbEgIiIiybBYEBERkWRYLEgxhg4dKjqCanDWRGQNiwUpxtGjR0VHUA3OmoisYbEgIiIiybBYEBERkWRYLEgxsrKyREdQDc6aiKxhsSAiIiLJsFiQYsTFxYmOoBqcNRFZw083tSE7D7hYKea1fbrw0xyJbidqf+S+SO0lNTUV+fn5Ql47PDy8TZ8IawuLhQ0XK4HiK6JTEBHA/ZGUJz8/HyaTSXQMSfFUCClGSkqK6AiqwVkTkTUsFqQYc+bMER1BNThrIrKGxYIUIzo6WnQE1eCsicgaFgtSjPLyctERVIOzJiJrWCyIiIhIMiwWpBghISGiI6gGZ01E1rBYkGJs27ZNdATV4KyJxNFoNAgKCsKoUaMQGxuLsLAwuLq6Wl3f3d0dqamp0God8yufxYIUY9GiRaIjqAZnTeRYGo0GY8eOxfbt2/Hjjz/izJkz2LdvH/bu3Yv8/Hxcv34dJpMJv/3tb9GhQwfz89zd3bFz505kZGRg+fLlDskq62JRX1+PFStWICAgAO7u7ggLC4PJZEJQUBCSkpJEx2tW1jIjvty+zO7lJJ3MzEzREVTDWWbN/ZGUICQkBF988QX27NmDSZMmoWPHjvjuu++wf/9+7Nu3D0VFRXBzc0N0dDQ2b96MoqIijBo1ylwqRo8ejUuXLuHDDz90SF5Z33lz5syZyM7OxsKFCxEREYHDhw9j2rRpKC8vx7x580THIyIialcJCQn44IMP4ObmhosXL+Ldd9/FRx99hO+//95ivU6dOiE+Ph4vvPACBgwYgH379uHChQvo06cPLl26hEcffRSFhYUOySzbYrFlyxZs3LgRubm5MBgMAICYmBgcP34c2dnZGDx4sOCERERE7efpp5/GRx99BAD44IMP8OKLL+L69evNrvvjjz9i3bp12LhxI/74xz/i1VdfRZ8+ffDTTz85tFQAMj4Vkp6ejnHjxplLRZN+/frB1dUVoaGhAIDJkycjNDQUgwYNQmRkJPbt2yciLsmA0u63L2ecNVH76t+/Pz744AMAwMsvv4ykpCSrpeJ2Li4ueOSRR6DVatHQ0ID7778fgYGB7R3XMoNDX81OpaWlOHXqFObOnXvX10pKSqDX6+Hm5gYA2LhxIzp37gwAOHHiBIxGIyoqKqDT6RwZ2cKXO17HsV0rLJbdqq6C34BYQYnUoaCgAN27dxcdQxWcadbcH8kZrV+/Hu7u7vjwww/x1ltv2fWcO6+pWL9+Pf70pz/hL3/5C3Jzc/Hjjz+2c+pGsi0WAODt7W2x/MaNGzCZTBg/frx5WVOpABoPBWk0GjQ0NNh8DY1GY1eWKfNz4BtstGvdJpGT5iNy8gKLZVnLWrcNADCZcvH8mJhWP0+JmiuZd8rIyLC5XkZGhlSR7tkLmxv/ntr7d9FR5DxrUfujo/fFV954H0Dj343bH8udM+aWY+aYmBg8/PDDuHTpkt3XE95ZKh599FGcOXMGBoMBI0aMQGJi4l0fkW4ymVr1vdrzuxWQ6akQLy8vAEBRUZHF8uXLl6OsrAwREREWy1NSUuDv748pU6Zg27ZtcHGRZV8iIiKyKTk5GQCwevVqXLt2zeb6zZWKwsJCNDQ0mN9i2rRNR5Dlb2B/f3+EhoYiPT0dXbt2hY+PD7KysrBr1y4AuKtYvPfeewAa29fcuXNx4MABeHp6tvga9javd/YCxVfa8E1IwGAwImuZfTmV7syZMzbXycjIsPk25JUrV0oV6Z6lftL4//b+XXQUOc9a1P7o6H0x7c21ABr/btz+WO6cMbfozEaj8a5rlkaNGgUA5gs3W2KtVDT57LPPUFlZicDAQPj6+prPCACAwWBAbm6uNN/IbWR5xEKr1SIzMxN6vR7JyclITEyEl5cXUlJSoNPpzBdu3slgMECr1eLQoUMOTkxysGTJEtERVIOzJmofvXv3RteuXXHlyhV8++23La5rq1QAQF1dHfLy8gDc/Y/y9iLLIxYAEBgYiJycHItlCQkJCAkJgYeHBwCgqqoKV69eRa9evQA0XrxZXFyM4OBgh+dtErcgt1XLSTpTp04VHUE1nGXW3B/J2fTo0QMAUFxc3OJ69pSKJufOncPo0aPN225vsi0WzcnLy0NUVJT5zz/99BOefPJJVFVVwcXFBe7u7ti8eTP8/PwEpiRRgoODHfpebTXjrInaxz//+U907NjR5jsbPTw84OXlZdfNr15++WWkpaXhp59+kjpus5ymWFRVVaGoqAizZ882L3vwwQdx5MgRgamIiIik09DQgKqqKpvrVVZWIjY2Fl5eXne90eFO9mxPSk5TLDw9PVFXVyc6BhERkSxUVFSgoqJCdIy7yPLiTaK2MBqNoiOoBmdNRNawWJBirFmzRnQE1eCsicgaFgtSDEfeAEbtOGsisobFghSjPW70Qs3jrInIGhYLIiIikgyLBREREUmGxYIUgzdschzOmoiscZr7WIji00Wdr+2Mtm7d6jS3mnZ2omYtap/gvkjtJTw8vE3PO19SBgDw93vI4rEjXtsWFgsbnhgiOgHZa/HixSwWDiJq1twfSWlWrVrVpuc1fRLrG68kWTyWA54KISIiIsmwWBAREZFkWCxIMVavXi06gmpw1kRkDYsFKYZerxcdQTU4ayKyhsWCFMNgMIiOoBqcNRFZw2JBREREkmGxIMUYOnSo6AiqwVkTkTUsFqQYR48eFR1BNThrIrKGxYKIiIgkw2JBREREkmGxIMXIysoSHUE1OGsisobFgoiIiCTDYkGKERcXJzqCanDWRGQNP93Uhhe/Po1/Xb8u5LXDOnbE20EhbXpudh5wsVLiQHbw6cJPoCQiUjMWCxv+df06DlRWiI7RahcrgeIrolMQEZHa8FQIKUZKSoroCKrBWRORNSwWpBhz5swRHUE1OGsisobFghQjOjpadAS7VVX/8rjkKlBTKy5LWzjTrInIsXiNBSlGeXm56AgtunINOHQW+KoEqPz5l+Ur9wAaAN6dgCF9gGF9AU93YTHtIvdZE5E4LBZE7az6FrDzBHD4rPV1GgCU/Qj8PR/YcxJ4LAyIDgK0PKZIRE6GxYIUIySkbW/NbU+XrwFrc4CrVfY/51YdsP04UHARmGkA3F3bL19byXHWRCQP/PcQKca2bdtER7BQfh14d2/rSsXtzl4G1uwHam5Jm0sKcps1EckHiwUpxqJFi0RHMKurBzYdBK5XW19n1W8b/9eSb38AdpyQNpsU5DRrIpIXWReL+vp6rFixAgEBAXB3d0dYWBhMJhOCgoKQlJQkOh7JTGZmpugIZvtPA6US3fn08Fng7CVptiUVOc2aiORF1sVi5syZWLp0KWbNmoXdu3dj6tSpmDZtGs6fP4+IiAjR8ZrVcOsWbv1+Dure/8Bied2n23Hr6WfQUNXG4+LtLGuZEV9uX2b3crLuZi2QUyjtNvcVSLs9IqL2ItuLN7ds2YKNGzciNzcXBoMBABATE4Pjx48jOzsbgwcPFpyweRpXV7ik/T/U/iEVmsih0A4KR8OFC6hfvwm611+DxtNTdERqZ/klwM83pd3m15eA8mtAt19Ju10iIqnJ9ohFeno6xo0bZy4VTfr16wdXV1eEhoZaLF+7di00Gg2ysrIcGbNZmt69oJ3xDOpWZKChogK1b7wF7aRfQxs6UHQ0RTOZTKIjAACK2um0RdHl9tluW8hl1kQkP7IsFqWlpTh16hTi4+Pv+lpJSQn0ej3c3NzMy86ePYsNGzYgKirKkTFbpJ08CRq/nqidlQLodNA+kyA6kuIVFMjjfEFpO31m3XdX22e7bSGXWROR/MjyVEhpaSkAwNvb22L5jRs3YDKZMH78ePOy2tpazJgxA2vWrEFqaqrdr6HRaOxaT/fWG9CGhdpesZnta0IHouHYcWifmgqNa+tvRpCbmwvN0LaVpSnzc+AbbGzVc77c8TqO7VphsexWdRX8BsTavQ2TKRfPj4lp1evaY+7cuTbXycjIsLleRkaGVJGs+v37lXC7v7P5z7be+WHt66mfWP55y7bPMO3hifcWzg7ONGuleuWN9wE0/hy5/bHcOWNuZ8wMiMnd0NBg13qyLBZeXl4AgKKiIkyYMMG8fPny5SgrK7O4cHPp0qUYP348wsPDHR2zRQ0XLqD+v/8K7ZPxqN/839A+MgKa7t1Fx2pR5KT5iJy8wGJZ1jKjmDDOrJ12bo1GlgcYiYgsyLJY+Pv7IzQ0FOnp6ejatSt8fHyQlZWFXbt2AYC5WHzxxRfYv38/cnNzW/0a9jav2LwvcKCydce2G27earyu4onJ0CU+g4bKStS9tRK6N9OhacU9mo1GI/bZmfNO7+wFiq+06an3xGAwImtZ2zK35MyZMzbXycjIsPk25JUrV0oVyaplO4Efrv/y5zuPPDRpOlJh7et3ips8HtuXSz/bOznTrJUq7c21ABp/Tt3+WO6cMbczZgbknVuW/wTSarXIzMyEXq9HcnIyEhMT4eXlhZSUFOh0OvOFmzk5OSguLkbfvn3Ru3dvHDlyBLNnz8bbb78tNH/9+g3QuLhAm9D4m0M3+/douHQZ9ds+FZpL6ZYsWSI6AgDAt0v7bLdn1/bZblvIZdZEJD+yPGIBAIGBgcjJybFYlpCQgJCQEHh4eAAA0tLSkJaWZv660WjEnDlzEBcX59Cst6s/kY/6XXvg8t6foXFpHK/mvvuge+Ul1P1xAbRDBkPTp4+wfEo2depU0REAAH27N77lVGr+MjqTJpdZE5H8yLZYNCcvL09W7/xojnZQOLQ7s+9ePkAP7d/le8QibkFuq5bLUXBwMAoLJb4zVRtE9G78NNNbddJts2dXeR2xkMusiUh+ZHkqpDlVVVUoKipq8cZYubm5Qo9WEAHAfW5AVD9ptxkTLO32iIjai9McsfD09ERdnYT/BCRqR4+FAadKgcqf7n1beh9gUK973w4RkSM4TbEgssVoNIqOYObuCvxuBLD6H9ZPidjzbpAHPIEnh7XbO1jbTE6zJiJ5cZpTIUS2rFmzRnQEC326AUlGwK2N9b1bRyBlFPArD0ljSUJusyYi+WCxIMVITk4WHeEuAd7Ay48BAQ+27nnDA4AXxwNdZfqZdXKcNRHJA0+FkGK05UZpjvCAJ5A8Cij8HjhUBBSWAc3dx8ZVBwzuDYwMlNc7QJoj11kTkXgsFkQOoNU0XoSp9wFqbgEXK4Er14DaeqCDC9CjM/BQZ0DHY4hE5ORYLIgczM218WZXcrrhFRGRVPjvI1IM3rDJcThrIrKGxYIUY+vWraIjqAZnTUTW8FSIDWEdOzrla/u00wdhyfV1AWDx4sX8DAsH4ayJyBoWCxveDgoRHaFNnhgiOgEREakRT4UQERGRZFgsSDFWr14tOoJqcNZEZA2LBSmGXq8XHUE1OGsisobFghTDYDCIjqAanDURWcNiQURERJJhsSAiIiLJ8O2m5BT69+9vc53FixfbtR61jLMmonvBIxakGK+++qroCKrBWRORNSwWREREJBkWCyIiIpIMiwURERFJhsWCiIiIJMNiQURERJJhsSAiIiLJsFjYkJKSAhcX3u6DiJxHbm4u9Ho9+vXrh+eeew51dXWiI9n0wgsvwNfX16l+3n733XcYNWoUgoODodfr8cc//lF0JLuMGTMG4eHhGDhwIOLi4nDt2jVJt89i0YKDBw+iqqpKdAwiIrvV19fjueeeQ2ZmJs6dO4dr165h8+bNomPZFB8fj7y8PNExWsXFxQVvvvkmCgsLceLECXz++efYsWOH6Fg2ZWZmIj8/HydPnoSvry9Wrlwp6fZZLKyoqalBWloaVqxYIToKEZHdjh49ih49eiAkJAQAMHPmTGzbtk1wKttGjhwJb29v0TFa5aGHHsKQIUMAAB06dMCgQYNQUlIiOJVtnTp1AtBYQqurq6HRaCTdPouFFa+99hpmzpyJbt26iY5CRGS30tJS9OzZ0/xnPz8/fPfddwITqUNFRQW2b9+O0aNHi45il9/85jfo3r07vv76a7z44ouSblvT0NDQIOkWFeCrr77CvHnzsHfvXmg0Gri4uKC2tlZ0LCJSqNq6Omz+dC9+vP4TAKDsylUAwEPdH7B43GTMI0MQ3K9Xs9vKysrCp59+ik8++QQAUFhYiOnTp+PEiROS5z5RcBYHvvzK/OeWcnfr2glPPT4KWhv/Om7vn7fVNTexadv/orrmps3MAPCbMSPh5/Ngi9u8efMmxo0bh8cee0zyX9JNPj96EsdOFZn/3FLuXj4PYtLoETaPRNy8eRMzZ87EqFGj8Oyzz0qWlUcsmnHo0CGcPn0affr0Qe/evVFXV4fevXtLfoELEREAuOh0GDFkAMquXDX/kgBw1+OyK1dxv4c7gvr6Wd1Wz549LY5QlJSUwNfXt11yh/bvC51WazP35fIKPBIZarNUOIK7WwdEhvW3a9YPenWxWSrq6uowffp0hIeHt1upAIChYf1Rc/OmzdxXK3/EyKED7Tq90aFDBzz11FP49NNPJc3KYtGM5ORkfP/99/jmm2/wzTffQKfT4ZtvvsGvfvUr0dGISKECevtieMSAFtdxd+uAuAmGFn9BDxkyBKWlpTh9+jQA4MMPP8QTTzwhadYmOp0WUyfGwMVF1+J6jw4fjJ4PdW+XDG0RHtIPA4P6tLhOp473Y9LoETa3lZSUhI4dO+Ltt9+WKl6z3Dq4YupjMTYLw2OPPgyvLp2sfv369esoKysD0HiNxc6dO6HX6yXNymJBRCQT4w2R6Na1s9WvTx4zEp1/5dniNnQ6HdatW4e4uDj07dsXnp6eSEhIkDjpL7o/0BnjjcOsft33oW6IeXiQze3MmjULvr6+qKurg6+vL1JSUqSMaUGj0WDy2EfQ0fM+q+vETzDCw92txe0cOnQI69evR15eHgYNGoTw8HD8+c9/ljquWW9fbxiGhVn9ev++fogM69/iNq5fv47HH38coaGhCA0NRW1tLRYsWCBpTl5j0UoNDQ2SX0FLRNSktKwcqzdvR3295Y/m0P7+mPb4KFn+/KlvaMCGrbtw9puLFstdXXR4/tkp6PZAZzHBbPi6uAQbsvbctXzEkAH49ajhAhLZVltXh/c+2m5xCgQA7vNww9wZ8S2WJUfhEYtWMn3xL3yyfS9qneCGM0TkfHwf6oZRwyMslnX0vA+Tx4yUZakAAK1Gg7gJRri7dbBYPiEmSralAgCC+vohalCIxbLuD3TGuOhIQYlsc9Hp8NTEGLjoLE8/PTE2WhalAlBAsTh58iSmTJkCLy8vuLu7IyAgAPPnz2+X16qpuYkDX/wLN2/V3vUflYhIKsaHwy2uSYgfb8B9Hu4CE9nWqeP9+M2YkeY/B/bxveuXthxNMA4zX5Og1Wrw5MRH4eoq77t/PtitK8Yahpr/PHhAIAbYuGbEkZy6WBw7dgxRUVEoKCjAW2+9hV27diEtLQ2XLl1ql9c7fLwAP1fXIHZEhO2ViYjaSKfV4smJMXB1dUHUoBAE+ve0/SQZCAvph7DgvvBwd0PceINsj7DcrkMHV0x9zAiNRoPYERHw8fYSHckuI4YMhL9fD3T+lScej5XXaRunvsbCaDTi9OnTOHv2rPlOYvZKe3NtO6UiIiJSnjdeSbJrPac9YvHzzz/j4MGDmDZtWqtLBREREbUPeZ9IakFlZSXq6+vbfOMXe5sX0HhtxZt/2YKePbojMX58m16PiIhIDZy2WHTp0gVarRYXL160vXIz2nIq5Ovz3/EUChERqZLiT4Xcd999iI6OxpYtW3irbSIiIplw6os3jx07hujoaPTq1Qsvv/wyevXqhZKSEhw8eBDr1q2T5DVy/nkC/3vgKFISJqNnD/nckpaIiEiOnPZUCABERETgn//8JxYuXIi5c+eiuroaPXv2xFNPPSXJ9mtqbuLgl18hyL8nSwUREZEdnPqIRXsru3IVm7fvxVMTH2WxICIisgOLhQ319fXQap32UhQiIiKHYrEgIiIiyfCf4kRERCQZFgsiIiKSDIsFERERSYbFgoiIiCTDYkFERESSYbEgIiIiybBYEBERkWRYLIiIiEgyLBZEREQkGRYLIiIikgyLBREREUmGxYKIiIgkw2JBREREkmGxICIiIsmwWBAREZFkWCyIiIhIMiwWREREJBkWCyIiIpIMiwURERFJhsWCiIiIJMNiQURERJJhsSAiIiLJsFgQERGRZFgsiIiISDIsFkRERCQZFgsiIiKSDIsFERERSeb/AHA/slY5fOQQAAAAAElFTkSuQmCC\n" }, "metadata": {}, "execution_count": 7 } ], "source": [ "for i in range(n):\n", " circuit.h(i) #take the Query out of superposition\n", " circuit.measure(i,i) #measure each Query qubit onto their classical bit\n", "circuit.draw('mpl')" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "simulator = qiskit.BasicAer.get_backend('qasm_simulator') #run simulation with single shot\n", "job = qiskit.execute(circuit, simulator, shots=1, memory=True) \n", "result = job.result()\n", "\n", "measurements = result.get_memory()[0] #e.g 01101\n", "measurements = measurements[::-1] #reverse string, to account for Qiskit's reversal" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "The Hidden Bit String was 0010.\nThe prediction was 0010.\nCorrect!\n" ] } ], "source": [ "# print final results & comparison\n", "print(f'The Hidden Bit String was {hidden_bits}.')\n", "print(f'The prediction was {measurements}.')\n", "if hidden_bits == measurements:\n", " print('Correct!')" ] } ] }