{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "0b64d4a9",
   "metadata": {
    "id": "0b64d4a9",
    "executionInfo": {
     "status": "ok",
     "timestamp": 1793727145572,
     "user_tz": -180,
     "elapsed": 5346,
     "user": {
      "displayName": "Joseph Volkan ÖZCAN",
      "userId": "11389530967736397480"
     }
    }
   },
   "outputs": [],
   "source": "!pip install qiskit qiskit-aer pylatexenc matplotlib --quiet"
  },
  {
   "cell_type": "markdown",
   "id": "e526ce70",
   "metadata": {
    "id": "e526ce70"
   },
   "source": "# Quantum Algorithm Zoo - Türkçe Eğitim Rehberi\n\n**Kaynak:** [quantumalgorithmzoo.org](https://quantumalgorithmzoo.org)  \n**Küratör:** Stephen Jordan  \n**Tarih:** Haziran 2026  \n\nBu notebook, Quantum Algorithm Zoo kataloğundaki **34 temel algoritmayı** içerir.  \nHer algoritma için:\n1. **Markdown hücresi** → Hız artışı, gerçek dünya senaryosu, nasıl çalıştığı\n2. **Python hücresi** → Çalışan Qiskit örneği (temel QuantumCircuit + çizim)\n\n> **Not:** Birçok algoritmanın tam implementasyonu binlerce satırdır. Burada eğitim amaçlı sadeleştirilmiş, çalıştırılabilir devreler sunulmuştur.\n"
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "c9aef0c4",
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "c9aef0c4",
    "outputId": "98e50a33-87e2-46ce-c30b-e6e29eb55166",
    "executionInfo": {
     "status": "ok",
     "timestamp": 1793729470901,
     "user_tz": -180,
     "elapsed": 498,
     "user": {
      "displayName": "Joseph Volkan ÖZCAN",
      "userId": "11389530967736397480"
     }
    }
   },
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "Qiskit ve bağımlılıklar yüklendi.\n"
     ]
    }
   ],
   "source": "# Ortak importlar - bir kez çalıştırın\nfrom qiskit import QuantumCircuit, QuantumRegister, ClassicalRegister, transpile\nfrom qiskit_aer import AerSimulator\nfrom qiskit.visualization import plot_histogram, circuit_drawer\nfrom IPython.display import display\nimport matplotlib.pyplot as plt\nimport numpy as np\nprint(\"Qiskit ve bağımlılıklar yüklendi.\")\n"
  },
  {
   "cell_type": "markdown",
   "id": "355885f9",
   "metadata": {
    "id": "355885f9"
   },
   "source": "## 01. Asal Çarpanlara Ayırma (Shor Algoritması)\n\n**Hız Artışı:** Süperpolinom (klasik $2^{O(n^{1/3})}$ → kuantum $O(n^3)$)\n\n**Gerçek Dünya Kullanım Senaryosu:**  \nRSA, DSA ve benzeri asimetrik şifreleme sistemlerini kırar. Kriptanaliz, post-kuantum kriptografi araştırmaları ve büyük tamsayı çarpanlarına ayırma.\n\n**Nasıl Çalışır?**  \n1. Rastgele $a$ seç, $a^x \\bmod N$ periyodunu bul (kuantum periyot bulma).  \n2. Kuantum Fourier Dönüşümü (QFT) ile periyodu çıkar.  \n3. Periyottan klasik olarak çarpanları hesapla.  \n"
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "3b918eb5",
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 396
    },
    "id": "3b918eb5",
    "outputId": "cdbc3bfa-a337-41a8-e493-57b58ba5e375",
    "executionInfo": {
     "status": "ok",
     "timestamp": 1793730103546,
     "user_tz": -180,
     "elapsed": 347,
     "user": {
      "displayName": "Joseph Volkan ÖZCAN",
      "userId": "11389530967736397480"
     }
    }
   },
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "Shor Algoritması - QFT çekirdeği (3 qubit):\n"
     ]
    },
    {
     "output_type": "display_data",
     "data": {
      "text/plain": [
       "<Figure size 872.774x284.278 with 1 Axes>"
      ],
      "image/png": "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\n"
     },
     "metadata": {}
    },
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "     ┌───┐                    ┌───┐          \n",
      "q_0: ┤ H ├─■────────■─────────┤ H ├────────X─\n",
      "     ├───┤ │P(π/2)  │         └───┘  ┌───┐ │ \n",
      "q_1: ┤ H ├─■────────┼────────■───────┤ H ├─┼─\n",
      "     ├───┤          │P(π/4)  │P(π/2) ├───┤ │ \n",
      "q_2: ┤ H ├──────────■────────■───────┤ H ├─X─\n",
      "     └───┘                           └───┘   \n"
     ]
    }
   ],
   "source": "# 01 - Shor (Sadeleştirilmiş QFT tabanlı periyot bulma örneği)\n# Tam Shor çok karmaşıktır; burada 3-qubit QFT devresi gösterilir.\n\nqc = QuantumCircuit(3, name=\"Shor-QFT-demo\")\nqc.h([0, 1, 2])          # Süperpozisyon\nqc.cp(np.pi/2, 1, 0)     # Kontrollü faz\nqc.cp(np.pi/4, 2, 0)\nqc.cp(np.pi/2, 2, 1)\nqc.h(0)\nqc.h(1)\nqc.h(2)\nqc.swap(0, 2)            # QFT bit sırası\n\nprint(\"Shor Algoritması - QFT çekirdeği (3 qubit):\")\ndisplay(qc.draw(\"mpl\", style=\"iqp\"))\nprint(qc)\n"
  },
  {
   "cell_type": "markdown",
   "id": "b1d132e6",
   "metadata": {
    "id": "b1d132e6"
   },
   "source": "## 02. Ayrık Logaritma (Discrete Logarithm)\n\n**Hız Artışı:** Süperpolinom\n\n**Gerçek Dünya Kullanım Senaryosu:**  \nDiffie-Hellman anahtar değişimi, ECDSA ve eliptik eğri kriptografisini kırar. Kriptanaliz ve sayı teorisi uygulamaları.\n\n**Nasıl Çalışır?**  \nShor'un periyot bulma tekniği $b = a^s \\bmod N$ denkleminde $s$'yi bulmak için uyarlanır. İki kayıt üzerinde QFT uygulanır.\n"
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "d0c05fad",
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 403
    },
    "id": "d0c05fad",
    "outputId": "cd3333f6-62e8-421a-f7bd-28eb97952d7e"
   },
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "Ayrık Logaritma - QFT tabanlı örnek devre:\n"
     ]
    },
    {
     "output_type": "display_data",
     "data": {
      "text/plain": [
       "<Figure size 1332.89x451.5 with 1 Axes>"
      ],
      "image/png": "iVBORw0KGgoAAAANSUhEUgAABBYAAAFvCAYAAAD+N0gEAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAWAFJREFUeJzt3XtclHXe//H3wMhJQBEPnFRQFNFAyrNprqYVqamhndzyzg5bm6u1/rS2w221bQdzqy013W07brfZZttqapapZZaJJmke8BCQCGQkHkBAGeb3BwsrMShzycwFM6/n4+FDZq7DfD6XIzPznu/1vSx2u90uAAAAAAAAA3zMLgAAAAAAADRfBAsAAAAAAMAwggUAAAAAAGAYwQIAAAAAADCMYAEAAAAAABhGsAAAAAAAAAwjWAAAAAAAAIYRLAAAAAAAAMMIFgAAAAAAgGEECwAAAAAAwDCCBQAAAAAAYBjBAgAAAAAAMIxgAQAAAAAAGEawAAAAAAAADCNYAAAAAAAAhhEsAAAAAAAAwwgWAAAAAACAYQQLAAAAAADAMIIFAAAAAABgGMECAAAAAAAwjGABAAAAAAAYRrAAAAAAAAAMI1gAAAAAAACGESwAAAAAAADDCBYAAAAAAIBhBAsAAAAAAMAwggUAAAAAAGAYwQIAAAAAADDManYBAAAAaL7S09OdWr+wsFDvv/++rr32WrVt27ZB2/Tr189IaW7jzDEw0r/U9I8BAO/GiAUAAAC4TWFhoV555RUVFhaaXYopvL1/AJ6JYAEAAAAAABhGsAAAAAAAAAwjWAAAAAAAAIYRLAAAAMBtQkJCdNVVVykkJMTsUkzh7f0D8EwWu91uN7sIAAAANE/OXhXCiKZ+RQSOAQBvx4gFAAAAuE15ebkOHTqk8vJys0sxhbf3D8AzESwAAADAbbKyspSWlqasrCyzSzGFt/cPwDNZzS4ATZPdbpeaW5Lu7y+LxWJ2FQAAD9HsXgt5HUQjs9vtstlsZpfhFF9fX/4fACYgWIBj5eWquG6K2VU4xfruG1JAgNllAAA8RTN7LeR1EI3NZrNp2bJlZpfhlLS0NFmtfMQB3I1TIQAAAAAAgGEECwAAAAAAwDDGCQEAAMBtevTooS1btphdhmm8vX8AnokRCwAAAAAAwDCCBQAAALhNTk6Opk6dqpycHLNLMYW39w/AMxEsAAAAwG1KS0v13XffqbS01OxSTOHt/QPwTAQLAAAAAADAMIIFAAAAAABgGMECAAAAAAAwjGABAAAAbhMZGanHHntMkZGRZpdiCm/vH4BnIlgAAACA27Rq1Uqpqalq1aqV2aWYwtv7vxCVlZXKzMw0uwwADljNLgAAAADeo6ioSGvXrtXIkSMVFhZmdjlu5239FxcXa8eOHfr++++VlZWlI0eO6MyZM/Lx8VFISIji4uIUFxenxMREderUqd79VFZWauHChfryyy81bdo0DR482I1dADgfggUAAAC4zY8//qhnn31WSUlJXvHB+pe8pf+DBw/qk08+0aZNm3TmzBmH6xw9elQ5OTnasGGDJKlbt2664oorNHDgQLVo0aJmvepQ4YsvvpAkLVq0SD179lTr1q1d3QaABuJUCDcoLCzU7NmzFR8fr4CAAHXs2FEzZsxQSUmJbrvtNlksFs2fP9/sMuHh9h+X3suS3jwgLcuWcorNrgjuVGmXvv5Jeud76a0D0oc/SMdOm10V3KnMJq3Nk94+WPVnXZ502mZ2VQA8TXFxsebPn6+HHnpIGzZsqBMqBAcHKzw8XGFhYfLxqf1RZP/+/VqwYIFmzZpVc8rDL0MFX19fTZ8+nVABaGIYseBiGRkZSk1NVUFBgVq2bKmePXsqLy9PL774og4ePKijR49KklJSUswt1EU+KzyiUV9t0NM9k/X7rj0cruO34l1d3T5SHwwY6ubqvMP6fOkfB6Vvj9ZdNqCddEt81d/wTBWV0jtZVaFS7qnay/x8pFFR0q3dpNgQc+qD6xWVS28ckJb/IJ34xZeGrf2kcZ2kKfFSqJ859XkDXgvhLTIyMrRo0SIdO3as5r6goCBddtllSk5OVpcuXWoFAqdPn1ZOTo7279+vDRs26IcffpAkFRQU6NFHH1VqaqqOHTumL7/8UlJVqHDfffepb9++7mwLQAMQLLhQYWGhxo4dq4KCAs2cOVNz5sxRSEjVu/e5c+fq/vvvl9VqlcViUXJyssnVwtPY7dLLe6VX99e/ztc/SVt+kn5/kXRjF/fVBvcoq5BmpUtf/eR4+elKaWWutKFAeq6/1Kete+uD6+WWSPd8JR0+5Xj5sdNVocPnBdL8QVKHQPfWB8BzbNy4US+//LIqKyslVQUK119/vYYNG6aAgACH2/j5+albt27q1q2bUlNTtXfvXr399ts6cOCA7Ha7Vq1aVbMuoQLQtHEqhAtNnz5dubm5mjZtmubNm1cTKkjS7Nmz1bt3b1VUVCg2NlahoaEmVgpPtOT7c4cK1eyS/vyd9FGuy0uCG9nt0iPb6w8VzlZSId23RTp4wvV1wX1OnJamb64/VDhbVnHVuiUVrq8LCAoK0oABAxQUFGR2KabwxP43b96shQsX1oQKvXv31rPPPqsrr7yy3lDhlywWixITE/X444/rxhtvlMViqbVs+vTphApAE0aw4CJ79uzR0qVL1bZtWz311FMO1+nTp4+kql++Z8vKytI111yjkJAQhYWF6ZZbbtHPP//s8prhOUoqpEV7ndvmxd1Vw+bhGb49WnUaTEOdqpD+ts919cD9luVIP5Q0fP2DJ6UVP7iuHqBap06d9NJLL53zCgCezNP6z8vL04IFC2S32yVJo0aN0v3336/w8HDD+zx06FDN/iTJbrcrN5dvQICmjGDBRZYsWaLKykpNnjxZwcHBDtcJDKwac3p2sHDy5EkNHz5cubm5WrJkif76179q48aNGjNmTE0K3BydstlUWF7u8A8a3+pD0iknJ2U7UiZt/NE19cD9/pnt/Dbr86Wfyhq9FJjAZq+apNVZ72VXjXaBa/BaWMVms6m4uFg2m3fOHupJ/VdWVmrRokU1EzRedtllmjp1ap1JGZ3Z39kTNfr4+NSMXHj//feVk5PTOIUDaHTMseAi69atkyQNHz683nWqk9ezg4W//vWvOnz4sD7//POaJDsmJkaDBw/W8uXLNX78eNcV7UKPZ+7S45m7zC7Da3ycZ2y7NYel4ZGNWwvcr6JS+tTAc8Bmr9ruBubbaPZ2HpUKSp3fLrtY2ndCSmjV+DWB18Jq+/fv1y233KI333xTPXo4nszSk3lS/5988on27asa7tahQwdNnTq11ikMznB09Yf77rtPBw4c0AcffCCbzabFixfrT3/6k+HHAOA6BAsuUp2odu7c2eHyiooKbdq0SVLtYOHDDz/UkCFDag2PGzRokLp06aIVK1YYChb69u2rgoICp7YJ9PHR7pRBTj9WfW7v1EVpUR0dLkvd/FmjPEb37t1V2oxHdTSmtv+7QdaIeKe3W/XZZv1j/EQXVAR3sgS3UYe5Owxt++izf9H/W/FsI1cEd/NPSVXYnX8ztG3qxJt0es/njVxR89TcXgvNeh2cONG5140jR45IklavXq1t27Y1aJsJEyY4XZc7OXMMjPQvmXMM/Pz86j2lt7KyUitXrqy5fddddzV4PgVH+3IUKvTt21e9e/fW1q1blZubq++//167d+9Wr1696t1X9+7ddfo011MGjIiIiNDWrVsNbUuw4CIlJVUntpaWOv7KaOnSpSosLFRISIji4uJq7t+9e7cmTZpUZ/1evXpp9+7dhmopKCjQ4cOHndomyNdXSjH0cA7FBwfr8nYdGm+HDuTl5emUBwwrbAytykoN/ecuO1Xs9HMFTY9vyxIZ/d92ouhn5fMcaPZaRf+oMIPb/vRjvop5Dkhqfq+FZr0OVr/naajq90alpaUN3rapvzY5cwyM9C+Zcwz8/f3rXfbtt9/WhCS9e/dWYmKiocc4V6ggSS1atNC1116rF198UVLVKIlzBQt5eXkq97LTi4CmgGDBRSIiIlRUVKRvvvlGgwbV/rYjPz9fs2bNkiQlJyfXGs5VVFRU6/q+1dq0aaPMzEzDtTgr0OC5cWaKiopixMJ/WI7lSkpyejvr8TxFR0c3fkFwL4tFtpOF8g1x/vqRQWU/8xzwAL62qkt82O12p4YM2ysrFWYvUSueA5Ka32uhWa+DLVu2dGr96g/TgYGBDd62qf9ecuYYGOlfMucY+Pn51bts/fr1NT+PGjXK0P7PFypU69+/v1q1aqXjx48rPT1dxcXF9c5hFhUVxYgFwCAjnxurESy4yMiRI7Vnzx4988wzGjVqlLp37y5JSk9P180336zCwkJJUkpKistrMTKcxV5WporrprigGtfZt2+fLAaH4HmaTT9KM752frv3H75FPebd0vgFwe0W7JFea8DlRs/Wyk/atGyB/H0XuKYouNXtX0gZR507D/nSCB+9uHOLiypqfprba6FZr4Pp6elOrb93714tWbJEqampDZ5j4IUXXjBQmfs4cwyM9C+ZcwwqKiq0bNkyh8v27696kQkKCtIll1zi9L4bGipIktVq1cCBA7VmzRrZbDZ9//33Sk5Odrjfffv2yWrlIw7gbs0rim9GZs+erfDwcB06dEi9evVSUlKSunXrpv79+6tLly4aMWKEpLqXmgwLC9OxY8fq7O/o0aNq06aNO0qHBxjUXop28vLYSWFSj9YuKQcmuLaz87/gr+ko+fu6pByYYGKse7YBnBUfH681a9YoPt75uYA8gSf0f+zYMRUVFUmS4uLinL4KhDOhQrWuXbvW/JyVlWWgagCuRLDgIjExMdq4caNGjx6tgIAAZWdnq02bNlq8eLFWrlxZM4PuL4OFxMREh3Mp7N692/C5a/A+Phbpj5dIfg38Hx7SQvrfFJeWBDeLDJJ+f1HD109oJd2e4Lp64H5XREujohq+/jWdpKGunQoHkFT17XNYWJjXfqvsCf2ffdnH2NhYp7Y1EipIqjUnGZedBJoeggUXSkxM1IcffqiTJ0/q5MmT+vrrr3XnnXeqpKRE2dnZ8vHx0UUX1X7nP2bMGH3xxRc1l6KUpK+//loHDx7U2LFj3d0CmrHkNtKLA6Xg87xvCfeXXh4kxYW4py64zw1dpJkXSecbDJ8UJs0fKLVsvu9x4YCPRXr8Eik15vzrTugsPZgscQU3uENubq5mzpxZ672ON/GE/s+enNzR3GD1MRoqSFKrVv+9Dm59k6MDMA9vI02wa9cu2e12de/eXUFBtcer33nnnXrppZc0btw4PfbYYyorK9Ps2bPVv39/jRs3zqSKjRvWtr1Oj73unOucbzmM69tW+uBy6d8/SO/nSIdP/XdZXLA0MU4aHSMFtzCvRrjWjV2qTo1Zli2t+EEqrvjvsv5tpbRYaViEZCVm9kgtfKTHL64KDv6ZJa3Ll2z2/y5Pjak6/SE5jFDBlXgtrK24uFgbN27UHXfcYXYppvCE/i+55BItWLBAZ86ccWoCylOnTumHH36Q5FyoIEnBwcF67rnn1KJFCwUGBhqqG4DrECyYYOfOnZLqngYhSaGhoVq3bp1mzJihG264QVarVWPGjNHzzz/v9PlrgCS19pemdJNujpcGrJDsqvoG+93hfJDwFrHBVSMXfpcoXbryv8+BhYPNrgzuYLFIl4RX/SmpkH616r/PgT86P98aAMjPz0/h4eFObxccHKyHH35YTz/9tK699toGhwqS5OPjo6goJ87vAuBWBAsmOFewIFVNTvPhhx+6syR4AR9L1QeJ6g8UhArex8+39nMA3qellecAAHOFhobqiSee4AszwMPwP9oE5wsWAAAAAE9FqAB4HkYsmGDdunVmlwAAAGCKdu3aacaMGWrXrp3ZpZjC2/sH4JkIFgAAAOA24eHhmjx5stllmMbb+wfgmRiHBAAAALc5ceKE1q5dqxMnTphdiim8vX8AnolgAQAAAG6Tl5enBx98UHl5eWaXYgpv7x+AZyJYAAAAAAAAhhEsAAAAAAAAwwgWAAAAAACAYQQLAAAAcBt/f38lJCTI39/f7FJM4e39A/BMXG4SAAAAbhMXF6e33nrL7DJM4+39A/BMjFgAAAAAAACGESwAAADAbTIzM3XppZcqMzPT7FJM4e39A/BMBAsAAABwG7vdrjNnzshut5tdiim8vX8Anok5FuCYv7+s775hdhXOYRIkAEBjam6vhbwOopH5+voqLS2t0fb37OKlOllSopCWLTXrN9fXud0YfH19G2U/AJxDsACHLBaLFBBgdhkAAJiG10J4O4vFIqu18T4u2CVV2qv+tlqtdW4DaL44FQIAAAAAABhGsAAAAByKjY1VQkKCUlJS1LNnTy1YsKDedSdNmqSvvvqqQft97733dPfdd2vVqlW65JJLlJKSoosuukhvvPHf0w6GDh2qrKysC+4BTU9sbKyWLFmi2NhYs0sxhbf3D8AzMeYIAADUa+nSpUpJSVFOTo6Sk5M1dOhQJScn11pny5YtOnr0qAYNGtSgff7rX//SLbfcohtvvFEbNmxQcnKysrOz1aNHD1177bUKCQnRzJkzNWfOHL355puuaAsmCggIUNeuXc0uwzTe3j8Az8SIBQAAcF6dO3dWQkKC9u3bV2fZ4sWLddNNN0mSjh07ppiYGIWHhyslJUWJiYny9/fX7bffLkk6c+aMNm3apBEjRshisejYsWOSpBMnTig8PFz+/5mAcPTo0Vq9erWOHz/ungbhNvn5+XriiSeUn59vdimm8Pb+AXgmggUAAHBeO3fu1N69e9W7d+86yzZs2KABAwZIklq3bq2bbrpJ9957rzIyMvTCCy9o4MCBeuWVVyRJ69ev1+DBg9WiRQstXbpU1157rTp37qwhQ4bojTfekJ+fnySpRYsWSkpK0saNG93XJNzi+PHjWr58udeGRt7ePwDPxKkQAACgXtdff70CAwMVFBSkV199Vd26dauzTm5urjp06FBzOyMjQ9OnT5ckbdu2TRdffHHNsg8++EATJkxQRUWFnnjiCb3//vu67LLLlJ6ermuuuUY7d+5U27ZtJUkRERHKzc11cYcAAOBCMWIBAADUa+nSpcrIyNCXX36piRMnOlwnKChIZWVlNbczMjJqwoSzgwW73a41a9YoNTVVGRkZysvL02WXXSZJ6tevn2JiYrR9+/aa/ZSVlSkwMNBVrQEAgEZCsAAAAC5IcnKyMjMzJUmHDx+WxWJRdHS0JGnHjh1KSkqSVDXJY2JiooKDg9WxY0fl5+drz549kqQDBw7o4MGDSkhIqNnvnj17HJ56AQAAmhaCBQAAcEEmTpyoNWvWSJK2b99e69SH1q1ba+HChZKqrgYxfvx4SVKHDh3017/+Vdddd5169+6tCRMmaP78+erUqZMkKTs7WzabjWDBA/n4+Ojiiy+Wj493vg319v4BeCbmWAAAAA5lZ2c3aL1bb71VgwcP1qOPPqoxY8ZozJgxNcvS09Nrfl6xYoXWr19fc/vGG2/UjTfe6HCfixYt0uzZs2WxWIwVjyarsrJS27dvV2VlpdmlmMLb+wfgmYhKAQDABQkODtbzzz+vrKysc663a9cutW/fvkH7jIqK0tSpUxujPAAA4GKMWAAAABfs8ssvb9T9VV9VAgAANH2MWAAAAAAAAIYRLAAAAMBtQkJCdNVVVykkJMTsUkzh7f0D8EycCgEAAAC3iY6O1uOPP252Gabx9v4BeCZGLAAAAMBtysvLdejQIZWXl5tdiim8vX8AnolgAQAAAG6TlZWltLS0815FxFN5e/8APBOnQsAhu90uNbck3d+f650DAACgUdjtdtlsNrPLcIqvry/vh2EKggU4Vl6uiuummF2FU6zvviEFBJhdBgAAADyAzWbTsmXLzC7DKWlpabJa+YgH9+NUCAAAAAAAYBjBAgAAAAAAMIxxMgAAAHCbHj16aMuWLWaXYRpv7x+AZ2LEAgAAAAAAMIxgAQAAAG6Tk5OjqVOnKicnx+xSTOHt/QPwTAQLAAAAcJvS0lJ99913Ki0tNbsUU3h7/wA8E8ECAAAAAAAwjGABAAAAAAAYRrAAAAAAAAAMI1gAAACA20RGRuqxxx5TZGSk2aWYwtv7B+CZrGYXAAAAAO/RqlUrpaamml2Gaby9f1yYyspK+fjw3TCaHoIFAAAAuE1RUZHWrl2rkSNHKiwszOxy3M7b+/dWx44dU1ZWln744QeVlZVJkvz8/BQdHa0uXbooPDxcFovlnPs4ceKEnn76aY0ZM0aDBw92R9lAgxEsAAAAwG1+/PFHPfvss0pKSvLKD9be3r83KSoq0rp16/TZZ5/pyJEj51y3VatWGjJkiEaOHOnwNJkTJ07oT3/6k3JycjR//nxZrVb179/fVaUDTmMcjRsUFhZq9uzZio+PV0BAgDp27KgZM2aopKREt912mywWi+bPn292mQAAD1dpl+z/+dl+zjUBAEadOHFCCxYs0LRp0/TPf/7zvKGCJB0/flwrV67Ufffdp2eeeUYFBQW19lcdKkhVIURMTIzL6geMYMSCi2VkZCg1NVUFBQVq2bKlevbsqby8PL344os6ePCgjh49KklKSUkxt1AX+azwiEZ9tUFP90zW77v2cLiO34p3dXX7SH0wYKibqwMA73DwhPRetrQqt3aw8OfvpLRYKTbYvNoAwJNs3rxZf//733Xy5Mma+ywWixISEtS1a1fFxcUpNDRUFotFJSUlys7O1vfff689e/bozJkzkqTt27dr9+7duvHGGzVw4EA99dRTNaFCWFiYHnnkEUVFRZnSH1AfggUXKiws1NixY1VQUKCZM2dqzpw5CgkJkSTNnTtX999/v6xWqywWi5KTk02uFgDgaWx26YVd0pLvHS9f8n3Vn1u7Sb/tIZ3n9F4AQD3sdrv+8Y9/aOXKlTX3BQcHa9SoUbr88svVtm1bh9sNHDhQUtWohM8++0wfffSRfv75Z5WXl+v111/Xu+++q1OnTkkiVEDTxqkQLjR9+nTl5uZq2rRpmjdvXk2oIEmzZ89W7969VVFRodjYWIWGhppYKQDA09jt0jM76g8Vzvbafukvu11fEyBJQUFBGjBggIKCgswuxRTe3r8nstvteu2112qFCv369dO8efN0/fXX1xsqnC00NFRjx47Vn//8Z11xxRU19xMqoLkgWHCRPXv2aOnSpWrbtq2eeuoph+v06dNHktS7d++a+6qDiP79+8vf3/+8s8MCAODIZwXS+zkNX/8fB6Wvf3JdPUC1Tp066aWXXlKnTp3MLsUU3t6/J1qxYoU+/vhjSVWnPdx+++36/e9/r9atWzu9r4CAAE2cOFHt27evdX9CQgKhApo0ggUXWbJkiSorKzV58mQFBzs+eTUwMFBS7WDhwIEDWrZsmSIiItSvXz+31OoOp2w2FZaXO/wDAGh872Y5v817BrYBnGWz2VRcXCybzWZ2Kabw9v49zaFDh7R06dKa27/97W81cuRIw18OVk/U+MsJHzdv3qzt27dfUK2AKxEsuMi6deskScOHD693ndzcXEm1g4XLLrtM+fn5Wr58uUaOHOnaIt3o8cxdivr43w7/AAAa16FiaUuh89t9ViD9VNb49QBn279/v0aMGKH9+/ebXYopvL1/T2Kz2fTyyy/XhETXXHONhg41Phn5L6/+EBYWpkmTJtUs/9vf/qaSkpILKxpwESZvdJHqXwidO3d2uLyiokKbNm2SVDtY8PFp/Kynb9++tS5Z0xCBPj7anTKo0Wq4vVMXpUV1dLgsdfNnjfIY3bt3V2llZaPsy1N1mJ8ji4+vbJU2xcQ4fm7Cs/Ec8A7+SSMVdvfrTm9XKWlA6iSd3v9Vo9cEzzVx4kSn1q/+Jnb16tXatm1bg7aZMGGC03W5kzPHwEj/UtM/Bg0x4dZ71TI4VPkF+YqJialzu6nx8/Or95RmSdqyZYu+/75qIpvo6Gin/y+czVGo8MgjjygyMlKZmZnasWOHjh49qk8++UTjx4+vdz/du3fX6dOnDdcB7xYREaGtW7ca2pZgwUWq08TS0lKHy5cuXarCwkKFhIQoLi7OpbUUFBTo8OHDTm0T5OsrpTReDfHBwbq8XYfG26EDeXl5OsWwwnPqYP/PhebsdqefE/AMPAe8Q+vOxQozuO3Px0/oBM8NOMHZb1Cr3xuVlpY2eNum/vvKmWNgpH+p6R+Dhqj8z/u0SptNhw8frnO7qfH39z/n8up5FSRpypQp8vPzM/Q49YUK1XMqTJ06Vffdd5/sdrvWrl2ra665pt4vI/Py8lTOqcYwAcGCi0RERKioqEjffPONBg2q/c1/fn6+Zs2aJUlKTk52+QSNERERTm8T6IKRE64WFRXFiIXzqX6uWSyKjo42txaYg+eAV/DzM/66EubvoxCeG3BCy5YtnVq/+sN0YGBgg7dt6r+vnDkGRvqXmv4xaAgfX9+av6Ojo+vcbmrOFRTk5uZqz549kqregyYlJRl6jPOFClLVe/mUlBRt375dhYWF2r59e80k8L8UFRXFiAUYZuRzYzWCBRcZOXKk9uzZo2eeeUajRo1S9+7dJUnp6em6+eabVVhYdfJrSkqKy2sxMpzFXlamiuumuKAa19m3b58sAQFml9Gk9V9eNdTZ18e3Zo4PeBeeA97hTKU05hPpZye/tIoOkrZ8uVo+XJAITkhPT3dq/b1792rJkiVKTU1Vjx49GrTNCy+8YKAy93HmGBjpX2r6x6Ahnlzwtk4UlygyIlK5ubl1bjc1FRUVWrZsmcNlO3bsqPn58ssvN/RFYUNChbMfo3ryxh07dtQbLOzbt09WKx/x4H7N72vpZmL27NkKDw/XoUOH1KtXLyUlJalbt27q37+/unTpohEjRkiqPb8CAACNoYWPdK2BKTTSYkWoAJeLj4/XmjVrFB8fb3YppvD2/j1F9dwKkpSYmOj09s6ECpJqhVBnPzbQVBAsuEhMTIw2btyo0aNHKyAgQNnZ2WrTpo0WL16slStXat++fZIIFgAArjEpTurgxCCu6CBpfCfX1QNUs1qtCgsL89pvVb29f0+RnZ0tSfL19VXHjo4nKK+Ps6GCJAUHB6t9+/Y1j83lStHUECy4UGJioj788EOdPHlSJ0+e1Ndff60777xTJSUlys7Olo+Pjy666CKzywQAeKA2/tJfBkrh5557TJLUIVB6caAUamzeMcApubm5mjlzZpMc+u4O3t6/pygqKpIktWvXTi1atGjwdkZChWrV65w5c0anTp0yUDXgOkSlJti1a5fsdru6d++uoKCgOsvfe+89SdLu3btr3Y6NjVXfvn3dV2gjGNa2vU6Pve6c65xvOQDAmPhQ6Y2h0qJM6ePD0ulfzG/r7yOlxki/6SG1Y4oauElxcbE2btyoO+64w+xSTOHt/XuK8ePHq7S01OnJS9944w1DoYIkDRo0SHFxcfLz83MqzADcgWDBBDt37pRU/2kQkyZNcnh7ypQpev31111aGwDAs0QESY9eLN3bS1p7WPqxTLJIigiURkVLIbw3BQCnjR071tB2U6ZM0Q8//KDi4mKnQgVJGjZsmKHHBNyBYMEE5wsW7NXXmQcAoJG09pMmxpldBQB4t9DQUD3yyCMqKSlRZGSk2eUAjYZgwQTnCxYAAAAAeKbQ0FCFhoaaXQbQqAgWTLBu3TqzSwAAADBFu3btNGPGDLVr187sUkzh7f0D8EwECwAAAHCb8PBwTZ482ewyTOPt/QPwTFxuEgAAAG5z4sQJrV27VidOnDC7FFN4e/8APBPBAgAAANwmLy9PDz74oPLy8swuxRTe3j8Az0SwAAAAAAAADCNYAAAAAAAAhhEsAAAAAAAAwwgWAAAA4Db+/v5KSEiQv7+/2aWYwtv7B+CZuNwkAAAA3CYuLk5vvfWW2WWYxtv7B+CZGLEAAAAAAAAMI1gAAACA22RmZurSSy9VZmam2aWYwtv7B+CZCBYAAADgNna7XWfOnJHdbje7FFN4e/8APBNzLMAxf39Z333D7CqcwyRIAAAAaCS+vr5KS0trtP09u3ipTpaUKKRlS836zfV1bjcGX1/fRtkP4CyCBThksVikgACzywAAAABMYbFYZLU23sclu6RKe9XfVqu1zm2gOeNUCAAAAAAAYBjBAgDAodjYWCUkJCglJUU9e/bUggUL6l130qRJ+uqrrxq03/fee0933313rftee+01WSwWffDBBzX3DR06VFlZWYZqB9B0xcbGasmSJYqNjTW7FFN4e/8APBPBAgCgXkuXLlVGRoZWr16tBx98UDt27KizzpYtW3T06FENGjSoQfv817/+pfHjx9fczs7O1t/+9jcNHDiw1nozZ87UnDlzLqh+AE1PQECAunbtqgAvPeXS2/sH4JkIFgAA59W5c2clJCRo3759dZYtXrxYN910kyTp2LFjiomJUXh4uFJSUpSYmCh/f3/dfvvtkqQzZ85o06ZNGjFihCSpsrJSt99+u1566SX5/2IC1tGjR2v16tU6fvy4i7sD4E75+fl64oknlJ+fb3YppvD2/gF4JoIFAMB57dy5U3v37lXv3r3rLNuwYYMGDBggSWrdurVuuukm3XvvvcrIyNALL7yggQMH6pVXXpEkrV+/XoMHD1aLFi0kSc8995wuvfRS9enTp85+W7RooaSkJG3cuNGFnQFwt+PHj2v58uVeGxp6e/8APBPTjwIA6nX99dcrMDBQQUFBevXVV9WtW7c66+Tm5qpDhw41tzMyMjR9+nRJ0rZt23TxxRfXLPvggw80YcIESdJ3332nZcuW6fPPP6/38SMiIpSbm9tY7QAAAMAFCBYAAPVaunSpUlJSzrlOUFCQysrKam5nZGTUhAnbtm3TNddcI0my2+1as2aN5s6dK0nauHGjsrOza8KKgoIC3XnnncrPz6+Z3LGsrEyBgYGN3RYAAAAaEadCAAAuSHJysjIzMyVJhw8flsViUXR0tCRpx44dSkpKklQ1yWNiYqKCg4MlSXfffbfy8/OVnZ2t7OxsDRw4UH/9619rXTFiz549Dk+/AAAAQNNBsAAAuCATJ07UmjVrJEnbt2+vdepD69attXDhQkl1rwZxPtnZ2bLZbAQLgIfx8fHRxRdfLB8f73wb6u39A/BMnAoBAHAoOzu7QevdeuutGjx4sB599FGNGTNGY8aMqVmWnp5e8/OKFSu0fv36evezYcOGWrcXLVqk2bNny2KxOFU3gKatsrJS27dvV2VlpdmlmMLb+wfgmYhKAQAXJDg4WM8//7yysrLOud6uXbvUvn37Bu83KipKU6dOvdDyAAAA4GKMWAAAXLDLL7+80fdZfWUJAAAANG2MWAAAAAAAAIYRLAAAAMBtQkJCdNVVVykkJMTsUkzh7f0D8EycCgEAAAC3iY6O1uOPP252Gabx9v4BeCZGLAAAAMBtysvLdejQIZWXl5tdiim8vX8AnolgAQAAAG6TlZWltLS0815JxlN5e/8APBPBAgAAAAAAMIw5FuCQ3W6XmtsQPX9/WSwWs6sAAAAAPILdbpfNZjO7jAbz9fXl84BJCBbgWHm5Kq6bYnYVTrG++4YUEGB2GQAAAIBHsNlsWrZsmdllNFhaWpqsVj7imoFTIQAAAAAAgGHEOQAAAHCbHj16aMuWLWaXYRpv7x+AZ2LEAgAAAAAAMIxgAQAAAG6Tk5OjqVOnKicnx+xSTOHt/QPwTAQLAAAAcJvS0lJ99913Ki0tNbsUU3h7/wA8E8ECAAAAAAAwjGABAAAAAAAYRrAAAAAAAAAMI1gAAACA20RGRuqxxx5TZGSk2aWYwtv7B+CZrGYXAAAAAO/RqlUrpaamml2Gaby9fwCeiRELAAAAcJuioiL985//VFFRkdmlmMLb+4d3Ky8v108//aT8/HwVFhbq9OnTTm2flZWlzZs3u6g6XAhGLAAAAMBtfvzxRz377LNKSkpSWFiY2eW4nbf3D+9y+vRpbd68WTt37lRWVpYOHz4su91es9zX11cxMTGKi4tTSkqK+vbtK6vV8UfUrKwsPfHEEyotLVVlZaUGDx7srjbQAAQLAAAAAIBGU1RUpJUrV2rDhg0qLi6udz2bzaacnBzl5ORow4YNCgsL04gRI5Samqrg4OCa9apDhZKSEknSp59+qkGDBslisbi8FzQMp0K4SWFhoWbPnq34+HgFBASoY8eOmjFjhkpKSnTbbbfJYrFo/vz5ZpfZ6D4rPCK/Fe/quYN7613Hb8W7Gv/1RjdWBXifglPSor1S5X9uV0r68ohUaT/XVgAAAA1nt9v1+eef6//9v/+nDz/8sFao4Ovrq9jYWA0cOFBDhgxR//791bFjx1rhQFFRkZYtW6ZZs2Zp27ZtkuqGCgkJCZo1axahQhPDiAU3yMjIUGpqqgoKCtSyZUv17NlTeXl5evHFF3Xw4EEdPXpUkpSSkmJuoQA8TmGZ9PQO6fOC/4YK1aZvlmKCpHsSpVHRppQHAAA8RFlZmRYsWKD09PSa+6xWqwYOHKjLL79c8fHxatGiRZ3tysvLtXfvXn366afaunWrKisrVVRUpGeffVZ9+vTR3r17a4UKf/jDHxQQEOC2vtAwBAsuVlhYqLFjx6qgoEAzZ87UnDlzFBISIkmaO3eu7r//flmtVlksFiUnJ5tcLQBPkn9KumOTVFBa/zq5p6Q/bJMKy6Ubu7ivNgDeKygoSAMGDFBQUJDZpZjC2/uHZzp16pSeeuop7d+/v+a+IUOG6Oabb1arVq3Oua2/v7969+6t3r1766efftKrr76q7du3S1LNqAWJUKGp41QIF5s+fbpyc3M1bdo0zZs3ryZUkKTZs2erd+/eqqioUGxsrEJDQ02sFIAnqaiUZnx97lDhbH/+TvriR9fWBACS1KlTJ7300kvq1KmT2aWYwtv7h+epqKjQvHnzakKFoKAgzZw5U9OmTTtvqPBL7dq10+zZs5WWllbr/pCQED3wwAOECk0YwYIL7dmzR0uXLlXbtm311FNPOVynT58+kqTevXvX3Pfee+8pLS1NnTt3VlBQkHr06KGHHnronBOfNHWnbDYVlpc7/AOg8a3Pl74/6dw2r+8//zoAcKFsNpuKi4tls9nMLsUU3t4/PM/777+v3bt3S5KCg4M1Z84c9evXz/D+srOz9dFHH9W67+TJk/riiy8uqE64FsGCCy1ZskSVlZWaPHlyrVlNzxYYGCipdrAwb948+fr66sknn9Tq1at199136+WXX9ZVV12lyspfniXdPDyeuUtRH//b4R8Aje+f2c5vk3FU2n+80UsBgFr279+vESNG1Boy7U28vX94lqysLH3wwQeSqiZnvP/++9W5c+cL2t/ZEzVGR/93Eqi3335bR44cuaB64TrMseBC69atkyQNHz683nVyc3Ml1Q4WVqxYoXbt2tXcHjZsmNq1a6fJkyfriy++0GWXXeaiil3n9k5dlBbV0eGy1M2fubkawLOV2aRvfja27ZdHpG7OjVoEAABeyG6365VXXqn54nP8+PHq1q2b4f05uvrDH/7wB7355ptat26dysrK9NZbb2nmzJmNUj8aF8GCC+Xk5EhSvaldRUWFNm3aJKl2sHB2qFCtb9++kqTDhw87XUffvn1VUFDg1DaBPj7anTLI6ceqT3xwsC5v16HR9udI9+7dVdpMR3S4S4f5ObL4+MpWaVNMjPE0GU2bT0hbtX8mw9C2Tz3/kh5a/kzjFgTAo02cONGp9au/cVy9enWtidnOZcKECU7X5U7OHAMj/UtN/xg0xIRb71XL4FDlF+QrJiamzm1P1xz79/Pzq/eU7oMHD+rgwYOSVNXPBTxH6wsVAgIC9Otf/1rbt29XUVGRtm7dqiNHjqh9+/YO99O9e3edPn3acB3eLiIiQlu3bjW0LcGCC1X/xygtdTx72tKlS1VYWKiQkBDFxcWdc1/r16+XJCUmJjpdR0FBgdOBRJCvr5Ti9EOZKi8vT6c4X/GcOtjtVT/Y7YZCKjQPPoHH5fjl9vyO/5SvAp4bAJxQ/X6noarfF5WWljZ426b+muXMMTDSv9T0j0FDVP7nfVqlzabDhw/Xue3pmmP//v7+9S77+OOPa34ePXq0rFZjHy3PFSpIVZNBjho1Su+++67sdrs+/fRT3XjjjQ73lZeXp3LmcDMFwYILRUREqKioSN98840GDar97X9+fr5mzZolSUpOTpbFYql3P4cPH9Yjjzyiq666SikpKYbqcFagT/ObfiMqKooRC+dT/TyzWGqdswbPU5G/T9bI7g1e3263y2KxKPDo9zw3ADilZcuWTq1f/eEhMDCwwds29d9LzhwDI/1LTf8YNISPr2/N39HR0XVue7rm2L+fn5/D+202m77++mtJVc//wYMHG9r/+UKFaiNGjNCyZctks9m0adOmeoOFqKgoRixcACOfG6sRLLjQyJEjtWfPHj3zzDMaNWqUunevepOfnp6um2++WYWFhZJ0zrCguLhY48aNk5+fn1599VVDdRgZzmIvK1PFdVMMPZ5Z9u3bJwuXoDmn/sulSkm+Pr4183vAM73zvTTvu4avb7FY1KmltGXtO/KpP+cEgDrS09OdWr+iokL/8z//o5CQkAZ/w/nCCy8YqMx9nDkGRvqXmv4xaIgnF7ytE8UlioyIVG5ubp3bnq459l9RUaFly5bVuT83N7dmZEBycvI5RzbUp6GhgiS1bt1a3bp10969e1VYWKgTJ04oNDS0znr79u0zPHICF6b5fS3djMyePVvh4eE6dOiQevXqpaSkJHXr1k39+/dXly5dNGLECEm151c4W2lpqcaOHausrCx9/PHHioyMdGf5AJqxMR2l0BbObXNDFxEqAHA5q9WqsLAwr33z7+39wzNkZWXV/NylSxdD2zc0VKh29qnjZz8+mgaCBReKiYnRxo0bNXr0aAUEBCg7O1tt2rTR4sWLtXLlSu3bt0+S42DhzJkzmjhxorZu3arVq1erZ8+e7i4fQDMW3EKa11/ya+Bv+dQYaVKsS0sCAElV33TOnDmzyX5D62re3j88w9lzQnTq1MmpbY2ECpIUGxvr8PHRNBCVulhiYqI+/PDDOvcXFxcrOztbPj4+uuiii2otq6ys1OTJk/Xpp59q1apV6t+/v7vKbXTD2rbX6bHXnXOd8y0HYMwl4dLCQdJD26Qfyxyv42uRro+TZvT67xQcAOBKxcXF2rhxo+644w6zSzGFt/cPzxAQEKC2bdvqzJkzDk9JqE9OTo6hUEGSQkND1apVK/n5+dU79wPMQ7Bgkl27dslut6t79+4KCgqqteyee+7RP//5Tz3wwAMKCgrS5s2ba5Z17drV4eUoAcCRlHDp3yOlzwuk93OkrGLptE0K85dGRknjO0ntA82uEgAANCdpaWlKS0tzeruwsDCFh4erpKTEqVBBki6++GItXrzY6ceEexAsmGTnzp2SHJ8GsXr1aknS008/raeffrrWstdee03/8z//4/L6AHgOq480IqrqDwAAgFlCQ0P18MMP65133tEtt9zS4FABTR/BgknOFSxkZ2e7uRoAAAAAcL3Q0FDdeeedZpeBRsbkjSY5V7AAAADgqdq1a6cZM2Z47amd3t4/AM/EiAWTrFu3zuwSAAAA3C48PFyTJ082uwzTeHv/ADwTIxYAAADgNidOnNDatWt14sQJs0sxhbf3D8AzESwAAADAbfLy8vTggw8qLy/P7FJM4e39A/BMBAsAAAAAAMAwggUAAAAAAGAYwQIAAAAAADCMYAEAAABu4+/vr4SEBPn7+5tdiim8vX8AnonLTQIAAMBt4uLi9NZbb5ldhmm8vX8AnokRCwAAAAAAwDCCBQAAALhNZmamLr30UmVmZppdiim8vX8AnolgAQAAAG5jt9t15swZ2e12s0sxhbf3D8AzESwAAAAAAADDmLwRjvn7y/ruG2ZX4RxmVwYAAAAaja+vr9LS0hplX88uXqqTJSUKadlSs35zfb33XQhfX98L3geMIViAQxaLRQoIMLsMAAAAACaxWCyyWhvnI6NdUqW96u/qfTq6D80T/3oAAABwm9jYWC1ZskTR0dFml2IKb+8fgGdijgUADsXGxiohIUEpKSnq2bOnFixYUO+6kyZN0ldffdWg/b733nu69dZbNX78eHXv3l29e/fWqFGjdODAgZp1hg4dqqysrAvuAQDQ9AQEBKhr164K8NKRkd7ePwDPRLAAoF5Lly5VRkaGVq9erQcffFA7duyos86WLVt09OhRDRo0qEH7/Ne//qXx48frzjvvVGZmpr799luNGzdOt99+e806M2fO1Jw5cxqtDwBA05Gfn68nnnhC+fn5ZpdiCm/vH4BnIlgAcF6dO3dWQkKC9u3bV2fZ4sWLddNNN0mSjh07ppiYGIWHhyslJUWJiYny9/evCQ3OnDmjTZs26eqrr9bVV19dNZeHpIEDByo7O7tmn6NHj9bq1at1/Phx1zcHAHCr48ePa/ny5V77O97b+wfgmQgWAJzXzp07tXfvXvXu3bvOsg0bNmjAgAGSpNatW+umm27Svffeq4yMDL3wwgsaOHCgXnnlFUnS+vXrNXjwYLVo0aLWPv7yl79o3LhxNbdbtGihpKQkbdy40YVdAQAAAGgMTN4IoF7XX3+9AgMDFRQUpFdffVXdunWrs05ubq46dOhQczsjI0PTp0+XJG3btk0XX3xxzbIPPvhAEyZMqLX9k08+qQMHDujTTz+tdX9ERIRyc3Mbsx0AAAAALkCwAKBeS5cuVUpKyjnXCQoKUllZWc3tjIyMmjBh27ZtuuaaayRJdrtda9as0dy5c2vWnTdvnt5//32tXbtWQUFBtfZbVlamwMDARuoEAAAAgKtwKgSAC5KcnKzMzExJ0uHDh2WxWGouobVjxw4lJSVJqprkMTExUcHBwZKk5557TkuWLNEnn3yi1q1b19nvnj17HJ56AQBo3tq0aaMpU6aoTZs2ZpdiCm/vH4BnIlgAcEEmTpyoNWvWSJK2b99e69SH1q1ba+HChZL+ezUIqer0iZkzZ+rYsWMaPny4UlJSauZpkKTs7GzZbDaCBQDwQD4+PmrRooV8fLzzbai39w/AM3EqBACHzr5Kw7nceuutGjx4sB599FGNGTNGY8aMqVmWnp5e8/OKFSu0fv16SVJMTIzsdnu9+1y0aJFmz55dc9UIAIDnKCws1CuvvKLLLrtMbdu2Nbsct/P2/gF4JqJSABckODhYzz//vLKyss653q5du9S+ffsG7TMqKkpTp05tjPIAAAAAuBgjFgBcsMsvv7xR91d9VQkAAAAATR8jFgAAAAAAgGEECwAAAHCbkJAQXXXVVQoJCTG7FFN4e/8APBOnQgAAAMBtoqOj9fjjj5tdhmm8vX8AnokRCwAAAHCb8vJyHTp0SOXl5WaXYgpv7x+AZyJYAAAAgNtkZWUpLS3tvFcT8lTe3j8Az8SpEHDIbrdLzS1J9/eXxWIxuwoAAAAAHsBut8tms5ldhlN8fX1N+UxEsADHystVcd0Us6twivXdN6SAALPLAAAAAOABbDabli1bZnYZTklLS5PV6v6P+ZwKAQAAAAAADCNYAAAAAAAAhnEqBAAAANymR48e2rJli9llmMbb+wfgmRixAAAAAAAADCNYAAAAgNvk5ORo6tSpysnJMbsUU3h7/wA8E8ECAAAA3Ka0tFTfffedSktLzS7FFN7ePwDPRLAAAAAAAAAMI1gAAAAAAACGESwAAAAAAADDCBYAAADgNpGRkXrssccUGRlpdimm8Pb+AXgmq9kFAAAAwHu0atVKqampZpdhGm/vH8CF+emnn9SuXTuzy6iDYAEAAABuU1RUpLVr12rkyJEKCwszuxy38/b+AW9jt9uVm5urgwcPKisrS/n5+SovL5ePj4+CgoLUuXNndenSRfHx8WrduvU597Vhwwb97W9/0z333KPBgwe7p4EGIlgAAACA2/z444969tlnlZSU5JUfrL29f8BbnDp1Shs3btQnn3yi3Nzcetfbtm2bJMliseiSSy7RFVdcoaSkJPn41J61YMOGDVq8eLHsdrvmz5+vyMhIxcXFubQHZzDHghsUFhZq9uzZio+PV0BAgDp27KgZM2aopKREt912mywWi+bPn292mfBwx09L9v/8bJdUfMbMagAAAADPY7fbtXbtWt1zzz167bXXzhkq/HK7bdu26amnntIf/vAHZWVl1Sw7O1SQpCuvvFKxsbGuKN8wRiy4WEZGhlJTU1VQUKCWLVuqZ8+eysvL04svvqiDBw/q6NGjkqSUlBRzC3WRzwqPaNRXG/R0z2T9vmsPh+v4rXhXV7eP1AcDhrq5Ou+w95j0Tpb0yeHawcLVH0tXd5RuiJNiQ0wsEAAAAPAAhYWFWrx4sXbu3Fnr/oSEBPXp00dxcXHq3LmzgoKCVFlZqaKiImVlZengwYPatGlTzWfDnJwcPfzwwxo/frzCw8P1t7/9rSZUSE1N1S233CKLxeL2/s6FYMGFCgsLNXbsWBUUFGjmzJmaM2eOQkKqPsHNnTtX999/v6xWqywWi5KTk02uFp7o3z9IT34r2ex1l52ySe9lS8t/kJ7sI/2KyakBAAAAQw4fPqw//elPNeGAJA0ZMkRjx45V586dHW7ToUMHdejQQQMHDtQNN9ygbdu26b333tMPP/wgm82mZcuW1Vq/qYYKEqdCuNT06dOVm5uradOmad68eTWhgiTNnj1bvXv3VkVFhWJjYxUaGmpipfBEa/OkP2Y4DhXOdrpSemCrlP6TW8oCAHi5oKAgDRgwQEFBQWaXYgpv7x/wRAUFBXr88cdrQoU2bdrogQce0LRp0+oNFX7J19dX/fv315NPPqm0tLQ64cGVV17ZZEMFiWDBZfbs2aOlS5eqbdu2euqppxyu06dPH0lS7969a+7buHGjRo4cqcjISPn7+ysmJkbXX3+99uzZ45a64RlO26RndjR8/Qq79PROyX6eEAIAgAvVqVMnvfTSS+rUqZPZpZjC2/sHPM3p06c1d+5cHT9+XJIUFxenp59+2vCp7larVe3atas59aFaixYtmmyoIBEsuMySJUtUWVmpyZMnKzg42OE6gYGBkmoHC0VFRUpKStKLL76ojz/+WM8884x27dqlQYMGNXjij6bolM2mwvJyh3/Q+NblS0Wnndsmp1jaWuiaegAAqGaz2VRcXCybzWZ2Kabw9v4BT/Puu+8qLy9PktSxY0c99NBDFzQavXqixmrVYcLKlSu1f//+CyvWhZhjwUXWrVsnSRo+fHi961QHBWcHC9dcc42uueaaWuv169dPCQkJWrZsmWbMmOGCal3v8cxdejxzl9lleI0PDxnbbsUhqV+7xq0FAICz7d+/X7fccovefPNN9ejheGJnT+bt/QOe5MCBA1q5cqWkqpEGM2bMqPdL5Yb45dUfUlNTFRoaqqVLl8put+vll1/W3LlzZbU2vY/xTa8iD5GTkyNJ9Z5TU1FRoU2bNkmqHSw4Eh4eLkmGn0B9+/ZVQUGBU9sE+vhod8ogQ4/nyO2duigtqqPDZambP2uUx+jevbtKKysbZV/NXdtH1ska2d3p7f617ku9es11LqgIAOCpJk6c6NT6R44ckSStXr265vrt5zNhwgSn63InZ46Bkf6lpn8MGmLCrfeqZXCo8gvyFRMTU+e2p6P/uv029WPg5+dX72ntkrR8+fKaEGDSpEkX1IOjUOGWW25RZWWl0tPT9f333ysvL09bt27VwIED691P9+7ddfq0k0OX/yMiIkJbt241tC3BgouUlJRIkkpLSx0uX7p0qQoLCxUSEqK4uLg6y202myorK5WTk6M//OEPioiI0HXXGfvAV1BQoMOHDzu1TZCvr5Ri6OEcig8O1uXtOjTeDh3Iy8vTKYYVSpJaVVQY+s9dXlbm9HMFAODdqt/zNFT1e6PS0tIGb9vUX5ucOQZG+pea/jFoiMr/vE+rtNl0+PDhOrc9Hf3X7bepHwN/f/96lx09erTmQ3jr1q01evRow49TX6hgsVjk6+urG2+8UX/6058kSR9//PE5g4W8vDyVm3C6OcGCi0RERKioqEjffPONBg2q/c1/fn6+Zs2aJUlKTk52OAnHsGHDakY0xMfHa926dWrXztgY9YiICKe3CfRpftNvREVFMWLhP3xOHJHU0+ntWpz6WdHR0Y1fEADAY7Vs2dKp9as/TAcGBjZ426b+2uTMMTDSv9T0j0FD+Pj61vwdHR1d57ano/+6/Tb1Y+Dn51fvsg0bNqjyP589RowYYXh0+blChWoXXXSRoqKilJeXp927dysvL09RUVEO9xcVFXVBIxaMIlhwkZEjR2rPnj165plnNGrUKHXvXjUsPT09XTfffLMKC6tmyatvttC///3vOnbsmLKysvTss8/qiiuu0KZNmwzNIGxkOIu9rEwV101xejsz7du3T5aAALPLaBLWHJYeavjoyhpv/H6S+j45qfELAgB4rPT0dKfW37t3r5YsWaLU1NQGzzHwwgsvGKjMfZw5Bkb6l5r+MWiIJxe8rRPFJYqMiFRubm6d256O/uv229SPQUVFhZYtW+Zw2d69e2t+HjZsmKH9NyRUkKomcLzsssv0zjvvSJIyMzPrDRb27dtnyhwMze9r6WZi9uzZCg8P16FDh9SrVy8lJSWpW7du6t+/v7p06aIRI0ZIqn9+hYSEBA0YMEA33HCDPv30U508eVJz5851ZwtoxkZESm3qD1gdiguW+oS7ph4AAKrFx8drzZo1io+PN7sUU3h7/4AnsNvtysrKkiSFhoaqffv2Tu+joaFCtW7dutX8XP3YTQnBgovExMRo48aNGj16tAICApSdna02bdpo8eLFWrlypfbt2yfp/BM3SlXn7MTHx+vAgQOuLhseooWP9IfeUkOvdFuzftO9NC4AwENYrVaFhYU1yVnN3cHb+wc8wc8//6yTJ09KkuLi4uoNA+rjbKhQ/TjVCBa8TGJioj788EOdPHlSJ0+e1Ndff60777xTJSUlys7Olo+Pjy666KLz7ufIkSPKzMxU165d3VA1PMXwSOnRiyXf8/yeC/CVnu0nXcJoBQCAG+Tm5mrmzJlNctizO3h7/4AnOHvi1bZt2zq1rZFQQZKCgoIUFBRU5/GbCqJSE+zatUt2u13du3eveXJU+/Wvf634+HilpKSodevW2r9/v55//nlZrVbdd999JlVs3LC27XV67LmvZnG+5TBudEcpoZW0NEtanSuVnXXRjGCrNLaTNClW6mT8crsAADiluLhYGzdu1B133GF2Kabw9v4BT9ChQwfNmTNHp0+fVlhYWIO3q6io0KpVq5wOFarNmDFDPj4+dT5DNgUECybYuXOnJMenQQwcOFBvvvmm/vKXv6isrEwdO3bU8OHD9eCDD6pz587uLhUeID5Ueqi3NL2nlHlcKq2QWraQEltJgfwGAAAAAJwSEBCgxMREp7ezWq16+OGH9cc//lEXXXSRU6GC1LDT6M3CxwoTnCtYmDZtmqZNm+bukuAFQlpIfZ0bqQUAAACgEYWGhuqxxx5TYGCg03MzNGUECyY4V7AAAAAAAPBcTfFUhgtFsGCCdevWmV0CAACAKdq1a6cZM2aoXbt2ZpdiCm/vH4BnIlgAAACA24SHh2vy5Mlml2Eab+8fgGficpMAAABwmxMnTmjt2rU6ceKE2aWYwtv7B+CZCBYAAADgNnl5eXrwwQeVl5dndimm8Pb+AXgmggUAAAAAAGAYwQIAAAAAADCMYAEAAAAAABhGsAAAAAC38ff3V0JCgvz9/c0uxRTe3j8Az8TlJgEAAOA2cXFxeuutt8wuwzTe3j8Az8SIBQAAAAAAYBjBAgAAANwmMzNTl156qTIzM80uxRTe3j8Az0SwAAAAALex2+06c+aM7Ha72aWYwtv7B+CZmGMBjvn7y/ruG2ZX4RwmQQIAAADQSHx9fZWWltZo+3t28VKdLClRSMuWmvWb6+vcbgy+vr6Nsh9nESzAIYvFIgUEmF0GAAAAAJjCYrHIam28j8x2SZX2qr+tVmud280Zp0IAAAAAAADDmncsAgAAgGYlNjZWS5YsUXR0tNmlmMLb+wfgmQgWAAAA4DYBAQHq2rWr2WWYxtv7B+CZOBUCAAAAbpOfn68nnnhC+fn5ZpdiCm/vH4BnIlgAAACA2xw/flzLly/X8ePHzS7FFN7ePwDPRLAAAAAAAAAMI1gAAAAAAACGESwAAAAAAADDuCoEAAAADOvXr59T68fExGjOnDkaOXKkIiMjXVSVezlzDDyxfwAgWAAAAIDbREZG6tFHHzW7DNN4e/8APBOnQgAAAAAAAMMIFgAAAAAAgGEECwAAAAAAwDCCBQAAAAAAYBjBAgAAAAAAMIxgAQAAAAAAGEawAAAAAAAADCNYAAAAAAAAhhEsAAAAAAAAwwgWAAAAAACAYQQLAAAAAADAMIIFAAAAAABgGMEC6li3bp18fX0VHx9vdikAAABAvVatWqWUlBT5+/srNjZWzz33nNkludXnn3+ucePGqXPnzrJYLHriiSfMLsmtnn32WQ0aNEhhYWFq3bq1hgwZoo8++sjsstzmrbfeUp8+fRQWFqbAwEAlJibqueeek91ud3stBAuopaCgQFOmTNEVV1xhdikAAABAvbZu3apx48YpNTVVGRkZevTRR/Xggw9q0aJFZpfmNsXFxerZs6fmzp2riIgIs8txu3Xr1mnq1Klav369tmzZosGDB2vMmDHatGmT2aW5Rfv27fXII4/oyy+/1K5du/TAAw/okUce0Ysvvuj2Wqxuf0Q0WZWVlfr1r3+te+65R2VlZdq/f7/ZJQEAAAAOPffcc+rXr5+eeuopSVJiYqJ27dqlp59+WnfddZfJ1bnH1VdfrauvvlqSdP/995tcjfutXr261u25c+fqo48+0vvvv69LL73UpKrc58orr6x1u0uXLvrggw+0YcMGzZgxw621ECygxh//+EdZLBbdf//9euyxx8wuBwAAAM3Qj4VFOn6ypM79FTZbzd/7snLr3K7mY7Goa+coWSyWcz7Opk2bdNttt9W676qrrtK8efOUm5urmJiYC23FkLLy0/oh70id+xvavyRFtGuj0OAg1xfrIjm5BSo/U1HrPkf91ncMggL9FRPRzunHrays1IkTJ9SyZUujpTeKo8dPqvDo8Tr3O/MciOsYoRbWhn9ct9vtSk9P16ZNm/Twww9fQPXGECxAkrR+/XotWrRI27dvP+8vcQAAAKA+drtdbyz7SDZbpcPlp0rL9Oq7q+q9/auBKYqPjT7v4+Tn59cZ/l99Oz8/37Rgwa+FVeu+/EbZuQUOl5+v//DWoZp+a5rL63SlI0ePadnqzx0u+2W/ju67deJVhh73ySef1LFjx3TnnXca2r6xtLD6aumKdSopLXO4/HzPgaSELurWgP8DknT8+HFFR0fr9OnTqqys1Jw5czR9+vQLa8AA5liACgsL9etf/1qvvfaaV56bBQAAgMYT0a6Nrhzaz9C2ke3DNXJIn0auyL18fHx03Zjh8vdr4fS2FovF8LZNSd+kBCXGdza07YCURCV07eT0dgsXLtSTTz6p9957z7RQqVpIyyBde9VlxrYNDtL4K4c0+MvekJAQZWRkaOvWrZo/f76ee+45/f3vfzf02BeCYAH67rvvlJeXpzFjxshqtcpqterxxx/XwYMHZbVa9X//939mlwgAAIBmZEi/JMV1jHRqG6uvr24YM1xWX98GrR8ZGamCgtqjAn788ceaZWZq0ypEYy8f7PR2vxqYos7RHVxQkXtZLBalXXWZWgYFOLVdeFioRg8f6PTjzZs3T7NmzdLy5cs1cuRIp7d3hV7dY9UnqbvT201MHaaWgQ0/bj4+PoqPj1dycrLuuusuzZ49Ww899JDTj3uhCBagfv36aefOncrIyKj5c9ddd6ljx47KyMjQ6NGjzS4RAAAAzYiPj4+uG/0rp755v3JYP3Vo16bB61966aVas2ZNrfs++ugjde7c2fRvrCWpT1J39ewW2+D1ozqE6/JLL3FdQW4W3DJQaU58a2+xWHT96OHyc3K0xv/+7//qscce06pVq5pMqFBt7OWDFdYqpMHrD7y4pxK6dLygx6ysrFRZmeNTMFyJORagli1b6qKLLqp1X/v27eXn51fnfgAAAKAhwlqF6JqRl+qfqzacd90unaJ0ad8kp/Z/3333afDgwXrooYd088036+uvv9ZLL72k559/3mDFjctisejaq4bqh8M/qvhU6TnXtfr66voxIxo8WqNacXGxDhw4IEk6ffq0CgoKlJGRoeDgYMXHxxuuvbH07BarvskJ2roj87zrDh+Yok5Ojta49957tXjxYi1ZskQJCQk1I1gCAwPVqlUrQzU3pgB/P00a/Sv97f9WyH6edduGtdLVvxrg1P7nzJmjoUOHqkuXLjpz5ow+//xzPfPMM7r11luNF22QxW63n69HeKFHH31U//jHP2p+UQEAAADOstvt+scHn2jXvux61/H3a6H7bpuk1qHBTu9/5cqVevDBB7V3715FRERoxowZ+v3vf38BFTe+3Qdy9OayNedcZ8yIQRrSz7lgRZI2bNig4cOH17l/2LBh2rBhg9P7c4Xy8tP6y2vLdPT4yXrXiY5oq9/+erx8fZ0bUF/fPARTpkzR66+/7tS+XGnV+s36fMuOepf7WCy669fj1CmqvVP7ve+++7RixQodPnxYAQEB6tKli6ZOnaq77rpLvk6GVBeKYAFOOVVapqPHTiom0vnLvwAAAMD7FJ8q1QuvvqfiEsff2l83+le65CLnz0VvTpat/lzpO/Y6XNa1c5Ruu360fDz4ymzZuQVa/PZyh9/aW62+mj7lWrVvG+b2utylosKm+W/+SwU/HXW4/PLBl2jU0L5urqpxMccCnLIxfafmv/kvrVy32exSAAAA0AwEBwVqYuowh8uSEuJ0ca9ubq7I/caMGKg2reueax/g76dJV//Ko0MFSYqNidBlA3o7XJY6bIBHhwpSVXhy/ZjhDkdkxES004jBzX9uDYIFNFhJaZm+3PadpKpfDgAAAEBD9OjaSf1796h1X0jLQI2/cmiDL6vXnPn7++m60cPr9Dpu1KWGTgFpjkYN6avI9uG17ovvHK1BfXqZVJF7RbYP1xW/uAyr1eqr6+oJHJqb5t/Bf1gslpr/qCtWrNDQoUMVGhqqtm3bauLEiTp48GDNuh9++KGGDRum1q1bKzQ0VOPGjdP+/fvr3Xd5ebn+8pe/aPDgwWrdurUCAgKUkJCgWbNmqbCw0OE2X3/9te6//37169dPERER8vf3V3R0tK677jqlp6fX+1irVq3S1Vdfrfbt26tFixYKDw9XYmKipk6dqk2bNhk8Oo3ji/SdKj99RpHtw9Wzm7Hr0gIAAMA7jR4xSOGtQ2tuO3tZveYuNiZCw8761j4poYtSepo/waK7/PJb+6rRGsM8frTG2Yb2S6r1BW3qrwaofXhr8wpqRB4zx0J1qDB//nxNmzZNUVFR6tChg/bu3avS0lJFR0dr+/btevvtt3XfffcpMjJSERERNcsjIiK0Y8cOtWtXe+6AH3/8Uampqdq+fbt8fHzUsWNHhYaGat++fSovL1enTp20fv16denSpdZ28fHxOnjwoNq0aaPIyEj5+fnphx9+0M8//yyr1ap33nlHaWlptbZZuHCh7rnnHklSeHi4OnfurNLSUh06dEjFxcX6zW9+o0WLFrnwKNavpLRMcxctUfnpM7p5whXq1T3WlDoAAADQfOXkFmjR/61Q/949NOHKoWaX43YVNpsWvPmBik+V6t6pE70qWKn2+ZYdWrV+s24YO8KrgpVqR4+f1F9efU+dotrr1uuu9phgxeOChaCgIL388su65ZZbJElHjx7VVVddpfT0dI0ZM0affvqpFi1aVLP8559/1pVXXqlt27bp/vvv19NPP12zT7vdruHDh+uzzz7T6NGjNX/+fMXGxkqqurTLjBkz9Oqrr2rQoEH68ssva9Xz5ptvavDgwbUu81JZWal///vfuuWWW2S1WnXo0CEFB1cNfaqoqFD79u1VVFSkhQsX6s4776yZydNut2vjxo36+eefNWHCBKePzUtvvK+Txee+xM35lJ8+rfLTZ+Tj46PgoMAL2hcAAAC81+kzZ9TCavWKUyAcsdkqZbdXymq1ml2KKex2u06fqZBfC+99Dpw5UyFfXx/5+DStEwhCggP1uynXGtrW44KF3/3ud3rxxRdrLfvoo4+Umppa7/LVq1fr6quvVnJysr799tua+1etWqXRo0froosuUnp6ugICaieKNptN/fv31zfffKMvvvhCl156aYNqfeSRR/TEE09oyZIluuGGGyRJBQUFioyMVFhYmI4edTxbqFFPLnhbJ4pLGnWfAAAAAADPERrcUg/eM9nQth4Xk91+++117rvkkksatPz777+vdf+yZcskVV0H9ZehgiT5+vrqmmuu0TfffKMNGzbUCRb279+vd955R99++61+/vlnnTlzRpJ05MgRSVJGRkZNsNCuXTsFBATo2LFj+uSTTzRq1KgG93w+IcEXNsKA0QoAAAAA4Nku5HOjxwULXbt2rXPf2fMmOFrevn17SVWnN5xtx44dkqTXXntNH3zwgcPH+/HHHyVJhw8frnX/n//8Zz3wwAOqqKiot9aff/655mdfX1/NmDFDzzzzjK644gpdcsklGjlypIYMGaJhw4YpNDS03v2cj9HhLNJ/51aQpMnjRjK3AgAAAACgFo87FaK+dows79atmw4cONCgx58yZYpef/11SdKmTZs0ZMgQ+fr66rHHHtO4ceMUGxurli1bymKx6NVXX9Vtt91Waxupag6GhQsXasGCBdq7d2/N/f7+/rrppps0b948tWnTpkH1nO1C5lhgtAIAAAAAeL4LmWPB40YsNKbqiRWXL1+usWPHNni7t956S5I0c+ZMPfTQQ3WWnz1S4Ww+Pj6aNm2apk2bptzcXG3cuFGffPKJ3n33Xb322ms6dOiQPvnkE6f7OFlcesFzLFRWVjJPAwAAAACgDoKFc+jVq5cyMjL03XffORUsZGVlSZKGDBnicPnmzZvPu4+YmBjdeOONuvHGGzVz5kwlJSVp7dq1ysrKUlxcXINrkYyfK8NoBQAAAADwDsyx4CITJ07U22+/rb/+9a/63e9+VzOC4XwCA6v+QQoKCuos279/vz788EOn6ujVq5datWqlY8eOKS8vz+lgwchwFuZWAAAAAAA0RNO6cGYTM27cOA0bNkzZ2dm64oor9N1339VaXllZqa+++kp33XVXrStKDB06VJL01FNP6eDBgzX379q1S2PHjnV4vdLdu3frjjvu0ObNm2vN82Cz2fTCCy/o2LFjCggIUK9evRq7TYe+SN+p8tNnFNk+XD27dXbLYwIAAAAAmh8mbzzP8sLCQo0bN05ffvmlJKlz586KiIhQaWmpDh48qJKSqnkH9uzZox49ekiSTp48qUsuuUQHDhxQixYtlJCQoMrKSu3Zs0eRkZH67W9/q4cffrjW5I0ZGRm6+OKLJUkhISHq2rWrfH19lZ2dXTMnw8KFC3X33XcbOj7OqB6tUH76jG6ecAWjFQAAAAAA9WLEwnm0bdtWn332mV5//XWNGjVKJSUl2rp1q7KyshQfH68ZM2bos88+U/fu3Wu2CQkJ0RdffKGpU6cqLCxMmZmZKi4u1m9+8xt98803io6OrvM43bt31yuvvKLrr79ekZGR+v777/Xtt98qICBAkyZN0saNG90SKkhSWflpdYpqz2gFAAAAAMB5ecyIBTS+svLTCvD3M7sMAAAAAEATRrAAAAAAAAAM41QIAAAAAABgGMECAAAAAAAwjGABAAAAAAAYRrAAAAAAAAAMI1gAAAAAAACGESwAAAAAAADDCBYAAAAAAIBhBAsAAAAAAMAwggUAAAAAAGAYwQIAAAAAADCMYAEAAAAAABhGsAAAAAAAAAwjWAAAAAAAAIYRLAAAAAAAAMMIFgAAAAAAgGEECwAAAAAAwDCCBQAAAAAAYBjBAgAAAAAAMIxgAQAAAAAAGEawAAAAAAAADCNYAAAAAAAAhhEsAAAAAAAAwwgWAAAAAACAYQQLAAAAAADAMIIFAAAAAABgGMECAAAAAAAwjGABAAAAAAAYRrAAAAAAAAAMI1gAAAAAAACGESwAAAAAAADDCBYAAAAAAIBhBAsAAAAAAMAwggUAAAAAAGAYwQIAAAAAADCMYAEAAAAAABhGsAAAAAAAAAwjWAAAAAAAAIYRLAAAAAAAAMMIFgAAAAAAgGH/H5b780dCTmIEAAAAAElFTkSuQmCC\n"
     },
     "metadata": {}
    }
   ],
   "source": "# 02 - Discrete Log (Sadeleştirilmiş 4-qubit QFT benzeri devre)\nqc = QuantumCircuit(4, name=\"DiscreteLog-demo\")\nqc.h(range(4))\nfor i in range(3):\n    qc.cp(np.pi / (2**(i+1)), 3-i, 0)\nqc.h(0)\nqc.barrier()\nqc.measure_all()\n\nprint(\"Ayrık Logaritma - QFT tabanlı örnek devre:\")\ndisplay(qc.draw(\"mpl\", style=\"iqp\"))"
  },
  {
   "cell_type": "markdown",
   "id": "861ef926",
   "metadata": {
    "id": "861ef926"
   },
   "source": "## 03. Pell Denklemi\n\n**Hız Artışı:** Süperpolinom\n\n**Gerçek Dünya Kullanım Senaryosu:**  \nBuchmann-Williams kriptosistemini kırar. Sayı alanları ve Diophantine denklemleri araştırmalarında kullanılır.\n\n**Nasıl Çalışır?**  \n$x^2 - d y^2 = 1$ denkleminin çözümü gizli alt grup problemine indirgenir. Hallgren algoritması polinom zamanda çözüm üretir.\n"
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "f9a49543",
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 339
    },
    "id": "f9a49543",
    "outputId": "a9dcf760-017a-499c-d6fa-a7f06fff2fea"
   },
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "Pell Denklemi - Gizli alt grup benzeri örnek:\n"
     ]
    },
    {
     "output_type": "display_data",
     "data": {
      "text/plain": [
       "<Figure size 914.831x367.889 with 1 Axes>"
      ],
      "image/png": "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aa8ec+6/dmnqhG4ym/kc7IiCMumTzKp/OWf9yKyS7vlOGh8rDY2UmPobAFxTUFCgf/7zn9q4cWON5bGxserXr5/i4uIUGxur4OBgWa1WFRQUKCMjQwcOHND333+vvLw8SVVncWbNmqXk5GQlJibq1VdfrRGm77///lo92EYjUHtYfn6+xowZo7y8PE2bNk0zZ85USEjV/MJz5szRjBkz5OvrK5PJpO7duxtcLerrbwt3ef2YGTmFWrYuS6MHd/D6sRurrCJpygbplyL767fkV/0bGS39pafky2cVAHBKfn6+nnnmGeXk5NiW9erVS+PGjVN8fLzdG5a1atVKrVq1Uu/evXX99ddrx44dWrRokfbt2ydJWr58uZYvX27bvqGGaYkhHx43ZcoUZWVlafLkyXrxxRdtYVqSpk+frh49eqi8vFyxsbEKDQ01sFLU18GsAn2XdsSQY7+/5GdDjtsYHS+V7v++7jB9ti+zpGd+lKyMA4EXBAUFqV+/fgoKcmzoF9BQnThxQrNnz7aF6ZCQEE2ZMkUPPfSQLrroonrd/dfHx0c9evTQU089pdtuu61WaL7ssssabJiWCNQetXv3bi1cuFCtWrXSs88+a3ebXr16SZJ69OhhW/bxxx8rJSVFMTExCgoKUpcuXfT444+rsLDQK3Xj3DbtMG7Kns0/Nczpghqid/dL2Q6Myln8i7TDM7MfAjV06NBBc+fOVYcOnG1C41dZWamXX37ZNlwjIiJC//M//6MBAwbUK0j/lo+PjyIiImot9/X1bbBhWiJQe9SCBQtUWVmpCRMmqFmzZna3CQwMlFQzUL/44osym8165plntGzZMt177736+9//ruTkZFVWVnqldtRty858w46dkVOooydKDDt+Y1FSLi055Hi7jzLcXgpQS0VFhQoLC21jQoHGbNmyZdq7d68kKTw8XE888YTatGnj9P5+ewFidYhet26dtm7d6nrBHkKg9qBVq1ZJkoYMGVLnNllZWZJqBuolS5boww8/1IQJEzR48GBNnTpVr732mtavX69169Z5tmic184DJww9/i6Dj98YrD0snXLiDvArc6TicvfXA5xt//79uvLKK7V/v2PTbgINTV5env79739LkkwmkyZPnnzeuaTPxd5sHnfeeadt/T/+8Q+dPu3dCQHqi4sSPSgzM1OSFBMTY3d9eXm51q+vmnrt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XSooKNDatWt19dVXe/abdw5n904PG9iLMA0AcFj/Xt0UHxPl1M07moIWoc00dvhASVLyFX0vqDAtnXXTn2ZBatc2XEMHNp3e+SbXQ/3AAw/o1VdfrbFu+fLlGjFiRJ3rly1bppEjR6p79+764YcfbMu//PJLjRo1ShdffLE2b94si8VSo11FRYX69u2rbdu2ad26dRo4cGC9an3yySc1e/ZsLViwQDfddJMkKS8vT5GRkQoLC9OxY8cce/LnMXfeJzpVWOzSPkrLylRadkY+Pj4OTWkDAMDZKisrVVFRKT8/X6NLMYTValXZmXL5+/lesJ1T5eXlMpl8ZDY3rA9UIc0C9cDE65xq2+RezXfddVetZZdeemm91h88eLDG8kWLFkmqms/wt2Faksxms6655hpt27ZNa9asqRWo9+/fr3//+9/64YcfdPToUZ05c0aSdOTIEUlSWlqaLVC3bt1aFotFJ06c0Ndff63hw4fX+zmfz6nCYhUUFrllX5WVlW7bFwDgwlVcWmp0CYYqLSszugS4UZML1J06daq17Oxx0fbWt2nTRpJqDMGQpB9//FGS9O677+qzzz6ze7zDhw9LkrKzs2ss/+tf/6pHHnlE5eXlddZ69OhR29dms1lTp07V888/r6uuukqXXnqphg0bpssvv1yDBw9WaKhjty89W0gz13qU6Z0GAABNnSt5qckF6uDg4FrLzj6lcr71Zztx4oQkadeuXec97unTp21fr1+/Xg899JDMZrNmz56tsWPHKjY2VsHBwTKZTHrnnXd055132nqsqz3zzDOKjo7W3/72N23btk3btm3TnDlzFBAQoFtuuUUvvviiWrZ0fLyVs6cvpKqx03PeWCBJmjB2mLolxDq9LwAAgKaoyQVqd2rWrJkkafHixRozZky9282fP1+SNG3aND3++OO11p/dM302Hx8fTZ48WZMnT1ZWVpZSU1P19ddf68MPP9S7776rQ4cO6euvv3b4ebgyhvrs3unPv16vz782duo+AAAAT2AMtYd069ZNaWlp+umnnxwK1OnpVdPBXH755XbXb9hw/puiREdH6+abb9bNN9+sadOmKSkpSStXrlR6erri4uLqXYvknjHUjJ0GAACwj0B9DuPHj9cHH3ygt956Sw888ICtx/p8AgOrxuDk5eXVWrd//34tXbrUoTq6deum5s2b68SJE8rJyXE4UDs7Joix0wAA4ELBGGoPGTt2rAYPHqy1a9fqqquu0ltvvaWLL77Ytr6yslIbN27UvHnzNH36dNvNXQYNGqTPP/9czz77rK688krbhZA7d+5USkqK3Xk3d+3apZdffll33nmn+vXrZxvXXVFRoblz5+rEiROyWCzq1q2bw8/DmdMXjJ0GAAConyY3D3VdT8fZ9fn5+Ro7dqy++67qzk4xMTGKiIhQcXGxDhw4oKKiqmEQu3fvVpcuXSRJp06d0qWXXqqff/5Zfn5+6ty5syorK7V7925FRkbqvvvu0xNPPKGJEyfqvffek1Q1hd4ll1wiSQoJCVGnTp1kNpuVkZFhG3P9+uuv695773Xq++Mo7ooIAABQPw1rRu0GqFWrVlq7dq3ee+89DR8+XEVFRdqyZYvS09MVHx+vqVOnau3atUpISLC1CQkJ0bp16zRp0iSFhYVp7969tluHb9u2TVFRUbWOk5CQoLfffls33nijIiMjdfDgQf3www+yWCy6/vrrlZqa6rUwzV0RAQAA6q/J9FDDfY6eKNBnK1JVeLqE3mkAAIDzIFCjTiWlZbIE+BtdBgAAQINGoAYAAABcwBhqAAAAwAUEagAAAMAFBGoAAADABQRqAAAAwAUEagAAAMAFBGoAAADABQRqAAAAwAUEagAAAMAFBGoAAADABQRqAAAAwAUEagAAAMAFBGoAAADABQRqAAAAwAUEagAAAMAFBGoAAADABQRqAAAAwAUEagAAAMAFBGoAAADABQRqAAAAwAUEagAAAMAFBGoAAADABQRqAAAAwAUEagAAAMAFBGoAAADABQRqAAAAwAUEagAAAMAFBGoAAADABQRqAAAAwAUEagAAAMAFBGoAAADABQRqAAAAwAUEagAAAMAFBGoAAADABQRqAAAAwAUEagAAAMAFBGoAAADABQRqAAAAwAUEagAAAMAFBGoAAADABf8f3iOUF2e43WcAAAAASUVORK5CYII=\n"
     },
     "metadata": {}
    }
   ],
   "source": "# 03 - Pell Equation (İllustratif faz tahmin devresi)\nqc = QuantumCircuit(3, name=\"Pell-demo\")\nqc.h([0, 1])\nqc.cx(0, 2)\nqc.cp(np.pi/3, 1, 2)\nqc.h([0, 1])\nqc.measure_all()\n\nprint(\"Pell Denklemi - Gizli alt grup benzeri örnek:\")\ndisplay(qc.draw(\"mpl\", style=\"iqp\"))"
  },
  {
   "cell_type": "markdown",
   "id": "110ca869",
   "metadata": {
    "id": "110ca869"
   },
   "source": "## 04. Asallar Birim Grubu & Sınıf Grubu\n\n**Hız Artışı:** Süperpolinom\n\n**Gerçek Dünya Kullanım Senaryosu:**  \nSayı alanlarının cebirsel yapılarını keşfetmek, kriptografik protokoller ve aritmetik geometri.\n\n**Nasıl Çalışır?**  \nSabit dereceli sayı alanları için Hallgren; keyfi derece için Biasse-Song algoritmaları. Kuantum Fourier analizi kullanılır.\n"
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "d6c81706",
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 339
    },
    "id": "d6c81706",
    "outputId": "56914d52-9378-40e9-d0a6-42a668f59c32"
   },
   "outputs": [
    {
     "output_type": "display_data",
     "data": {
      "text/plain": [
       "<Figure size 872.774x367.889 with 1 Axes>"
      ],
      "image/png": "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\n"
     },
     "metadata": {}
    },
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "Birim/Sınıf Grubu - Fourier tabanlı örnek\n"
     ]
    }
   ],
   "source": "# 04 - Unit/Class Group (QFT benzeri 4-qubit)\nqc = QuantumCircuit(4, name=\"UnitClassGroup-demo\")\nqc.h(range(4))\nqc.barrier()\nfor i in range(3):\n    qc.cp(np.pi/2**(i+1), i, 3)\nqc.h(range(3))\ndisplay(qc.draw(\"mpl\", style=\"iqp\"))\nprint(\"Birim/Sınıf Grubu - Fourier tabanlı örnek\")"
  },
  {
   "cell_type": "markdown",
   "id": "0d466f4e",
   "metadata": {
    "id": "0d466f4e"
   },
   "source": "## 05. Gauss Toplamları\n\n**Hız Artışı:** Süperpolinom\n\n**Gerçek Dünya Kullanım Senaryosu:**  \nSonlu cisimler üzerinde toplam tahmini, ayrık logaritma indirgemesi, istatistiksel mekanik (Potts modeli).\n\n**Nasıl Çalışır?**  \nVan Dam & Seroussi algoritması polinom hassasiyetle Gauss toplamlarını tahmin eder.\n"
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "ecb8a021",
   "metadata": {
    "id": "ecb8a021"
   },
   "outputs": [],
   "source": "# 05 - Gauss Sums (Faz döndürme örnek devresi)\nqc = QuantumCircuit(3, name=\"GaussSums-demo\")\nqc.h([0, 1, 2])\nqc.p(np.pi/4, 0)\nqc.p(np.pi/2, 1)\nqc.p(3*np.pi/4, 2)\nqc.h([0, 1, 2])\nqc.measure_all()\n\nprint(\"Gauss Toplamları - Faz tahmin örneği:\")\ndisplay(qc.draw(\"mpl\", style=\"iqp\"))"
  },
  {
   "cell_type": "markdown",
   "id": "69ee507e",
   "metadata": {
    "id": "69ee507e"
   },
   "source": "## 06. Asallık Kanıtlama\n\n**Hız Artışı:** Polinom\n\n**Gerçek Dünya Kullanım Senaryosu:**  \nKriptografik anahtar üretimi, sayı teorisi doğrulamaları. Klasik AKS/ECPP'ye alternatif.\n\n**Nasıl Çalışır?**  \nDonis-Vela & Garcia-Escartin algoritması $O(n^2 (\\log n)^3 \\log\\log n)$ karmaşıklığında asallık kanıtı üretir.\n"
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "bcbf5df5",
   "metadata": {
    "id": "bcbf5df5"
   },
   "outputs": [],
   "source": "# 06 - Primality (Basit 2-qubit doğrulama tarzı devre)\nqc = QuantumCircuit(2, 2, name=\"Primality-demo\")\nqc.h(0)\nqc.cx(0, 1)\nqc.h(0)\nqc.measure([0, 1], [0, 1])\n\nprint(\"Asallık Kanıtlama - Basit doğrulama devresi:\")\ndisplay(qc.draw(\"mpl\", style=\"iqp\"))\n\n# Simülasyon\nsim = AerSimulator()\njob = sim.run(transpile(qc, sim), shots=512)\ncounts = job.result().get_counts()\nprint(\"Ölçüm sonuçları:\", counts)\ndisplay(plot_histogram(counts, title=\"Asallık Kanıtlama - Ölçüm\"))\n"
  },
  {
   "cell_type": "markdown",
   "id": "0dd9619a",
   "metadata": {
    "id": "0dd9619a"
   },
   "source": "## 07. Grup Gösterim Matris Elemanları\n\n**Hız Artışı:** Süperpolinom\n\n**Gerçek Dünya Kullanım Senaryosu:**  \nSonlu grup temsilleri, kuantum Fourier dönüşümü uygulamaları, temsil teorisi.\n\n**Nasıl Çalışır?**  \nKuantum Fourier dönüşümü ve Schur dönüşümü kullanılarak indirgenemez temsillerin matris elemanları yaklaşık bulunur.\n"
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "05c890d3",
   "metadata": {
    "id": "05c890d3"
   },
   "outputs": [],
   "source": "# 07 - Group Representation (Schur/QFT tarzı)\nqc = QuantumCircuit(3, name=\"GroupRep-demo\")\nqc.h([0, 1])\nqc.cx(0, 2)\nqc.cx(1, 2)\nqc.h([0, 1])\ndisplay(qc.draw(\"mpl\", style=\"iqp\"))\nprint(\"Grup Gösterim - Temel Fourier/Schur örneği\")"
  },
  {
   "cell_type": "markdown",
   "id": "ec8175ea",
   "metadata": {
    "id": "ec8175ea"
   },
   "source": "## 08. Arama / Grover Algoritması\n\n**Hız Artışı:** Polinom ($O(\\sqrt{N})$ sorgu)\n\n**Gerçek Dünya Kullanım Senaryosu:**  \nVeritabanı arama, NP-tam problemlerde kuadratik hızlanma, 3-SAT, global minimum bulma, integral yaklaşımı.\n\n**Nasıl Çalışır?**  \nOracle ile hedef durumu işaretler, genlik yükseltme (diffusion) operatörü ile olasılığı artırır. Optimal $O(\\sqrt{N})$ sorguda bulur.\n"
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "b65639f3",
   "metadata": {
    "id": "b65639f3"
   },
   "outputs": [],
   "source": "# 08 - Grover (2-qubit, |11> hedefi)\nn = 2\nqc = QuantumCircuit(n, n, name=\"Grover\")\nqc.h(range(n))                    # Süperpozisyon\n\n# Oracle: |11> işaretle\nqc.cz(0, 1)\n\n# Diffusion\nqc.h(range(n))\nqc.x(range(n))\nqc.cz(0, 1)\nqc.x(range(n))\nqc.h(range(n))\n\nqc.measure(range(n), range(n))\n\nprint(\"Grover Algoritması (2-qubit, hedef |11>):\")\ndisplay(qc.draw(\"mpl\", style=\"iqp\"))\n\n# Simülasyon\nsim = AerSimulator()\njob = sim.run(transpile(qc, sim), shots=1024)\ncounts = job.result().get_counts()\nprint(\"Sonuçlar:\", counts)\ndisplay(plot_histogram(counts, title=\"Grover - |11> arama\"))\n"
  },
  {
   "cell_type": "markdown",
   "id": "a7f43cd9",
   "metadata": {
    "id": "a7f43cd9"
   },
   "source": "## 09. Abel Gizli Alt Grup (Abelian HSP)\n\n**Hız Artışı:** Süperpolinom\n\n**Gerçek Dünya Kullanım Senaryosu:**  \nSimon ve Shor algoritmalarının genellemesi. Gizli periyot/alt grup tespiti, kriptanaliz.\n\n**Nasıl Çalışır?**  \n$f(g_1)=f(g_2) \\iff g_1,g_2$ aynı eşek sınıfında ise $H$ alt grubunu $O(\\log|G|)$ kuantum sorgusu ile bulur.\n"
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "32eee700",
   "metadata": {
    "id": "32eee700"
   },
   "outputs": [],
   "source": "# 09 - Abelian HSP (Simon tarzı basit örnek)\nqc = QuantumCircuit(4, 2, name=\"AbelianHSP-demo\")\nqc.h([0, 1])\n# Oracle simülasyonu (örnek CX)\nqc.cx(0, 2)\nqc.cx(1, 3)\nqc.h([0, 1])\nqc.measure([0, 1], [0, 1])\n\nprint(\"Abel Gizli Alt Grup - Simon benzeri örnek:\")\ndisplay(qc.draw(\"mpl\", style=\"iqp\"))"
  },
  {
   "cell_type": "markdown",
   "id": "b3e08ede",
   "metadata": {
    "id": "b3e08ede"
   },
   "source": "## 10. Abel Olmayan Gizli Alt Grup (Non-Abelian HSP)\n\n**Hız Artışı:** Süperpolinom (sorgu), ancak bazı gruplarda zaman üstel olabilir\n\n**Gerçek Dünya Kullanım Senaryosu:**  \nDihedral grup, simetrik grup gibi özel non-Abel gruplarda verimli algoritmalar. Graf izomorfizmi ile bağlantılı.\n\n**Nasıl Çalışır?**  \nSorgu karmaşıklığı $O(\\log|G|)$ fakat durum işleme maliyeti gruba bağlıdır.\n"
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "7e71d875",
   "metadata": {
    "id": "7e71d875"
   },
   "outputs": [],
   "source": "# 10 - Non-Abelian HSP (İllustratif 3-qubit)\nqc = QuantumCircuit(3, name=\"NonAbelianHSP-demo\")\nqc.h(range(3))\nqc.cx(0, 1)\nqc.cz(1, 2)\nqc.h(range(3))\ndisplay(qc.draw(\"mpl\", style=\"iqp\"))\nprint(\"Non-Abelian HSP - Örnek devre\")"
  },
  {
   "cell_type": "markdown",
   "id": "eb9f4d90",
   "metadata": {
    "id": "eb9f4d90"
   },
   "source": "## 11. Kuantum Yürüyüşü (Quantum Walk)\n\n**Hız Artışı:** Polinom\n\n**Gerçek Dünya Kullanım Senaryosu:**  \nEleman ayrıklığı, üçgen bulma, grafik izomorfizm, matris çarpımı doğrulama.\n\n**Nasıl Çalışır?**  \nKlasik rastgele yürüyüşün kuantum süperpozisyonlu karşılığı. Aynı anda birden fazla yolu keşfeder.\n"
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "9243a6bf",
   "metadata": {
    "id": "9243a6bf"
   },
   "outputs": [],
   "source": "# 11 - Quantum Walk (Basit 1D yürüyüş coin+shift)\nqc = QuantumCircuit(3, name=\"QWalk-demo\")  # coin + 2 position\nqc.h(0)                 # Coin\nqc.cx(0, 1)             # Shift (basit)\nqc.x(0)\nqc.cx(0, 2)\nqc.h(0)\ndisplay(qc.draw(\"mpl\", style=\"iqp\"))\nprint(\"Kuantum Yürüyüşü - Coin + Shift örneği\")"
  },
  {
   "cell_type": "markdown",
   "id": "ab84819f",
   "metadata": {
    "id": "ab84819f"
   },
   "source": "## 12. Kaplama Problemi (Collision & Element Distinctness)\n\n**Hız Artışı:** Polinom ($O(n^{2/3})$ distinctness, $O(n^{1/3})$ collision)\n\n**Gerçek Dünya Kullanım Senaryosu:**  \nHash çarpışması bulma, graf özellikleri, veri tekrarı tespiti.\n\n**Nasıl Çalışır?**  \nKuantum yürüyüşü tabanlı arama ile klasik $\\Omega(\\sqrt{n})$ sınırını aşar.\n"
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "effcc565",
   "metadata": {
    "id": "effcc565"
   },
   "outputs": [],
   "source": "# 12 - Collision / Distinctness (Grover tarzı arama örneği)\nqc = QuantumCircuit(3, 3, name=\"Collision-demo\")\nqc.h(range(3))\nqc.cz(0, 1)             # Basit oracle benzeri\nqc.h(range(3))\nqc.measure_all()\n\nprint(\"Kaplama / Distinctness - Arama örneği:\")\ndisplay(qc.draw(\"mpl\", style=\"iqp\"))"
  },
  {
   "cell_type": "markdown",
   "id": "7bd4198a",
   "metadata": {
    "id": "7bd4198a"
   },
   "source": "## 13. Özellik Testi (Property Testing)\n\n**Hız Artışı:** Polinom (çoğu problemde kuadratik)\n\n**Gerçek Dünya Kullanım Senaryosu:**  \nFonksiyon özelliklerinin (doğrusallık, monotonluk vb.) hızlı testi, büyük veri doğrulama.\n\n**Nasıl Çalışır?**  \nAz sayıda sorgu ile fonksiyonun belirli bir özelliği sağlayıp sağlamadığını yüksek olasılıkla test eder.\n"
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "6d7a1e6f",
   "metadata": {
    "id": "6d7a1e6f"
   },
   "outputs": [],
   "source": "# 13 - Property Testing (Basit doğruluk testi devresi)\nqc = QuantumCircuit(2, 2, name=\"PropTest-demo\")\nqc.h(0)\nqc.cx(0, 1)\nqc.h(0)\nqc.measure([0, 1], [0, 1])\n\nprint(\"Özellik Testi - Basit örnek:\")\ndisplay(qc.draw(\"mpl\", style=\"iqp\"))"
  },
  {
   "cell_type": "markdown",
   "id": "f625b483",
   "metadata": {
    "id": "f625b483"
   },
   "source": "## 14. Kuantum Simülasyonu\n\n**Hız Artışı:** Süperpolinom\n\n**Gerçek Dünya Kullanım Senaryosu:**  \nİlaç keşfi, malzeme bilimi, kimya, moleküler dinamik. Feynman'ın 1982 öngörüsü.\n\n**Nasıl Çalışır?**  \nHamiltonian'ın $e^{-iHt}$ zaman evrimini Trotter-Suzuki veya daha gelişmiş yöntemlerle yaklaşık olarak uygular.\n"
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "ca3c6aa3",
   "metadata": {
    "id": "ca3c6aa3"
   },
   "outputs": [],
   "source": "# 14 - Quantum Simulation (Basit Trotter adımı)\nqc = QuantumCircuit(2, name=\"QSim-demo\")\n# e^{-i Z⊗Z t} yaklaşık\nqc.cx(0, 1)\nqc.rz(0.5, 1)\nqc.cx(0, 1)\n# e^{-i X⊗X t}\nqc.h([0, 1])\nqc.cx(0, 1)\nqc.rz(0.3, 1)\nqc.cx(0, 1)\nqc.h([0, 1])\n\nprint(\"Kuantum Simülasyonu - Trotter adımı (XX+ZZ):\")\ndisplay(qc.draw(\"mpl\", style=\"iqp\"))"
  },
  {
   "cell_type": "markdown",
   "id": "c15e1e92",
   "metadata": {
    "id": "c15e1e92"
   },
   "source": "## 15. Varyasyonel Kuantum Öz Çözümleyici (VQE)\n\n**Hız Artışı:** Değişken (NISQ hibrit)\n\n**Gerçek Dünya Kullanım Senaryosu:**  \nMoleküler temel hal enerjisi, kimya hesaplamaları, malzeme bilimi. NISQ cihazlarında çalışır.\n\n**Nasıl Çalışır?**  \nParametreli ansatz devresi + klasik optimizör ile Hamiltonian beklenti değerini minimize eder.\n"
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "7b77233f",
   "metadata": {
    "id": "7b77233f"
   },
   "outputs": [],
   "source": "# 15 - VQE (Basit 2-qubit ansatz)\ntheta = np.pi / 3\nqc = QuantumCircuit(2, name=\"VQE-ansatz\")\nqc.ry(theta, 0)\nqc.ry(theta, 1)\nqc.cx(0, 1)\nqc.ry(theta, 0)\nqc.ry(theta, 1)\n\nprint(\"VQE - Basit parametreli ansatz:\")\ndisplay(qc.draw(\"mpl\", style=\"iqp\"))"
  },
  {
   "cell_type": "markdown",
   "id": "93b895b9",
   "metadata": {
    "id": "93b895b9"
   },
   "source": "## 16. Kuantum Faz Tahmini (QPE)\n\n**Hız Artışı:** Süperpolinom\n\n**Gerçek Dünya Kullanım Senaryosu:**  \nShor'un bileşeni, kimya simülasyonunda özdeğer hesabı, Hamiltonian spektrumu.\n\n**Nasıl Çalışır?**  \nKontrollü $U^{2^k}$ kapıları + ters QFT ile üniter operatörün fazını (özdeğerini) tahmin eder.\n"
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "dfe3ad96",
   "metadata": {
    "id": "dfe3ad96"
   },
   "outputs": [],
   "source": "# 16 - QPE (2 sayaç + 1 sistem qubit, basit U=Z)\nqc = QuantumCircuit(3, 2, name=\"QPE-demo\")\n# Sayaç qubitleri\nqc.h([0, 1])\n# Kontrollü U (Z kapısı örneği)\nqc.cz(1, 2)           # U^1\nqc.cz(0, 2)           # U^2 (basitleştirilmiş)\n# Ters QFT (2-qubit)\nqc.h(0)\nqc.cp(-np.pi/2, 0, 1)\nqc.h(1)\nqc.swap(0, 1)\nqc.measure([0, 1], [0, 1])\n\nprint(\"Kuantum Faz Tahmini (QPE) örneği:\")\ndisplay(qc.draw(\"mpl\", style=\"iqp\"))"
  },
  {
   "cell_type": "markdown",
   "id": "598114f5",
   "metadata": {
    "id": "598114f5"
   },
   "source": "## 17. Knot Değişmezleri (Jones Polinomu)\n\n**Hız Artışı:** Değişken\n\n**Gerçek Dünya Kullanım Senaryosu:**  \nTopolojik kuantum hesaplama, anyonik sistemler, #P-zor topolojik değişmezler.\n\n**Nasıl Çalışır?**  \nJones polinomu ve ilgili topolojik büyüklükler kuantum algoritmalarla yaklaşık hesaplanır.\n"
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "8c560515",
   "metadata": {
    "id": "8c560515"
   },
   "outputs": [],
   "source": "# 17 - Jones / Knot (Basit örgü benzeri devre)\nqc = QuantumCircuit(3, name=\"Jones-demo\")\nqc.h(range(3))\nqc.cx(0, 1)\nqc.cx(1, 2)\nqc.cx(0, 2)\nqc.h(range(3))\ndisplay(qc.draw(\"mpl\", style=\"iqp\"))\nprint(\"Jones Polinomu - Örgü/anyon benzeri örnek\")"
  },
  {
   "cell_type": "markdown",
   "id": "816882dc",
   "metadata": {
    "id": "816882dc"
   },
   "source": "## 18. Bölüntü Fonksiyonu Hesaplama\n\n**Hız Artışı:** Değişken\n\n**Gerçek Dünya Kullanım Senaryosu:**  \nİstatistiksel mekanik (Potts, Ising), Tutte polinomu, faz geçişleri.\n\n**Nasıl Çalışır?**  \nBelirli parametre rejimlerinde kuantum algoritmalar klasikten daha hızlı yaklaşık değer üretir.\n"
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "3f583ae2",
   "metadata": {
    "id": "3f583ae2"
   },
   "outputs": [],
   "source": "# 18 - Partition Function (Ising tarzı etkileşim)\nqc = QuantumCircuit(3, name=\"Partition-demo\")\nqc.h(range(3))\nqc.cz(0, 1)\nqc.cz(1, 2)\nqc.rz(0.4, 0)\nqc.rz(0.4, 1)\nqc.rz(0.4, 2)\ndisplay(qc.draw(\"mpl\", style=\"iqp\"))\nprint(\"Bölüntü Fonksiyonu - Ising benzeri örnek\")"
  },
  {
   "cell_type": "markdown",
   "id": "763f53ab",
   "metadata": {
    "id": "763f53ab"
   },
   "source": "## 19. Scatter Genlikleri (Scattering Amplitudes)\n\n**Hız Artışı:** Değişken\n\n**Gerçek Dünya Kullanım Senaryosu:**  \nKuantum alan teorisi, parçacık fiziği, saçılma süreçleri.\n\n**Nasıl Çalışır?**  \nBazı rejimlerde üstel hız artışı önerilmiştir; aktif araştırma alanıdır.\n"
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "281db039",
   "metadata": {
    "id": "281db039"
   },
   "outputs": [],
   "source": "# 19 - Scattering (Basit 2-parçacık etkileşim)\nqc = QuantumCircuit(2, name=\"Scattering-demo\")\nqc.h([0, 1])\nqc.cx(0, 1)\nqc.rz(np.pi/5, 1)\nqc.cx(0, 1)\nqc.h([0, 1])\ndisplay(qc.draw(\"mpl\", style=\"iqp\"))\nprint(\"Scatter Genlikleri - Etkileşim örneği\")"
  },
  {
   "cell_type": "markdown",
   "id": "1c768b47",
   "metadata": {
    "id": "1c768b47"
   },
   "source": "## 20. Kuantum Yaklaşık Optimizasyon (QAOA)\n\n**Hız Artışı:** Değişken (NISQ)\n\n**Gerçek Dünya Kullanım Senaryosu:**  \nMax-Cut, TSP, portföy optimizasyonu, lojistik. NISQ cihazlarında çalışır.\n\n**Nasıl Çalışır?**  \nMaliyet Hamiltonian + karıştırıcı Hamiltonian alternasyonlu uygulanır; parametreler klasik olarak optimize edilir.\n"
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "cb67c122",
   "metadata": {
    "id": "cb67c122"
   },
   "outputs": [],
   "source": "# 20 - QAOA (p=1, 3-qubit MaxCut tarzı)\ngamma, beta = 0.8, 0.4\nqc = QuantumCircuit(3, name=\"QAOA-demo\")\nqc.h(range(3))\n# Cost layer (ZZ)\nqc.cx(0, 1)\nqc.rz(2*gamma, 1)\nqc.cx(0, 1)\nqc.cx(1, 2)\nqc.rz(2*gamma, 2)\nqc.cx(1, 2)\n# Mixer layer (X)\nqc.rx(2*beta, range(3))\n\nprint(\"QAOA (p=1) MaxCut tarzı örnek:\")\ndisplay(qc.draw(\"mpl\", style=\"iqp\"))"
  },
  {
   "cell_type": "markdown",
   "id": "b783de65",
   "metadata": {
    "id": "b783de65"
   },
   "source": "## 21. Adiabatik Kuantum Hesaplama\n\n**Hız Artışı:** Değişken\n\n**Gerçek Dünya Kullanım Senaryosu:**  \nD-Wave sistemleri, NP-tam optimizasyon problemleri, QUBO çözümleri.\n\n**Nasıl Çalışır?**  \nSistemi kolay Hamiltonian'dan zor Hamiltonian'a yavaşça evrilterek zemin haline ulaşır (adiabatik teorem).\n"
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "7d6a7954",
   "metadata": {
    "id": "7d6a7954"
   },
   "outputs": [],
   "source": "# 21 - Adiabatic (Basit interpolasyon adımı)\ns = 0.5  # interpolasyon parametresi\nqc = QuantumCircuit(2, name=\"Adiabatic-demo\")\nqc.h([0, 1])              # Başlangıç (kolay)\nqc.rz(s * 0.7, 0)         # Problem terimi\nqc.rz(s * 0.7, 1)\nqc.cx(0, 1)\nqc.rz(s * 0.5, 1)\nqc.cx(0, 1)\ndisplay(qc.draw(\"mpl\", style=\"iqp\"))\nprint(\"Adiabatik Hesaplama - Interpolasyon adımı\")"
  },
  {
   "cell_type": "markdown",
   "id": "432d0224",
   "metadata": {
    "id": "432d0224"
   },
   "source": "## 22. Lineer Programlama (İç Nokta Yöntemi)\n\n**Hız Artışı:** Polinom (bazı rejimlerde karesel)\n\n**Gerçek Dünya Kullanım Senaryosu:**  \nOptimizasyon, lojistik, kaynak tahsisi. Klasik iç nokta yöntemlerini hızlandırma.\n\n**Nasıl Çalışır?**  \nKuantum lineer sistem çözücüleri (HHL benzeri) ile Newton adımları hızlandırılır.\n"
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "1ec7a669",
   "metadata": {
    "id": "1ec7a669"
   },
   "outputs": [],
   "source": "# 22 - Linear Programming (HHL tarzı basit devre)\nqc = QuantumCircuit(3, name=\"LP-demo\")\nqc.h([0, 1])\nqc.cx(0, 2)\nqc.cry(0.5, 1, 2)\nqc.h([0, 1])\ndisplay(qc.draw(\"mpl\", style=\"iqp\"))\nprint(\"Lineer Programlama - Hızlandırma örneği\")"
  },
  {
   "cell_type": "markdown",
   "id": "4455d43f",
   "metadata": {
    "id": "4455d43f"
   },
   "source": "## 23. Tam Sayılı Programlama & QUBO\n\n**Hız Artışı:** Değişken\n\n**Gerçek Dünya Kullanım Senaryosu:**  \nKuantum annealing, ikili optimizasyon, portföy seçimi, çizelgeleme.\n\n**Nasıl Çalışır?**  \nQUBO formu $x^T Q x$ kuantum annealing veya QAOA ile çözülür.\n"
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "e6716b77",
   "metadata": {
    "id": "e6716b77"
   },
   "outputs": [],
   "source": "# 23 - QUBO (2-qubit Ising/QUBO)\nqc = QuantumCircuit(2, name=\"QUBO-demo\")\nqc.h([0, 1])\nqc.rz(0.6, 0)\nqc.rz(0.4, 1)\nqc.cx(0, 1)\nqc.rz(0.3, 1)\nqc.cx(0, 1)\ndisplay(qc.draw(\"mpl\", style=\"iqp\"))\nprint(\"QUBO / Tam Sayılı Programlama örneği\")"
  },
  {
   "cell_type": "markdown",
   "id": "f0f8dfc8",
   "metadata": {
    "id": "f0f8dfc8"
   },
   "source": "## 24. Konveks Optimizasyon\n\n**Hız Artışı:** Polinom\n\n**Gerçek Dünya Kullanım Senaryosu:**  \nSVM eğitimi, yarı-tanımlı programlama, ikinci dereceden konik programlar.\n\n**Nasıl Çalışır?**  \nKonveks kümeler üzerinde kuantum hızlandırmalı iç nokta veya gradyan yöntemleri.\n"
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "916523ce",
   "metadata": {
    "id": "916523ce"
   },
   "outputs": [],
   "source": "# 24 - Convex Opt (Basit parametreli devre)\nqc = QuantumCircuit(2, name=\"Convex-demo\")\nqc.ry(0.7, 0)\nqc.ry(0.5, 1)\nqc.cx(0, 1)\nqc.ry(0.3, 1)\ndisplay(qc.draw(\"mpl\", style=\"iqp\"))\nprint(\"Konveks Optimizasyon - Parametreli örnek\")"
  },
  {
   "cell_type": "markdown",
   "id": "174925b2",
   "metadata": {
    "id": "174925b2"
   },
   "source": "## 25. HHL Doğrusal Denklem Çözücüsü\n\n**Hız Artışı:** Süperpolinom (logaritmik)\n\n**Gerçek Dünya Kullanım Senaryosu:**  \nBüyük seyrek doğrusal sistemler, makine öğrenmesi, finans modelleri. Okuma/ölçüm sorunu vardır.\n\n**Nasıl Çalışır?**  \n$Ax=b$ sistemini faz tahmini + kontrollü rotasyon ile çözer. Sonuç kuantum durumda kalır.\n"
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "c072aff5",
   "metadata": {
    "id": "c072aff5"
   },
   "outputs": [],
   "source": "# 25 - HHL (Sadeleştirilmiş 3-qubit iskelet)\nqc = QuantumCircuit(3, name=\"HHL-demo\")\n# |b> yükleme (basit)\nqc.h(2)\n# Faz tahmini (sayaç)\nqc.h([0, 1])\nqc.cx(1, 2)\nqc.cx(0, 2)\n# Kontrollü rotasyon (1/λ)\nqc.cry(0.8, 0, 2)\nqc.cry(0.4, 1, 2)\n# Ters faz tahmini (basit)\nqc.cx(0, 2)\nqc.cx(1, 2)\nqc.h([0, 1])\n\nprint(\"HHL - Sadeleştirilmiş iskelet:\")\ndisplay(qc.draw(\"mpl\", style=\"iqp\"))"
  },
  {
   "cell_type": "markdown",
   "id": "c0877118",
   "metadata": {
    "id": "c0877118"
   },
   "source": "## 26. Kuantum Temel Bileşen Analizi (qPCA)\n\n**Hız Artışı:** Polinom (giriş varsayımlarına bağlı üstel iddialar)\n\n**Gerçek Dünya Kullanım Senaryosu:**  \nBoyut azaltma, veri sıkıştırma, özellik çıkarımı.\n\n**Nasıl Çalışır?**  \nKovaryans matrisinin büyük özdeğer/özvektörlerini kuantum faz tahmini ile bulur.\n"
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "5c44a5eb",
   "metadata": {
    "id": "5c44a5eb"
   },
   "outputs": [],
   "source": "# 26 - qPCA (Faz tahmini tarzı)\nqc = QuantumCircuit(3, name=\"qPCA-demo\")\nqc.h([0, 1])\nqc.cx(0, 2)\nqc.cx(1, 2)\nqc.h([0, 1])\ndisplay(qc.draw(\"mpl\", style=\"iqp\"))\nprint(\"qPCA - Özdeğer tahmin örneği\")"
  },
  {
   "cell_type": "markdown",
   "id": "d1ec980f",
   "metadata": {
    "id": "d1ec980f"
   },
   "source": "## 27. Kuantum Destek Vektör Makinesi (qSVM)\n\n**Hız Artışı:** Polinom\n\n**Gerçek Dünya Kullanım Senaryosu:**  \nSınıflandırma, çekirdek yöntemleri. NISQ döneminde pratik avantaj tartışmalıdır.\n\n**Nasıl Çalışır?**  \nKlasik SVM çekirdek matrisini kuantum iç çarpım tahmini ile hızlandırır (Rebentrost et al.).\n"
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "891a5ad5",
   "metadata": {
    "id": "891a5ad5"
   },
   "outputs": [],
   "source": "# 27 - qSVM (Swap test tarzı iç çarpım)\nqc = QuantumCircuit(3, 1, name=\"qSVM-demo\")\nqc.h(0)                 # Ancilla\nqc.h([1, 2])            # Veri\nqc.cswap(0, 1, 2)       # Kontrollü swap\nqc.h(0)\nqc.measure(0, 0)\n\nprint(\"qSVM - Swap test (iç çarpım) örneği:\")\ndisplay(qc.draw(\"mpl\", style=\"iqp\"))"
  },
  {
   "cell_type": "markdown",
   "id": "688ddeb5",
   "metadata": {
    "id": "688ddeb5"
   },
   "source": "## 28. Kuantum Sinir Ağları (QNN)\n\n**Hız Artışı:** Değişken\n\n**Gerçek Dünya Kullanım Senaryosu:**  \nParametreli kuantum modeller, hibrit öğrenme. Barren plateau sorunu araştırılmaktadır.\n\n**Nasıl Çalışır?**  \nVaryasyonel kuantum devreleri eğitilebilir katman olarak kullanılır.\n"
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "4adff8d7",
   "metadata": {
    "id": "4adff8d7"
   },
   "outputs": [],
   "source": "# 28 - QNN (2-katmanlı basit ansatz)\nqc = QuantumCircuit(2, name=\"QNN-demo\")\n# Katman 1\nqc.ry(0.5, 0)\nqc.ry(0.3, 1)\nqc.cx(0, 1)\n# Katman 2\nqc.ry(0.7, 0)\nqc.ry(0.2, 1)\nqc.cx(1, 0)\n\nprint(\"QNN - Basit 2-katmanlı ansatz:\")\ndisplay(qc.draw(\"mpl\", style=\"iqp\"))"
  },
  {
   "cell_type": "markdown",
   "id": "ce66dd0d",
   "metadata": {
    "id": "ce66dd0d"
   },
   "source": "## 29. Kuantum Boyut Azaltma\n\n**Hız Artışı:** Polinom\n\n**Gerçek Dünya Kullanım Senaryosu:**  \nÖzellik seçimi, kümeleme, büyük veri ön işleme.\n\n**Nasıl Çalışır?**  \nLogaritmik sorgularla veri boyutunu azaltır; qPCA ile yakından ilişkilidir.\n"
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "a4400ada",
   "metadata": {
    "id": "a4400ada"
   },
   "outputs": [],
   "source": "# 29 - Dimensionality Reduction (Basit projeksiyon)\nqc = QuantumCircuit(3, name=\"DimRed-demo\")\nqc.h([0, 1])\nqc.cx(0, 2)\nqc.cry(0.6, 1, 2)\nqc.h([0, 1])\ndisplay(qc.draw(\"mpl\", style=\"iqp\"))\nprint(\"Kuantum Boyut Azaltma örneği\")"
  },
  {
   "cell_type": "markdown",
   "id": "96a0be2b",
   "metadata": {
    "id": "96a0be2b"
   },
   "source": "## 30. Matris Çarpımı Doğrulama\n\n**Hız Artışı:** Polinom ($O(n^{5/3})$)\n\n**Gerçek Dünya Kullanım Senaryosu:**  \nBüyük matris hesaplamaları, doğruluk kontrolü, veri bilimi.\n\n**Nasıl Çalışır?**  \nSzegedy kuantum yürüyüşü tabanlı tekniklerle $AB=C$ kontrolü yapılır.\n"
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "106f5d84",
   "metadata": {
    "id": "106f5d84"
   },
   "outputs": [],
   "source": "# 30 - Matrix Multiplication Verification (Yürüyüş tarzı)\nqc = QuantumCircuit(4, name=\"MatMulVer-demo\")\nqc.h(range(4))\nqc.cx(0, 2)\nqc.cx(1, 3)\nqc.cz(2, 3)\nqc.h(range(2))\ndisplay(qc.draw(\"mpl\", style=\"iqp\"))\nprint(\"Matris Çarpımı Doğrulama örneği\")"
  },
  {
   "cell_type": "markdown",
   "id": "7a122f73",
   "metadata": {
    "id": "7a122f73"
   },
   "source": "## 31. Üçgen Bulma\n\n**Hız Artışı:** Polinom ($O(n^{5/4})$)\n\n**Gerçek Dünya Kullanım Senaryosu:**  \nSosyal ağ analizi, graf madenciliği, 3-döngü tespiti.\n\n**Nasıl Çalışır?**  \nKuantum yürüyüşü ile graf üzerinde üçgen arar; klasik $O(n^{3/2})$ sınırını iyileştirir.\n"
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "4d0b56b9",
   "metadata": {
    "id": "4d0b56b9"
   },
   "outputs": [],
   "source": "# 31 - Triangle Finding (3-qubit graf örneği)\nqc = QuantumCircuit(3, name=\"Triangle-demo\")\nqc.h(range(3))\nqc.cx(0, 1)\nqc.cx(1, 2)\nqc.cx(0, 2)\nqc.h(range(3))\ndisplay(qc.draw(\"mpl\", style=\"iqp\"))\nprint(\"Üçgen Bulma - Graf yürüyüş örneği\")"
  },
  {
   "cell_type": "markdown",
   "id": "26310aad",
   "metadata": {
    "id": "26310aad"
   },
   "source": "## 32. Bağlanabilirlik & Yol Problemi\n\n**Hız Artışı:** Polinom\n\n**Gerçek Dünya Kullanım Senaryosu:**  \nAğ analizi, minimum kapsayan ağaç, yol bulma. Dürr et al. $O(n^{3/2})$ algoritması.\n\n**Nasıl Çalışır?**  \nKuantum arama / yürüyüş teknikleri ile graf bağlanabilirliği ve MST bulunur.\n"
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "c5ff7fc2",
   "metadata": {
    "id": "c5ff7fc2"
   },
   "outputs": [],
   "source": "# 32 - Connectivity (Basit 3-düğüm)\nqc = QuantumCircuit(3, name=\"Connectivity-demo\")\nqc.h(range(3))\nqc.cx(0, 1)\nqc.cx(1, 2)\nqc.barrier()\nqc.h(range(3))\ndisplay(qc.draw(\"mpl\", style=\"iqp\"))\nprint(\"Bağlanabilirlik / Yol Problemi örneği\")"
  },
  {
   "cell_type": "markdown",
   "id": "fd4e78ed",
   "metadata": {
    "id": "fd4e78ed"
   },
   "source": "## 33. Ağ Akışı\n\n**Hız Artışı:** Polinom\n\n**Gerçek Dünya Kullanım Senaryosu:**  \nMaksimum akış, minimum kesim, lojistik ağ optimizasyonu.\n\n**Nasıl Çalışır?**  \nKuantum yürüyüş tekniklerine dayalı hız artışları araştırılmaktadır.\n"
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "a4dcb8b6",
   "metadata": {
    "id": "a4dcb8b6"
   },
   "outputs": [],
   "source": "# 33 - Network Flow (Basit akış benzeri)\nqc = QuantumCircuit(4, name=\"NetFlow-demo\")\nqc.h([0, 1])\nqc.cx(0, 2)\nqc.cx(1, 3)\nqc.cz(2, 3)\nqc.h([0, 1])\ndisplay(qc.draw(\"mpl\", style=\"iqp\"))\nprint(\"Ağ Akışı örneği\")"
  },
  {
   "cell_type": "markdown",
   "id": "90ea5c38",
   "metadata": {
    "id": "90ea5c38"
   },
   "source": "## 34. Seyrek Doğrusal Sistemler\n\n**Hız Artışı:** Süperpolinom\n\n**Gerçek Dünya Kullanım Senaryosu:**  \nHHL'nin temeli; seyrek, iyi koşullanmış sistemler. Bilimsel hesaplama, ML.\n\n**Nasıl Çalışır?**  \nHHL algoritması ile logaritmik karmaşıklıkta çözüm önerilir (okuma sorununa dikkat).\n"
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "30fab658",
   "metadata": {
    "id": "30fab658"
   },
   "outputs": [],
   "source": "# 34 - Sparse Linear Systems (HHL iskeleti tekrar)\nqc = QuantumCircuit(4, name=\"SparseLinSys-demo\")\nqc.h([0, 1, 2])\nqc.cx(0, 3)\nqc.cx(1, 3)\nqc.cry(0.5, 2, 3)\nqc.h([0, 1, 2])\ndisplay(qc.draw(\"mpl\", style=\"iqp\"))\nprint(\"Seyrek Doğrusal Sistemler - HHL tarzı örnek\")"
  },
  {
   "cell_type": "markdown",
   "id": "cbfde5ad",
   "metadata": {
    "id": "cbfde5ad"
   },
   "source": "---\n\n## Kapanış Notları\n\n- Bu notebook **eğitim amaçlıdır**. Birçok algoritmanın tam, hatasız implementasyonu akademik makalelere ve büyük kütüphanelere (Qiskit Nature, Pennylane, Classiq vb.) bırakılmıştır.\n- Gerçek donanımda çalıştırmak için IBM Quantum, BlueQubit veya benzeri platformları kullanın.\n- Kaynak: [quantumalgorithmzoo.org](https://quantumalgorithmzoo.org) — Stephen Jordan\n\n**Kurulum (gerekirse tekrar):**\n```python\n!pip install qiskit qiskit-aer pylatexenc matplotlib --quiet\n```\n"
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "name": "python3"
  },
  "language_info": {
   "name": "python",
   "version": "3.10.0"
  },
  "colab": {
   "provenance": []
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}