diff --git a/docs/00-introduction.ipynb b/docs/00-introduction.ipynb
index f75774ebb2c65721cfca4679079c782639dc0f71..9c68cd0c90b9790098f3510fee64222a8e52252a 100644
--- a/docs/00-introduction.ipynb
+++ b/docs/00-introduction.ipynb
@@ -51,7 +51,7 @@
     }
    ],
    "source": [
-    "!pip install -qU semantic-router==0.0.29"
+    "!pip install -qU semantic-router==0.0.35"
    ]
   },
   {
@@ -63,18 +63,9 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 2,
+   "execution_count": 3,
    "metadata": {},
-   "outputs": [
-    {
-     "name": "stderr",
-     "output_type": "stream",
-     "text": [
-      "c:\\Users\\Siraj\\Documents\\Personal\\Work\\Aurelio\\Virtual Environments\\semantic_layer\\Lib\\site-packages\\tqdm\\auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n",
-      "  from .autonotebook import tqdm as notebook_tqdm\n"
-     ]
-    }
-   ],
+   "outputs": [],
    "source": [
     "from semantic_router import Route\n",
     "\n",
@@ -100,7 +91,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 3,
+   "execution_count": 4,
    "metadata": {},
    "outputs": [],
    "source": [
@@ -127,7 +118,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 4,
+   "execution_count": 5,
    "metadata": {},
    "outputs": [],
    "source": [
@@ -155,14 +146,14 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 5,
+   "execution_count": 7,
    "metadata": {},
    "outputs": [
     {
      "name": "stderr",
      "output_type": "stream",
      "text": [
-      "\u001b[32m2024-04-02 22:45:21 INFO semantic_router.utils.logger Initializing RouteLayer\u001b[0m\n"
+      "\u001b[32m2024-04-19 18:34:06 INFO semantic_router.utils.logger local\u001b[0m\n"
      ]
     }
    ],
@@ -181,16 +172,16 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 6,
+   "execution_count": 8,
    "metadata": {},
    "outputs": [
     {
      "data": {
       "text/plain": [
-       "RouteChoice(name='politics', function_call=None, similarity_score=None, trigger=None)"
+       "RouteChoice(name='politics', function_call=None, similarity_score=None)"
       ]
      },
-     "execution_count": 6,
+     "execution_count": 8,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -201,16 +192,16 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 7,
+   "execution_count": 9,
    "metadata": {},
    "outputs": [
     {
      "data": {
       "text/plain": [
-       "RouteChoice(name='chitchat', function_call=None, similarity_score=None, trigger=None)"
+       "RouteChoice(name='chitchat', function_call=None, similarity_score=None)"
       ]
      },
-     "execution_count": 7,
+     "execution_count": 9,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -228,16 +219,16 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 8,
+   "execution_count": 10,
    "metadata": {},
    "outputs": [
     {
      "data": {
       "text/plain": [
-       "RouteChoice(name=None, function_call=None, similarity_score=None, trigger=None)"
+       "RouteChoice(name=None, function_call=None, similarity_score=None)"
       ]
      },
-     "execution_count": 8,
+     "execution_count": 10,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -255,17 +246,17 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 9,
+   "execution_count": 11,
    "metadata": {},
    "outputs": [
     {
      "data": {
       "text/plain": [
-       "[RouteChoice(name='politics', function_call=None, similarity_score=0.8596186767854479, trigger=None),\n",
-       " RouteChoice(name='chitchat', function_call=None, similarity_score=0.8356239688161818, trigger=None)]"
+       "[RouteChoice(name='politics', function_call=None, similarity_score=0.8596186767854487),\n",
+       " RouteChoice(name='chitchat', function_call=None, similarity_score=0.8356239688161808)]"
       ]
      },
-     "execution_count": 9,
+     "execution_count": 11,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -273,6 +264,33 @@
    "source": [
     "rl.retrieve_multiple_routes(\"Hi! How are you doing in politics??\")"
    ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 12,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "[]"
+      ]
+     },
+     "execution_count": 12,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "rl.retrieve_multiple_routes(\"I'm interested in learning about llama 2\")"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": []
   }
  ],
  "metadata": {
@@ -291,7 +309,7 @@
    "name": "python",
    "nbconvert_exporter": "python",
    "pygments_lexer": "ipython3",
-   "version": "3.11.4"
+   "version": "3.12.2"
   }
  },
  "nbformat": 4,
diff --git a/docs/01-save-load-from-file.ipynb b/docs/01-save-load-from-file.ipynb
index 025dce49f588bccf4d2212af7cf21d5afcabe1b7..d0afb0ef89f50224b03c7590c63d5fcda34a6e85 100644
--- a/docs/01-save-load-from-file.ipynb
+++ b/docs/01-save-load-from-file.ipynb
@@ -36,7 +36,7 @@
    "metadata": {},
    "outputs": [],
    "source": [
-    "!pip install -qU semantic-router==0.0.29"
+    "!pip install -qU semantic-router==0.0.34"
    ]
   },
   {
diff --git a/docs/02-dynamic-routes.ipynb b/docs/02-dynamic-routes.ipynb
index 7581798499e1aba0c412d1f65bbae23f9217c190..23eea22806489c3f489fd8f00fadb9a275868eb9 100644
--- a/docs/02-dynamic-routes.ipynb
+++ b/docs/02-dynamic-routes.ipynb
@@ -48,7 +48,7 @@
       },
       "outputs": [],
       "source": [
-        "!pip install -qU semantic-router==0.0.29"
+        "!pip install -qU semantic-router==0.0.34"
       ]
     },
     {
diff --git a/docs/05-local-execution.ipynb b/docs/05-local-execution.ipynb
index 8acd2a9b28657418e67b0c071303f66aac5a7b1d..e9100573673ffdbaf13f78af361fb76bdac19d35 100644
--- a/docs/05-local-execution.ipynb
+++ b/docs/05-local-execution.ipynb
@@ -41,7 +41,7 @@
    "metadata": {},
    "outputs": [],
    "source": [
-    "!pip install -qU \"semantic-router[local]==0.0.29\""
+    "!pip install -qU \"semantic-router[local]==0.0.34\""
    ]
   },
   {
diff --git a/docs/06-threshold-optimization.ipynb b/docs/06-threshold-optimization.ipynb
index b833ca74da0615b1d1aca0318948eeb79c90539f..059122127c72c75370668f5b72b5ccab636b9928 100644
--- a/docs/06-threshold-optimization.ipynb
+++ b/docs/06-threshold-optimization.ipynb
@@ -29,7 +29,7 @@
    "metadata": {},
    "outputs": [],
    "source": [
-    "!pip install -qU \"semantic-router[local]==0.0.29\""
+    "!pip install -qU \"semantic-router[local]==0.0.34\""
    ]
   },
   {
diff --git a/docs/07-multi-modal.ipynb b/docs/07-multi-modal.ipynb
index 26263fdebe5d389974496976a97417a9876045c3..15befb4c90fbcb7610ea14a01c388e66056beb42 100644
--- a/docs/07-multi-modal.ipynb
+++ b/docs/07-multi-modal.ipynb
@@ -100,7 +100,7 @@
    ],
    "source": [
     "!pip install -qU \\\n",
-    "    \"semantic-router[vision]==0.0.29\" \\\n",
+    "    \"semantic-router[vision]==0.0.34\" \\\n",
     "    datasets==2.17.0"
    ]
   },
diff --git a/docs/09-route-filter.ipynb b/docs/09-route-filter.ipynb
index ad2ccda6db5da2207940916d7e183b02e78d85c1..22c3af20fcd79f2abddd63c337f6717c891cc1a3 100644
--- a/docs/09-route-filter.ipynb
+++ b/docs/09-route-filter.ipynb
@@ -4,7 +4,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/aurelio-labs/semantic-router/blob/main/docs/00-introduction.ipynb) [![Open nbviewer](https://raw.githubusercontent.com/pinecone-io/examples/master/assets/nbviewer-shield.svg)](https://nbviewer.org/github/aurelio-labs/semantic-router/blob/main/docs/00-introduction.ipynb)"
+    "[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/aurelio-labs/semantic-router/blob/main/docs/09-route-filter.ipynb) [![Open nbviewer](https://raw.githubusercontent.com/pinecone-io/examples/master/assets/nbviewer-shield.svg)](https://nbviewer.org/github/aurelio-labs/semantic-router/blob/main/docs/00-introduction.ipynb)"
    ]
   },
   {
@@ -41,7 +41,7 @@
    "metadata": {},
    "outputs": [],
    "source": [
-    "!pip install -qU semantic-router==0.0.29"
+    "!pip install -qU semantic-router==0.0.34"
    ]
   },
   {
diff --git a/docs/encoders/google.ipynb b/docs/encoders/google.ipynb
new file mode 100644
index 0000000000000000000000000000000000000000..5aabdd132765e2376c6eac6a89d5af7911bc1ff8
--- /dev/null
+++ b/docs/encoders/google.ipynb
@@ -0,0 +1,211 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/aurelio-labs/semantic-router/blob/main/docs/encoders/google.ipynb) [![Open nbviewer](https://raw.githubusercontent.com/pinecone-io/examples/master/assets/nbviewer-shield.svg)](https://nbviewer.org/github/aurelio-labs/semantic-router/blob/main/docs/encoders/google.ipynb)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# Using GoogleEncoder"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Google's [Pathways Language Model](https://blog.research.google/2022/04/pathways-language-model-palm-scaling-to.html) (PaLM) is a dense decoder-only model that is trained on a large corpus of text data. The hidden states of the model can be used as embeddings for text data, and Google has released versions of those layers for public use. This notebook demonstrates how to use the GoogleEncoder with the Semantic Router."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## Getting Started"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "We start by installing semantic-router. Support for the new `GoogleEncoder` class was added in `semantic-router==0.0.31`."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "!pip install -qU \"semantic-router[google]==0.0.34\""
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "We start by defining a dictionary mapping routes to example phrases that should trigger those routes."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "from semantic_router import Route\n",
+    "\n",
+    "politics = Route(\n",
+    "    name=\"politics\",\n",
+    "    utterances=[\n",
+    "        \"isn't politics the best thing ever\",\n",
+    "        \"why don't you tell me about your political opinions\",\n",
+    "        \"don't you just love the president\",\n",
+    "        \"don't you just hate the president\",\n",
+    "        \"they're going to destroy this country!\",\n",
+    "        \"they will save the country!\",\n",
+    "    ],\n",
+    ")"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Let's define another for good measure:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "chitchat = Route(\n",
+    "    name=\"chitchat\",\n",
+    "    utterances=[\n",
+    "        \"how's the weather today?\",\n",
+    "        \"how are things going?\",\n",
+    "        \"lovely weather today\",\n",
+    "        \"the weather is horrendous\",\n",
+    "        \"let's go to the chippy\",\n",
+    "    ],\n",
+    ")\n",
+    "\n",
+    "routes = [politics, chitchat]"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Now we initialize our embedding model. To do this with GoogleEncoder, you'll need to have an active Google Cloud Platform account and a project with the Embeddings API enabled. You can find more information on how to set up a development project in the [Google Cloud documentation](https://cloud.google.com/vertex-ai/generative-ai/docs/start/quickstarts/quickstart-text-embeddings)."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "from semantic_router.encoders import GoogleEncoder\n",
+    "\n",
+    "PROJECT_ID = \"your-project-id\"\n",
+    "LOCATION = \"us-central1\"\n",
+    "\n",
+    "encoder = GoogleEncoder(project_id=PROJECT_ID, location=LOCATION)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Now we define the `RouteLayer`. When called, the route layer will consume text (a query) and output the category (`Route`) it belongs to — to initialize a `RouteLayer` we need our `encoder` model and a list of `routes`."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "from semantic_router.layer import RouteLayer\n",
+    "\n",
+    "rl = RouteLayer(encoder=encoder, routes=routes)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Now we can test it:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "rl(\"don't you love politics?\")"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "rl(\"how's the weather today?\")"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Both are classified accurately, what if we send a query that is unrelated to our existing `Route` objects?"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "rl(\"I'm interested in learning about llama 2\")"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "In this case, we return `None` because no matches were identified."
+   ]
+  }
+ ],
+ "metadata": {
+  "kernelspec": {
+   "display_name": "decision-layer",
+   "language": "python",
+   "name": "python3"
+  },
+  "language_info": {
+   "codemirror_mode": {
+    "name": "ipython",
+    "version": 3
+   },
+   "file_extension": ".py",
+   "mimetype": "text/x-python",
+   "name": "python",
+   "nbconvert_exporter": "python",
+   "pygments_lexer": "ipython3",
+   "version": "3.11.8"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/docs/encoders/huggingface-endpoint.ipynb b/docs/encoders/huggingface-endpoint.ipynb
new file mode 100644
index 0000000000000000000000000000000000000000..c5714142e5b204f7c88740aeccebe92db1cdf042
--- /dev/null
+++ b/docs/encoders/huggingface-endpoint.ipynb
@@ -0,0 +1,3354 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/aurelio-labs/semantic-router/blob/main/docs/encoders/huggingface-endpoint.ipynb) [![Open nbviewer](https://raw.githubusercontent.com/pinecone-io/examples/master/assets/nbviewer-shield.svg)](https://nbviewer.org/github/aurelio-labs/semantic-router/blob/main/docs/encoders/huggingface-endpoint.ipynb)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# Using Huggingface endpoint"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "HuggingFace is a huge ecosystem of open source models. It can be run locally and supports the largest library of encoders."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## Getting Started"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "We start by installing semantic-router."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 1,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "# !pip install -qU semantic-router==0.0.20"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "We start by defining a dictionary mapping routes to example phrases that should trigger those routes."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "d:\\Program_Installation\\anaconda\\envs\\testenv\\Lib\\site-packages\\tqdm\\auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n",
+      "  from .autonotebook import tqdm as notebook_tqdm\n"
+     ]
+    }
+   ],
+   "source": [
+    "from semantic_router import Route\n",
+    "\n",
+    "politics = Route(\n",
+    "    name=\"politics\",\n",
+    "    utterances=[\n",
+    "        \"isn't politics the best thing ever\",\n",
+    "        \"why don't you tell me about your political opinions\",\n",
+    "        \"don't you just love the president\",\n",
+    "        \"don't you just hate the president\",\n",
+    "        \"they're going to destroy this country!\",\n",
+    "        \"they will save the country!\",\n",
+    "    ],\n",
+    ")"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Let's define another for good measure:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 3,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "chitchat = Route(\n",
+    "    name=\"chitchat\",\n",
+    "    utterances=[\n",
+    "        \"how's the weather today?\",\n",
+    "        \"how are things going?\",\n",
+    "        \"lovely weather today\",\n",
+    "        \"the weather is horrendous\",\n",
+    "        \"let's go to the chippy\",\n",
+    "    ],\n",
+    ")\n",
+    "\n",
+    "routes = [politics, chitchat]"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Now we initialize our embedding model, we will use the Huggingface endpoint"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "d:\\Program_Installation\\anaconda\\envs\\testenv\\Lib\\site-packages\\tqdm\\auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n",
+      "  from .autonotebook import tqdm as notebook_tqdm\n",
+      "\u001b[32m2024-04-14 20:54:07 INFO semantic_router.utils.logger Model Initializing wait for - 26.81s \u001b[0m\n"
+     ]
+    }
+   ],
+   "source": [
+    "import os\n",
+    "from getpass import getpass\n",
+    "from semantic_router.encoders.huggingface import HFEndpointEncoder\n",
+    "\n",
+    "huggingface_url = os.getenv(\"HF_API_URL\") or getpass(\"Enter HuggingFace API URL: \")\n",
+    "huggingface_api_key = os.getenv(\"HF_API_KEY\") or getpass(\"Enter HuggingFace API Key: \")\n",
+    "\n",
+    "encoder = HFEndpointEncoder(\n",
+    "    huggingface_url=huggingface_url,\n",
+    "    huggingface_api_key=huggingface_api_key,\n",
+    ")"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 3,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "[[-0.351535439491272,\n",
+       "  -0.0007503691595047712,\n",
+       "  0.22843779623508453,\n",
+       "  0.1197630763053894,\n",
+       "  -0.9190473556518555,\n",
+       "  0.4975742697715759,\n",
+       "  0.08101634681224823,\n",
+       "  0.05379204452037811,\n",
+       "  0.1970519870519638,\n",
+       "  -0.0833292305469513,\n",
+       "  0.36685681343078613,\n",
+       "  0.004698676988482475,\n",
+       "  -0.19794942438602448,\n",
+       "  -0.33827024698257446,\n",
+       "  -0.24040493369102478,\n",
+       "  0.3189111649990082,\n",
+       "  -0.5002703666687012,\n",
+       "  -0.6781224012374878,\n",
+       "  -0.2871842384338379,\n",
+       "  0.0505770742893219,\n",
+       "  -0.03144306689500809,\n",
+       "  0.15773507952690125,\n",
+       "  -1.278083324432373,\n",
+       "  -0.2693241238594055,\n",
+       "  -0.11886045336723328,\n",
+       "  0.3414249122142792,\n",
+       "  0.5203899145126343,\n",
+       "  0.6207894682884216,\n",
+       "  0.6428499817848206,\n",
+       "  0.8519144058227539,\n",
+       "  -0.08569950610399246,\n",
+       "  0.32095733284950256,\n",
+       "  0.38129955530166626,\n",
+       "  -0.5376394391059875,\n",
+       "  -0.23925058543682098,\n",
+       "  -0.975605309009552,\n",
+       "  0.14065563678741455,\n",
+       "  0.08411094546318054,\n",
+       "  0.5871137976646423,\n",
+       "  -0.5853262543678284,\n",
+       "  -0.16012267768383026,\n",
+       "  -0.30777785181999207,\n",
+       "  0.32361841201782227,\n",
+       "  -0.5167716145515442,\n",
+       "  -0.6283416152000427,\n",
+       "  -0.040950220078229904,\n",
+       "  0.4034270942211151,\n",
+       "  -0.5306437015533447,\n",
+       "  0.1296883225440979,\n",
+       "  -0.8245601654052734,\n",
+       "  -0.24195696413516998,\n",
+       "  -0.5704426169395447,\n",
+       "  0.3505809009075165,\n",
+       "  -0.033617936074733734,\n",
+       "  0.338241308927536,\n",
+       "  0.05172817409038544,\n",
+       "  0.1608736217021942,\n",
+       "  0.06910604983568192,\n",
+       "  -0.6235120892524719,\n",
+       "  0.8605656623840332,\n",
+       "  0.18825599551200867,\n",
+       "  0.26032543182373047,\n",
+       "  0.4893842935562134,\n",
+       "  -0.28306061029434204,\n",
+       "  -0.01022877637296915,\n",
+       "  0.2018183022737503,\n",
+       "  0.0314965546131134,\n",
+       "  -0.40636199712753296,\n",
+       "  0.2871060371398926,\n",
+       "  -0.5569078326225281,\n",
+       "  0.12462319433689117,\n",
+       "  0.24766811728477478,\n",
+       "  -0.6712727546691895,\n",
+       "  -0.34486064314842224,\n",
+       "  -0.2843998074531555,\n",
+       "  0.2237756997346878,\n",
+       "  -0.10615847259759903,\n",
+       "  -0.4099731743335724,\n",
+       "  -0.4892323613166809,\n",
+       "  0.7918497323989868,\n",
+       "  0.121148020029068,\n",
+       "  0.8321442008018494,\n",
+       "  0.3077283203601837,\n",
+       "  0.174817755818367,\n",
+       "  -0.673957109451294,\n",
+       "  -0.10718388855457306,\n",
+       "  -0.020176205784082413,\n",
+       "  0.44770675897598267,\n",
+       "  0.14065337181091309,\n",
+       "  0.011919533833861351,\n",
+       "  -0.09472586214542389,\n",
+       "  0.42185404896736145,\n",
+       "  -0.08556605130434036,\n",
+       "  -0.003908890299499035,\n",
+       "  0.4729606807231903,\n",
+       "  1.0341724157333374,\n",
+       "  -0.4871886670589447,\n",
+       "  0.7629178762435913,\n",
+       "  -0.7858189344406128,\n",
+       "  0.7404838800430298,\n",
+       "  -0.09609171003103256,\n",
+       "  0.33085229992866516,\n",
+       "  -0.07759019732475281,\n",
+       "  0.608190655708313,\n",
+       "  -0.7358576655387878,\n",
+       "  -0.46256259083747864,\n",
+       "  0.17247380316257477,\n",
+       "  0.47123825550079346,\n",
+       "  -0.07190967351198196,\n",
+       "  -0.3706129789352417,\n",
+       "  0.6815729141235352,\n",
+       "  0.10979508608579636,\n",
+       "  0.01968960091471672,\n",
+       "  0.3837202191352844,\n",
+       "  -0.37777477502822876,\n",
+       "  0.296452134847641,\n",
+       "  -0.47000813484191895,\n",
+       "  0.6567757725715637,\n",
+       "  -0.4787653982639313,\n",
+       "  0.10389051586389542,\n",
+       "  -0.13098134100437164,\n",
+       "  0.06771161407232285,\n",
+       "  0.9172448515892029,\n",
+       "  0.7513774037361145,\n",
+       "  -0.3587314188480377,\n",
+       "  -0.07944370806217194,\n",
+       "  -0.3190295696258545,\n",
+       "  0.35680150985717773,\n",
+       "  -0.7315585017204285,\n",
+       "  -0.2934412658214569,\n",
+       "  -0.29015278816223145,\n",
+       "  -0.6571040153503418,\n",
+       "  0.3849678337574005,\n",
+       "  0.37416988611221313,\n",
+       "  0.07331178337335587,\n",
+       "  0.22313304245471954,\n",
+       "  -0.0582025870680809,\n",
+       "  0.48670142889022827,\n",
+       "  0.5369858145713806,\n",
+       "  -0.7363126277923584,\n",
+       "  0.408779501914978,\n",
+       "  0.08013352751731873,\n",
+       "  0.32343122363090515,\n",
+       "  1.1921049356460571,\n",
+       "  -0.33595478534698486,\n",
+       "  0.7817761898040771,\n",
+       "  0.09240103513002396,\n",
+       "  0.747512936592102,\n",
+       "  -0.975735068321228,\n",
+       "  -0.46965065598487854,\n",
+       "  -0.5060147047042847,\n",
+       "  0.315020889043808,\n",
+       "  -0.8111321330070496,\n",
+       "  0.1700848788022995,\n",
+       "  -0.44967469573020935,\n",
+       "  0.2730434238910675,\n",
+       "  -0.28182634711265564,\n",
+       "  -0.11358585953712463,\n",
+       "  0.3349793255329132,\n",
+       "  0.6125620603561401,\n",
+       "  -1.1185657978057861,\n",
+       "  -0.23598258197307587,\n",
+       "  0.11817905306816101,\n",
+       "  0.14007949829101562,\n",
+       "  -0.1342378556728363,\n",
+       "  0.6637296080589294,\n",
+       "  -0.34339287877082825,\n",
+       "  0.37832096219062805,\n",
+       "  -0.20260536670684814,\n",
+       "  -0.42285487055778503,\n",
+       "  0.3214675784111023,\n",
+       "  0.3772791922092438,\n",
+       "  0.13906392455101013,\n",
+       "  -0.15471051633358002,\n",
+       "  0.1717817336320877,\n",
+       "  0.6878579258918762,\n",
+       "  0.4495076835155487,\n",
+       "  0.42458420991897583,\n",
+       "  0.6390083432197571,\n",
+       "  -0.18033525347709656,\n",
+       "  0.26399803161621094,\n",
+       "  -0.2000855803489685,\n",
+       "  0.1517951339483261,\n",
+       "  0.5062836408615112,\n",
+       "  0.16540852189064026,\n",
+       "  -0.5752784013748169,\n",
+       "  0.3921325206756592,\n",
+       "  0.3396417498588562,\n",
+       "  -0.5016378164291382,\n",
+       "  -0.1977510303258896,\n",
+       "  -0.37614500522613525,\n",
+       "  -0.0459459163248539,\n",
+       "  -0.8561480641365051,\n",
+       "  0.41308894753456116,\n",
+       "  -0.2559718191623688,\n",
+       "  0.33978575468063354,\n",
+       "  -1.0577623844146729,\n",
+       "  -0.4702085852622986,\n",
+       "  -0.15038155019283295,\n",
+       "  -0.417285680770874,\n",
+       "  -0.10158014297485352,\n",
+       "  1.085134506225586,\n",
+       "  -0.5067138075828552,\n",
+       "  0.3239610493183136,\n",
+       "  0.5427021384239197,\n",
+       "  -0.4705069065093994,\n",
+       "  0.564260721206665,\n",
+       "  0.662142813205719,\n",
+       "  -0.674139142036438,\n",
+       "  -0.05586134269833565,\n",
+       "  0.41527360677719116,\n",
+       "  0.3268394470214844,\n",
+       "  -0.15188544988632202,\n",
+       "  0.2864024043083191,\n",
+       "  -0.058077551424503326,\n",
+       "  0.7025948762893677,\n",
+       "  -0.2740480601787567,\n",
+       "  0.4234461784362793,\n",
+       "  -0.8005895018577576,\n",
+       "  0.3397463858127594,\n",
+       "  0.5496795773506165,\n",
+       "  0.10069300979375839,\n",
+       "  0.6318082213401794,\n",
+       "  1.220789909362793,\n",
+       "  0.12347802519798279,\n",
+       "  0.2145691066980362,\n",
+       "  0.5473058819770813,\n",
+       "  0.58868008852005,\n",
+       "  0.5263211131095886,\n",
+       "  -0.39429542422294617,\n",
+       "  -0.12528102099895477,\n",
+       "  0.21609920263290405,\n",
+       "  -0.3399151563644409,\n",
+       "  0.6400638818740845,\n",
+       "  -0.385766863822937,\n",
+       "  -0.0837368443608284,\n",
+       "  0.19966909289360046,\n",
+       "  0.6031802892684937,\n",
+       "  0.6655975580215454,\n",
+       "  -0.06525135785341263,\n",
+       "  0.421434223651886,\n",
+       "  -0.11338674277067184,\n",
+       "  0.6240838766098022,\n",
+       "  0.2370661199092865,\n",
+       "  -0.28858521580696106,\n",
+       "  0.018270932137966156,\n",
+       "  0.16613556444644928,\n",
+       "  0.5155487060546875,\n",
+       "  -0.7947002649307251,\n",
+       "  0.43162399530410767,\n",
+       "  -0.2558012008666992,\n",
+       "  0.322053998708725,\n",
+       "  0.2850834131240845,\n",
+       "  0.6699681282043457,\n",
+       "  -0.7805972695350647,\n",
+       "  -0.0967356339097023,\n",
+       "  0.26844969391822815,\n",
+       "  0.25309741497039795,\n",
+       "  -0.040921133011579514,\n",
+       "  -0.2745266258716583,\n",
+       "  -0.2656719386577606,\n",
+       "  0.7735238671302795,\n",
+       "  0.36282986402511597,\n",
+       "  0.3531838059425354,\n",
+       "  -0.018144357949495316,\n",
+       "  0.2762523889541626,\n",
+       "  0.292710542678833,\n",
+       "  0.7624996900558472,\n",
+       "  0.4032532572746277,\n",
+       "  -0.47754618525505066,\n",
+       "  -0.15234309434890747,\n",
+       "  -0.646909236907959,\n",
+       "  -0.6886371970176697,\n",
+       "  -0.4359741806983948,\n",
+       "  -0.3814290761947632,\n",
+       "  -0.14441734552383423,\n",
+       "  0.8817673921585083,\n",
+       "  -0.07520444691181183,\n",
+       "  0.2902243137359619,\n",
+       "  -0.0363328754901886,\n",
+       "  -0.09644324332475662,\n",
+       "  -0.2702822685241699,\n",
+       "  -0.0903836041688919,\n",
+       "  -0.07166784256696701,\n",
+       "  0.4520867168903351,\n",
+       "  0.7583602070808411,\n",
+       "  -0.17694738507270813,\n",
+       "  -0.1802419275045395,\n",
+       "  0.036734264343976974,\n",
+       "  0.5039187073707581,\n",
+       "  -0.3738216459751129,\n",
+       "  -0.2462330311536789,\n",
+       "  -0.16176871955394745,\n",
+       "  -0.09859970211982727,\n",
+       "  -0.24951350688934326,\n",
+       "  -0.2699921429157257,\n",
+       "  -0.6594424843788147,\n",
+       "  0.051325127482414246,\n",
+       "  -0.6931187510490417,\n",
+       "  -1.0771921873092651,\n",
+       "  0.5300352573394775,\n",
+       "  -0.26480865478515625,\n",
+       "  -0.21046501398086548,\n",
+       "  -0.7360295057296753,\n",
+       "  -0.5392773151397705,\n",
+       "  0.07280915975570679,\n",
+       "  0.3488386273384094,\n",
+       "  -0.3438490033149719,\n",
+       "  0.9271075129508972,\n",
+       "  0.8084055185317993,\n",
+       "  -0.43852490186691284,\n",
+       "  0.377078652381897,\n",
+       "  0.5122473835945129,\n",
+       "  0.5148366093635559,\n",
+       "  -0.6005906462669373,\n",
+       "  0.5307503342628479,\n",
+       "  -0.11821816861629486,\n",
+       "  0.1444067656993866,\n",
+       "  -1.4041671752929688,\n",
+       "  -0.14894679188728333,\n",
+       "  -0.4679705500602722,\n",
+       "  -0.4729899764060974,\n",
+       "  -0.3515671491622925,\n",
+       "  -1.0960698127746582,\n",
+       "  -0.046922557055950165,\n",
+       "  0.47342783212661743,\n",
+       "  0.7556535601615906,\n",
+       "  -1.0950236320495605,\n",
+       "  0.2015274316072464,\n",
+       "  -0.4315618872642517,\n",
+       "  -0.8300988078117371,\n",
+       "  -0.18433940410614014,\n",
+       "  -0.9175993800163269,\n",
+       "  0.9776148796081543,\n",
+       "  -0.07103785127401352,\n",
+       "  0.16896787285804749,\n",
+       "  -0.12059900909662247,\n",
+       "  -0.24394500255584717,\n",
+       "  0.44257596135139465,\n",
+       "  0.2439504861831665,\n",
+       "  0.6449788212776184,\n",
+       "  -0.9974457025527954,\n",
+       "  0.7066627144813538,\n",
+       "  0.45798584818840027,\n",
+       "  0.4536619782447815,\n",
+       "  0.36611127853393555,\n",
+       "  0.48572322726249695,\n",
+       "  -0.12092026323080063,\n",
+       "  -0.5880641341209412,\n",
+       "  0.3482988178730011,\n",
+       "  0.03320842236280441,\n",
+       "  -0.19150950014591217,\n",
+       "  0.32792967557907104,\n",
+       "  0.14458581805229187,\n",
+       "  0.2966439425945282,\n",
+       "  0.3636152148246765,\n",
+       "  -0.4487185478210449,\n",
+       "  0.13955338299274445,\n",
+       "  0.07723299413919449,\n",
+       "  0.29051685333251953,\n",
+       "  0.6939775347709656,\n",
+       "  0.22232133150100708,\n",
+       "  -0.13401393592357635,\n",
+       "  -0.23672369122505188,\n",
+       "  -0.19740118086338043,\n",
+       "  -0.9358344078063965,\n",
+       "  0.30432987213134766,\n",
+       "  -0.4772465229034424,\n",
+       "  0.28738725185394287,\n",
+       "  -0.9792874455451965,\n",
+       "  0.33745595812797546,\n",
+       "  -0.22576816380023956,\n",
+       "  -0.7814821004867554,\n",
+       "  0.5664247870445251,\n",
+       "  -0.432607501745224,\n",
+       "  0.09034114331007004,\n",
+       "  0.29543694853782654,\n",
+       "  0.1969209611415863,\n",
+       "  -0.11263825744390488,\n",
+       "  -0.49571752548217773,\n",
+       "  0.6815844178199768,\n",
+       "  -0.2476591318845749,\n",
+       "  -0.084346242249012,\n",
+       "  0.13864430785179138,\n",
+       "  0.6361597180366516,\n",
+       "  0.6096804738044739,\n",
+       "  0.31687605381011963,\n",
+       "  0.3509639799594879,\n",
+       "  -0.45081862807273865,\n",
+       "  0.34895265102386475,\n",
+       "  0.0014897516230121255,\n",
+       "  -0.31649163365364075,\n",
+       "  0.8546939492225647,\n",
+       "  -0.5078703165054321,\n",
+       "  -1.0238487720489502,\n",
+       "  -0.35330167412757874,\n",
+       "  0.42015737295150757,\n",
+       "  0.2236682027578354,\n",
+       "  0.6500250101089478,\n",
+       "  -0.32474857568740845,\n",
+       "  0.6556638479232788,\n",
+       "  -0.025438643991947174,\n",
+       "  0.8389859795570374,\n",
+       "  0.5562865138053894,\n",
+       "  0.18280459940433502,\n",
+       "  0.08434924483299255,\n",
+       "  0.042215943336486816,\n",
+       "  0.5467571020126343,\n",
+       "  0.1123742163181305,\n",
+       "  0.03244837000966072,\n",
+       "  -1.0061715841293335,\n",
+       "  -0.3085944950580597,\n",
+       "  -0.6957574486732483,\n",
+       "  0.22116586565971375,\n",
+       "  0.382159948348999,\n",
+       "  0.22632470726966858,\n",
+       "  -0.27501484751701355,\n",
+       "  -0.2863302230834961,\n",
+       "  0.4582352042198181,\n",
+       "  0.5971866846084595,\n",
+       "  0.46816304326057434,\n",
+       "  -0.13226784765720367,\n",
+       "  -0.2464510053396225,\n",
+       "  0.46584272384643555,\n",
+       "  0.10705604404211044,\n",
+       "  -0.351188987493515,\n",
+       "  0.12138845771551132,\n",
+       "  -0.6085167527198792,\n",
+       "  0.3774726986885071,\n",
+       "  0.5407528877258301,\n",
+       "  0.0064618270844221115,\n",
+       "  -0.573912501335144,\n",
+       "  0.05149620398879051,\n",
+       "  0.23512426018714905,\n",
+       "  -0.387866735458374,\n",
+       "  -0.48907822370529175,\n",
+       "  0.4558003544807434,\n",
+       "  0.3432888686656952,\n",
+       "  0.9528384208679199,\n",
+       "  -0.6374655961990356,\n",
+       "  0.34813398122787476,\n",
+       "  -0.23865161836147308,\n",
+       "  -0.4767013192176819,\n",
+       "  0.3049609363079071,\n",
+       "  0.4352666735649109,\n",
+       "  0.42963385581970215,\n",
+       "  0.12873537838459015,\n",
+       "  0.8428581953048706,\n",
+       "  -0.5732046365737915,\n",
+       "  -0.7193275094032288,\n",
+       "  0.09657884389162064,\n",
+       "  -1.4704506397247314,\n",
+       "  0.4931609034538269,\n",
+       "  0.43918612599372864,\n",
+       "  -0.44628724455833435,\n",
+       "  -0.13946163654327393,\n",
+       "  -0.22067882120609283,\n",
+       "  -0.06430879235267639,\n",
+       "  -0.05333731323480606,\n",
+       "  -0.8031220436096191,\n",
+       "  -0.41270455718040466,\n",
+       "  -0.010898495092988014,\n",
+       "  0.5054727792739868,\n",
+       "  -0.13417154550552368,\n",
+       "  -0.09902690351009369,\n",
+       "  1.3453506231307983,\n",
+       "  -0.4104675054550171,\n",
+       "  -0.5713691115379333,\n",
+       "  0.5122509002685547,\n",
+       "  -0.02970154955983162,\n",
+       "  0.0001729759678710252,\n",
+       "  -0.34633317589759827,\n",
+       "  0.58829665184021,\n",
+       "  0.2868087887763977,\n",
+       "  0.2541254460811615,\n",
+       "  -0.05617895722389221,\n",
+       "  0.6807460188865662,\n",
+       "  -0.08982411026954651,\n",
+       "  -0.7709076404571533,\n",
+       "  0.4982278347015381,\n",
+       "  -0.37107664346694946,\n",
+       "  0.03981844708323479,\n",
+       "  -0.25501468777656555,\n",
+       "  -0.3640649616718292,\n",
+       "  -0.03449568524956703,\n",
+       "  -0.867987871170044,\n",
+       "  -0.2041328102350235,\n",
+       "  0.027860060334205627,\n",
+       "  -0.6101935505867004,\n",
+       "  0.5620599985122681,\n",
+       "  0.2859831154346466,\n",
+       "  0.5863463282585144,\n",
+       "  -0.4182853102684021,\n",
+       "  0.08681090921163559,\n",
+       "  0.14754517376422882,\n",
+       "  -0.06796219199895859,\n",
+       "  -0.27611684799194336,\n",
+       "  -0.2342776209115982,\n",
+       "  0.19633087515830994,\n",
+       "  0.2756378650665283,\n",
+       "  0.5625853538513184,\n",
+       "  -0.49814656376838684,\n",
+       "  -0.401283860206604,\n",
+       "  -0.09274519979953766,\n",
+       "  -0.38711124658584595,\n",
+       "  -0.36291393637657166,\n",
+       "  -0.5965020656585693,\n",
+       "  0.08162636309862137,\n",
+       "  0.0009226799593307078,\n",
+       "  0.12532298266887665,\n",
+       "  0.27732548117637634,\n",
+       "  -0.33255183696746826,\n",
+       "  -0.47273731231689453,\n",
+       "  0.3618244230747223,\n",
+       "  -0.6171136498451233,\n",
+       "  0.754910945892334,\n",
+       "  -0.033839914947748184,\n",
+       "  0.07171781361103058,\n",
+       "  -0.16260485351085663,\n",
+       "  1.2018041610717773,\n",
+       "  0.8110723495483398,\n",
+       "  -0.6492946147918701,\n",
+       "  -0.29279717803001404,\n",
+       "  0.4938250482082367,\n",
+       "  0.027557458728551865,\n",
+       "  0.5749586224555969,\n",
+       "  0.2800053656101227,\n",
+       "  0.03805295750498772,\n",
+       "  0.16644710302352905,\n",
+       "  -0.8560732007026672,\n",
+       "  0.1032106801867485,\n",
+       "  -0.06021938472986221,\n",
+       "  -0.7916827201843262,\n",
+       "  -0.6022663712501526,\n",
+       "  -0.329144686460495,\n",
+       "  -0.9039788842201233,\n",
+       "  0.8628774285316467,\n",
+       "  0.27277982234954834,\n",
+       "  0.4087710380554199,\n",
+       "  0.08519420772790909,\n",
+       "  -0.49490687251091003,\n",
+       "  0.05425240099430084,\n",
+       "  0.36529237031936646,\n",
+       "  -0.737844705581665,\n",
+       "  -0.3061997592449188,\n",
+       "  0.12480030208826065,\n",
+       "  0.20698219537734985,\n",
+       "  0.6797382235527039,\n",
+       "  -0.5483785271644592,\n",
+       "  0.276843398809433,\n",
+       "  -0.04296817258000374,\n",
+       "  -0.0498192124068737,\n",
+       "  0.18017064034938812,\n",
+       "  0.24226133525371552,\n",
+       "  -0.39626362919807434,\n",
+       "  -0.1816210150718689,\n",
+       "  0.3709948658943176,\n",
+       "  -0.2237037867307663,\n",
+       "  0.12779122591018677,\n",
+       "  0.3271578252315521,\n",
+       "  -0.11732201278209686,\n",
+       "  0.26085489988327026,\n",
+       "  -0.6515527963638306,\n",
+       "  -0.21465128660202026,\n",
+       "  -0.3324236273765564,\n",
+       "  -0.5589518547058105,\n",
+       "  0.12180844694375992,\n",
+       "  0.1852940022945404,\n",
+       "  0.5779324173927307,\n",
+       "  0.36550113558769226,\n",
+       "  -0.11930176615715027,\n",
+       "  -0.06511150300502777,\n",
+       "  -0.1553603559732437,\n",
+       "  0.5276203751564026,\n",
+       "  0.3745949864387512,\n",
+       "  -0.5842090845108032,\n",
+       "  -0.6464338898658752,\n",
+       "  -0.38732996582984924,\n",
+       "  -0.8451240062713623,\n",
+       "  0.32487261295318604,\n",
+       "  -0.2058093249797821,\n",
+       "  0.13900302350521088,\n",
+       "  -0.8028187155723572,\n",
+       "  -0.3149273097515106,\n",
+       "  0.9239713549613953,\n",
+       "  0.2142457515001297,\n",
+       "  -0.2100885808467865,\n",
+       "  1.455012559890747,\n",
+       "  -0.5873098969459534,\n",
+       "  0.500898540019989,\n",
+       "  0.02715122140944004,\n",
+       "  0.563439667224884,\n",
+       "  0.18631429970264435,\n",
+       "  -0.4562689960002899,\n",
+       "  -0.1576705276966095,\n",
+       "  -0.5597322583198547,\n",
+       "  -0.06370822340250015,\n",
+       "  0.24073514342308044,\n",
+       "  -0.961319088935852,\n",
+       "  -0.17020557820796967,\n",
+       "  -0.7333323955535889,\n",
+       "  -0.4487285614013672,\n",
+       "  0.3572932481765747,\n",
+       "  0.03249140828847885,\n",
+       "  0.830589771270752,\n",
+       "  0.11472773551940918,\n",
+       "  -0.539686918258667,\n",
+       "  -0.5189257264137268,\n",
+       "  0.40835750102996826,\n",
+       "  0.3892066180706024,\n",
+       "  -0.3863535523414612,\n",
+       "  0.2951650619506836,\n",
+       "  0.03117988631129265,\n",
+       "  -0.40388214588165283,\n",
+       "  0.6936691999435425,\n",
+       "  -0.2541087567806244,\n",
+       "  -0.2086130678653717,\n",
+       "  -0.30088797211647034,\n",
+       "  0.39943927526474,\n",
+       "  -0.11459176987409592,\n",
+       "  -0.6543619632720947,\n",
+       "  0.6635531187057495,\n",
+       "  0.4099794924259186,\n",
+       "  -1.076621413230896,\n",
+       "  -0.31472936272621155,\n",
+       "  -0.09162159264087677,\n",
+       "  -0.10547883063554764,\n",
+       "  -0.203010693192482,\n",
+       "  -0.797065794467926,\n",
+       "  -0.21599599719047546,\n",
+       "  0.012090904638171196,\n",
+       "  0.25781190395355225,\n",
+       "  -0.7289014458656311,\n",
+       "  0.014427169226109982,\n",
+       "  -0.05590129271149635,\n",
+       "  0.6503525376319885,\n",
+       "  -0.25092804431915283,\n",
+       "  0.8132804036140442,\n",
+       "  -0.5299649834632874,\n",
+       "  -0.18269559741020203,\n",
+       "  0.49492546916007996,\n",
+       "  -0.4528919458389282,\n",
+       "  -0.05405370891094208,\n",
+       "  -0.11458656191825867,\n",
+       "  0.8546084761619568,\n",
+       "  -0.24550120532512665,\n",
+       "  0.049994587898254395,\n",
+       "  0.5189576745033264,\n",
+       "  -0.4165690243244171,\n",
+       "  -0.3450049161911011,\n",
+       "  0.5662803053855896,\n",
+       "  0.08417262136936188,\n",
+       "  -0.42365437746047974,\n",
+       "  0.12669695913791656,\n",
+       "  -0.3068799376487732,\n",
+       "  0.7521166801452637,\n",
+       "  -0.09769726544618607,\n",
+       "  -0.8809972405433655,\n",
+       "  0.11703585088253021,\n",
+       "  0.5754616260528564,\n",
+       "  -0.31427350640296936,\n",
+       "  0.0451238639652729,\n",
+       "  -0.5953565239906311,\n",
+       "  -0.35429322719573975,\n",
+       "  0.688956081867218,\n",
+       "  0.25111037492752075,\n",
+       "  -0.11199289560317993,\n",
+       "  -0.33815497159957886,\n",
+       "  0.052134666591882706,\n",
+       "  -0.5139267444610596,\n",
+       "  -0.880919337272644,\n",
+       "  -0.9578896760940552,\n",
+       "  0.44254070520401,\n",
+       "  0.2506037652492523,\n",
+       "  0.7118644714355469,\n",
+       "  -0.3801298141479492,\n",
+       "  0.09831752628087997,\n",
+       "  -0.3725154995918274,\n",
+       "  0.9608874917030334,\n",
+       "  -0.6097050309181213,\n",
+       "  0.5317102670669556,\n",
+       "  0.18883268535137177,\n",
+       "  -0.2739759385585785,\n",
+       "  0.0060667130164802074,\n",
+       "  -0.7999657988548279,\n",
+       "  -0.49761518836021423,\n",
+       "  -0.04410175234079361,\n",
+       "  0.021492933854460716,\n",
+       "  -0.26157134771347046,\n",
+       "  0.3662603497505188,\n",
+       "  0.07656055688858032,\n",
+       "  -0.20391426980495453,\n",
+       "  0.23112739622592926,\n",
+       "  0.05148652195930481,\n",
+       "  0.1546042412519455,\n",
+       "  0.21650385856628418,\n",
+       "  -1.1717547178268433,\n",
+       "  -0.1276608407497406,\n",
+       "  0.7806116938591003,\n",
+       "  0.7273387312889099,\n",
+       "  0.6802674531936646,\n",
+       "  0.6182719469070435,\n",
+       "  -0.4920237064361572,\n",
+       "  0.18753017485141754,\n",
+       "  0.47386983036994934,\n",
+       "  0.28862181305885315,\n",
+       "  -0.3754692077636719,\n",
+       "  -0.0561814084649086,\n",
+       "  -0.012385806068778038,\n",
+       "  -0.6008806824684143,\n",
+       "  -0.5645871758460999,\n",
+       "  -1.0939054489135742,\n",
+       "  -0.46547579765319824,\n",
+       "  -0.9732064604759216,\n",
+       "  -0.12648724019527435,\n",
+       "  0.09849158674478531,\n",
+       "  0.3843759596347809,\n",
+       "  -0.4629274904727936,\n",
+       "  0.17386573553085327,\n",
+       "  0.15112851560115814,\n",
+       "  0.7017663717269897,\n",
+       "  -0.16923131048679352,\n",
+       "  0.2237587720155716,\n",
+       "  0.2665000557899475,\n",
+       "  0.2541508376598358,\n",
+       "  0.30873268842697144,\n",
+       "  -0.5635056495666504,\n",
+       "  0.5241885781288147,\n",
+       "  0.2771768271923065,\n",
+       "  0.2790517210960388,\n",
+       "  -0.539208173751831,\n",
+       "  -0.7596209645271301,\n",
+       "  0.6352860331535339,\n",
+       "  0.2882881462574005,\n",
+       "  0.34007710218429565,\n",
+       "  -0.474793940782547,\n",
+       "  -0.6396011114120483,\n",
+       "  -0.2593938708305359,\n",
+       "  0.08468469977378845,\n",
+       "  -0.24741365015506744,\n",
+       "  0.556648850440979,\n",
+       "  0.3211875855922699,\n",
+       "  -0.4658515453338623,\n",
+       "  0.14536313712596893,\n",
+       "  -0.39535415172576904,\n",
+       "  -0.9148903489112854,\n",
+       "  0.4538055956363678,\n",
+       "  -0.8095774054527283,\n",
+       "  0.060072802007198334,\n",
+       "  0.33706173300743103,\n",
+       "  0.03795214742422104,\n",
+       "  -0.5362184047698975,\n",
+       "  -0.2864001989364624,\n",
+       "  -1.0039011240005493,\n",
+       "  -0.3602775037288666,\n",
+       "  -0.7287405729293823,\n",
+       "  0.2748887538909912,\n",
+       "  -0.07904542237520218,\n",
+       "  0.43842989206314087,\n",
+       "  0.4292987883090973,\n",
+       "  -0.2311275154352188,\n",
+       "  -0.7116916179656982,\n",
+       "  -0.11643634736537933,\n",
+       "  -0.7759585380554199,\n",
+       "  0.7385767698287964,\n",
+       "  0.04599079489707947,\n",
+       "  -0.6884185075759888,\n",
+       "  0.2725524604320526,\n",
+       "  0.6506152749061584,\n",
+       "  0.39920005202293396,\n",
+       "  0.09319861978292465,\n",
+       "  -0.38983431458473206,\n",
+       "  0.5238291025161743,\n",
+       "  -0.5580272078514099,\n",
+       "  -0.0103628970682621,\n",
+       "  -0.38650044798851013,\n",
+       "  -0.3914099931716919,\n",
+       "  0.22562870383262634,\n",
+       "  0.24987107515335083,\n",
+       "  -0.5925841927528381,\n",
+       "  -0.0284016951918602,\n",
+       "  -0.6322098970413208,\n",
+       "  0.4557032287120819,\n",
+       "  -0.004712618421763182,\n",
+       "  -0.6027783155441284,\n",
+       "  0.3160114884376526,\n",
+       "  0.3637271821498871,\n",
+       "  0.3804703950881958,\n",
+       "  0.48565515875816345,\n",
+       "  0.5258179903030396,\n",
+       "  0.8879186511039734,\n",
+       "  0.7316209673881531,\n",
+       "  0.0416119210422039,\n",
+       "  -1.0093135833740234,\n",
+       "  0.11492951214313507,\n",
+       "  0.8028061985969543,\n",
+       "  0.06716805696487427,\n",
+       "  0.0019319140119478106,\n",
+       "  -0.3770061135292053,\n",
+       "  -0.07625972479581833,\n",
+       "  0.5457291603088379,\n",
+       "  -0.09309566020965576,\n",
+       "  -0.01992066018283367,\n",
+       "  0.7474305629730225,\n",
+       "  0.15377254784107208,\n",
+       "  -0.11079899221658707,\n",
+       "  0.2939283549785614,\n",
+       "  -0.41370704770088196,\n",
+       "  0.5233023762702942,\n",
+       "  -0.2431264966726303,\n",
+       "  0.3325313627719879,\n",
+       "  0.5507897734642029,\n",
+       "  -0.2349100261926651,\n",
+       "  -0.26681745052337646,\n",
+       "  0.33428627252578735,\n",
+       "  0.20792822539806366,\n",
+       "  0.20537535846233368,\n",
+       "  -0.23919019103050232,\n",
+       "  0.05211174488067627,\n",
+       "  -0.029082706198096275,\n",
+       "  -0.5170590281486511,\n",
+       "  -0.148354634642601,\n",
+       "  0.17387090623378754,\n",
+       "  0.3997310400009155,\n",
+       "  0.6324551105499268,\n",
+       "  0.5969943404197693,\n",
+       "  -0.1682303249835968,\n",
+       "  0.39327800273895264,\n",
+       "  -0.10407182574272156,\n",
+       "  0.2405574768781662,\n",
+       "  0.27164438366889954,\n",
+       "  -1.1877676248550415,\n",
+       "  0.14967003464698792,\n",
+       "  0.155400350689888,\n",
+       "  -0.1664905548095703,\n",
+       "  -0.8923134207725525,\n",
+       "  0.31925272941589355,\n",
+       "  -0.6922290921211243,\n",
+       "  0.37472066283226013,\n",
+       "  0.05517548322677612,\n",
+       "  0.03848360478878021,\n",
+       "  0.1037290170788765,\n",
+       "  -0.5190158486366272,\n",
+       "  -0.6224437355995178,\n",
+       "  -0.7139700651168823,\n",
+       "  0.8266307711601257,\n",
+       "  -0.11380338668823242,\n",
+       "  0.08344950526952744,\n",
+       "  0.5643734931945801,\n",
+       "  0.027856847271323204,\n",
+       "  -0.019112922251224518,\n",
+       "  0.7826627492904663,\n",
+       "  -0.4863210618495941,\n",
+       "  0.6647438406944275,\n",
+       "  0.2020666003227234,\n",
+       "  0.9220132231712341,\n",
+       "  0.8749033212661743,\n",
+       "  0.2835003733634949,\n",
+       "  0.9998884201049805,\n",
+       "  -0.672473132610321,\n",
+       "  -0.32181110978126526,\n",
+       "  -0.5558651685714722,\n",
+       "  -0.2695208787918091,\n",
+       "  -0.7541895508766174,\n",
+       "  0.1516842544078827,\n",
+       "  -0.4608273208141327,\n",
+       "  -0.3914019465446472,\n",
+       "  -0.26724764704704285,\n",
+       "  0.43134525418281555,\n",
+       "  -0.6212441325187683,\n",
+       "  0.3745012879371643,\n",
+       "  -0.37949445843696594,\n",
+       "  -1.119378924369812,\n",
+       "  -0.07150902599096298,\n",
+       "  -0.5286315679550171,\n",
+       "  -0.14950813353061676,\n",
+       "  0.1515863537788391,\n",
+       "  1.2689299583435059,\n",
+       "  1.0098563432693481,\n",
+       "  -0.014573409222066402,\n",
+       "  -0.09301596879959106,\n",
+       "  -0.28702157735824585,\n",
+       "  0.44630059599876404,\n",
+       "  -0.320136696100235,\n",
+       "  -0.3883953094482422,\n",
+       "  0.7925869822502136,\n",
+       "  -0.4618237614631653,\n",
+       "  -1.2889593839645386,\n",
+       "  -0.3566947877407074,\n",
+       "  -0.6348873376846313,\n",
+       "  -0.7300600409507751,\n",
+       "  0.09211597591638565,\n",
+       "  -0.9467034339904785,\n",
+       "  0.16685202717781067,\n",
+       "  -0.09806318581104279,\n",
+       "  0.26248520612716675,\n",
+       "  -0.23755009472370148,\n",
+       "  0.5351219773292542,\n",
+       "  -0.4853552281856537,\n",
+       "  0.7577729821205139,\n",
+       "  0.38879889249801636,\n",
+       "  0.6300411820411682,\n",
+       "  -0.2574041783809662,\n",
+       "  0.7323415279388428,\n",
+       "  0.09847570210695267,\n",
+       "  -0.5526623129844666,\n",
+       "  -0.3854880928993225,\n",
+       "  -0.7990260720252991,\n",
+       "  0.35248231887817383,\n",
+       "  -0.4668175280094147,\n",
+       "  -0.10290756821632385,\n",
+       "  -0.09236554801464081,\n",
+       "  -0.258074551820755,\n",
+       "  -0.24723400175571442,\n",
+       "  -0.6552531719207764,\n",
+       "  0.16103433072566986,\n",
+       "  0.6218563318252563,\n",
+       "  0.24903221428394318,\n",
+       "  -0.5528410077095032,\n",
+       "  -1.3529237508773804,\n",
+       "  0.23143072426319122,\n",
+       "  -1.045642614364624,\n",
+       "  -0.2803279161453247,\n",
+       "  -0.44280824065208435,\n",
+       "  0.6601386070251465,\n",
+       "  0.03146280348300934,\n",
+       "  -0.25061336159706116,\n",
+       "  0.1281445175409317,\n",
+       "  -0.9006889462471008,\n",
+       "  4.462767601013184,\n",
+       "  0.5997637510299683,\n",
+       "  0.4976256787776947,\n",
+       "  -0.4936535358428955,\n",
+       "  0.17143943905830383,\n",
+       "  0.8772667050361633,\n",
+       "  0.285220205783844,\n",
+       "  0.9304468631744385,\n",
+       "  -0.27842092514038086,\n",
+       "  -0.45088550448417664,\n",
+       "  0.3779442310333252,\n",
+       "  0.1473567634820938,\n",
+       "  0.2477225661277771,\n",
+       "  0.4404883086681366,\n",
+       "  -0.08007366955280304,\n",
+       "  0.9077342748641968,\n",
+       "  -0.5756711959838867,\n",
+       "  0.30554863810539246,\n",
+       "  -0.08678336441516876,\n",
+       "  -1.0750330686569214,\n",
+       "  0.0004209561739116907,\n",
+       "  -0.6181638836860657,\n",
+       "  0.5358628034591675,\n",
+       "  0.17197741568088531,\n",
+       "  0.3999564051628113,\n",
+       "  -0.3586116135120392,\n",
+       "  1.0736268758773804,\n",
+       "  -0.5334151387214661,\n",
+       "  0.06598101556301117,\n",
+       "  -0.2870873808860779,\n",
+       "  -0.2306235432624817,\n",
+       "  -0.5238915681838989,\n",
+       "  -0.4700780510902405,\n",
+       "  -0.7910664081573486,\n",
+       "  -0.5595477819442749,\n",
+       "  0.5381693243980408,\n",
+       "  0.43998298048973083,\n",
+       "  -0.4397830367088318,\n",
+       "  0.15957890450954437,\n",
+       "  -0.1641160249710083,\n",
+       "  -0.26293277740478516,\n",
+       "  -0.12118148803710938,\n",
+       "  0.482787162065506,\n",
+       "  -0.8770087957382202,\n",
+       "  -0.1327838897705078,\n",
+       "  0.28636783361434937,\n",
+       "  -0.47440096735954285,\n",
+       "  0.10034739226102829,\n",
+       "  0.28839558362960815,\n",
+       "  -0.12855111062526703,\n",
+       "  1.0286990404129028,\n",
+       "  -0.7193248867988586,\n",
+       "  0.21239891648292542,\n",
+       "  -0.6174246072769165,\n",
+       "  -0.7919260263442993,\n",
+       "  -0.03878069669008255,\n",
+       "  -0.3190139830112457,\n",
+       "  -0.23707982897758484,\n",
+       "  -0.5065869688987732,\n",
+       "  -0.43810972571372986,\n",
+       "  -0.3110460340976715,\n",
+       "  -0.2863406836986542,\n",
+       "  -0.4253699779510498,\n",
+       "  0.3866632580757141,\n",
+       "  -0.8151654601097107,\n",
+       "  0.4530806839466095,\n",
+       "  0.602790117263794,\n",
+       "  0.5624902844429016,\n",
+       "  -0.4981139302253723,\n",
+       "  0.058757226914167404,\n",
+       "  0.1600789576768875,\n",
+       "  ...],\n",
+       " [-0.66383957862854,\n",
+       "  -0.2313556671142578,\n",
+       "  -0.2595861554145813,\n",
+       "  -0.06100668013095856,\n",
+       "  -0.6925454139709473,\n",
+       "  -0.22522060573101044,\n",
+       "  -0.035429272800683975,\n",
+       "  -0.04449533298611641,\n",
+       "  0.39814653992652893,\n",
+       "  0.13439606130123138,\n",
+       "  0.29754704236984253,\n",
+       "  -0.238642156124115,\n",
+       "  0.25147610902786255,\n",
+       "  -0.32628288865089417,\n",
+       "  -0.49216407537460327,\n",
+       "  -0.40720444917678833,\n",
+       "  -0.6613724827766418,\n",
+       "  -0.3219824731349945,\n",
+       "  -0.5070877075195312,\n",
+       "  -0.024057071655988693,\n",
+       "  0.38390594720840454,\n",
+       "  0.4274079203605652,\n",
+       "  -1.2975172996520996,\n",
+       "  -0.46902188658714294,\n",
+       "  -0.35251280665397644,\n",
+       "  0.3329623341560364,\n",
+       "  0.05530993267893791,\n",
+       "  0.22719600796699524,\n",
+       "  0.8056514859199524,\n",
+       "  0.8747472167015076,\n",
+       "  0.03323102369904518,\n",
+       "  0.39306214451789856,\n",
+       "  0.16607530415058136,\n",
+       "  -0.846079409122467,\n",
+       "  -0.12165623903274536,\n",
+       "  -0.6517881155014038,\n",
+       "  -2.3414584575220942e-05,\n",
+       "  0.14633579552173615,\n",
+       "  -0.825664222240448,\n",
+       "  -0.4183889329433441,\n",
+       "  0.1627465784549713,\n",
+       "  -0.7571935653686523,\n",
+       "  0.0036316709592938423,\n",
+       "  -0.4105145335197449,\n",
+       "  -1.0966694355010986,\n",
+       "  -0.41880688071250916,\n",
+       "  0.1567099541425705,\n",
+       "  -0.7302873730659485,\n",
+       "  0.5174612998962402,\n",
+       "  -0.8508439064025879,\n",
+       "  0.10142526030540466,\n",
+       "  -0.2843800485134125,\n",
+       "  0.32579779624938965,\n",
+       "  0.18766894936561584,\n",
+       "  0.0704789087176323,\n",
+       "  -0.1186482161283493,\n",
+       "  0.30121684074401855,\n",
+       "  0.1028139516711235,\n",
+       "  -1.063417911529541,\n",
+       "  0.4732326865196228,\n",
+       "  0.6511643528938293,\n",
+       "  -0.10245297849178314,\n",
+       "  0.3198312222957611,\n",
+       "  -0.6911914348602295,\n",
+       "  -0.3321545720100403,\n",
+       "  0.4627225399017334,\n",
+       "  -0.12581969797611237,\n",
+       "  0.4968282878398895,\n",
+       "  0.2776549458503723,\n",
+       "  0.05307720974087715,\n",
+       "  0.10920432209968567,\n",
+       "  -0.40448153018951416,\n",
+       "  -0.059818610548973083,\n",
+       "  -0.04125083237886429,\n",
+       "  -0.24878741800785065,\n",
+       "  0.02488279901444912,\n",
+       "  -0.5569456219673157,\n",
+       "  -0.22246843576431274,\n",
+       "  -0.29153338074684143,\n",
+       "  0.1343427449464798,\n",
+       "  -0.1262163370847702,\n",
+       "  -0.17975224554538727,\n",
+       "  0.3224595785140991,\n",
+       "  0.039348285645246506,\n",
+       "  -0.4701169431209564,\n",
+       "  0.07212565839290619,\n",
+       "  -0.3677715063095093,\n",
+       "  0.37830060720443726,\n",
+       "  0.3132310211658478,\n",
+       "  0.2310069352388382,\n",
+       "  -0.2397177368402481,\n",
+       "  0.7962530255317688,\n",
+       "  -0.20806986093521118,\n",
+       "  0.07299618422985077,\n",
+       "  0.4896806478500366,\n",
+       "  0.7884756326675415,\n",
+       "  -0.031209291890263557,\n",
+       "  0.05247776210308075,\n",
+       "  -0.5274895429611206,\n",
+       "  -0.11336683481931686,\n",
+       "  0.22027435898780823,\n",
+       "  0.6983976364135742,\n",
+       "  0.053230199962854385,\n",
+       "  0.9547304511070251,\n",
+       "  -0.23651228845119476,\n",
+       "  0.10277893394231796,\n",
+       "  0.014033998362720013,\n",
+       "  1.041684865951538,\n",
+       "  -0.31462642550468445,\n",
+       "  -0.6297675967216492,\n",
+       "  0.36212003231048584,\n",
+       "  -0.012141757644712925,\n",
+       "  -0.021185457706451416,\n",
+       "  0.4515077769756317,\n",
+       "  -0.3030897080898285,\n",
+       "  0.7325507998466492,\n",
+       "  -0.4467439651489258,\n",
+       "  0.5766064524650574,\n",
+       "  -0.769917368888855,\n",
+       "  -0.13879376649856567,\n",
+       "  -0.15103241801261902,\n",
+       "  0.40279167890548706,\n",
+       "  0.38021376729011536,\n",
+       "  -0.4165734052658081,\n",
+       "  -0.05714404955506325,\n",
+       "  -0.38282668590545654,\n",
+       "  -0.49606284499168396,\n",
+       "  0.7269167304039001,\n",
+       "  -0.6417250037193298,\n",
+       "  0.2031887024641037,\n",
+       "  -0.49722495675086975,\n",
+       "  -0.3438809812068939,\n",
+       "  0.8003844022750854,\n",
+       "  0.2577022612094879,\n",
+       "  0.3948556184768677,\n",
+       "  0.9283068776130676,\n",
+       "  -0.2774761915206909,\n",
+       "  0.9557852149009705,\n",
+       "  0.1972631812095642,\n",
+       "  -0.3428194522857666,\n",
+       "  0.3247833847999573,\n",
+       "  0.6235134601593018,\n",
+       "  0.24010451138019562,\n",
+       "  1.3323333263397217,\n",
+       "  0.11255193501710892,\n",
+       "  0.7475976347923279,\n",
+       "  -0.04500462859869003,\n",
+       "  0.0031878864392638206,\n",
+       "  -0.43377748131752014,\n",
+       "  0.5427476167678833,\n",
+       "  0.30915892124176025,\n",
+       "  0.06339199095964432,\n",
+       "  -0.28885963559150696,\n",
+       "  0.8270829916000366,\n",
+       "  -0.15219268202781677,\n",
+       "  0.3253883123397827,\n",
+       "  0.4335705041885376,\n",
+       "  -0.07575776427984238,\n",
+       "  0.506062924861908,\n",
+       "  0.22491300106048584,\n",
+       "  0.12009810656309128,\n",
+       "  0.5963507294654846,\n",
+       "  -0.6599342823028564,\n",
+       "  0.8246259093284607,\n",
+       "  -0.11227074265480042,\n",
+       "  0.31016668677330017,\n",
+       "  -0.5566144585609436,\n",
+       "  -0.04739649221301079,\n",
+       "  -0.28963443636894226,\n",
+       "  0.16926006972789764,\n",
+       "  0.04322681203484535,\n",
+       "  0.6518950462341309,\n",
+       "  -0.02876073122024536,\n",
+       "  0.15316806733608246,\n",
+       "  0.12932568788528442,\n",
+       "  0.8276455402374268,\n",
+       "  0.4568895697593689,\n",
+       "  -0.15531013906002045,\n",
+       "  0.945992112159729,\n",
+       "  0.3896466791629791,\n",
+       "  -0.12119919806718826,\n",
+       "  0.5152679681777954,\n",
+       "  0.6301158666610718,\n",
+       "  1.1760205030441284,\n",
+       "  0.03376719355583191,\n",
+       "  -0.0809011310338974,\n",
+       "  0.2313305288553238,\n",
+       "  -0.009871753863990307,\n",
+       "  -0.601636528968811,\n",
+       "  -0.1795131117105484,\n",
+       "  0.1304136961698532,\n",
+       "  0.5048069953918457,\n",
+       "  -0.06729011982679367,\n",
+       "  -0.3121969997882843,\n",
+       "  -0.29310178756713867,\n",
+       "  0.3514418601989746,\n",
+       "  -1.1271324157714844,\n",
+       "  -0.09299957752227783,\n",
+       "  -0.7083450555801392,\n",
+       "  -0.8204821348190308,\n",
+       "  -0.42331191897392273,\n",
+       "  -0.04339401796460152,\n",
+       "  -0.5787737965583801,\n",
+       "  0.8930289149284363,\n",
+       "  0.36572974920272827,\n",
+       "  -0.7476776242256165,\n",
+       "  0.5567910075187683,\n",
+       "  1.7977360486984253,\n",
+       "  -0.02189374901354313,\n",
+       "  0.7785289883613586,\n",
+       "  0.43605461716651917,\n",
+       "  1.3746691942214966,\n",
+       "  -0.6201463937759399,\n",
+       "  0.1897742599248886,\n",
+       "  0.5282841920852661,\n",
+       "  -0.32129576802253723,\n",
+       "  0.07059669494628906,\n",
+       "  1.0405555963516235,\n",
+       "  -0.7393519282341003,\n",
+       "  0.4615570604801178,\n",
+       "  -0.11006764322519302,\n",
+       "  0.5464887022972107,\n",
+       "  0.5049405097961426,\n",
+       "  0.707616925239563,\n",
+       "  -0.5412596464157104,\n",
+       "  -0.14146843552589417,\n",
+       "  0.0989818125963211,\n",
+       "  0.9178425669670105,\n",
+       "  0.07597102969884872,\n",
+       "  0.20396646857261658,\n",
+       "  0.02221265435218811,\n",
+       "  0.31986862421035767,\n",
+       "  -0.10685097426176071,\n",
+       "  0.22032785415649414,\n",
+       "  0.8232126235961914,\n",
+       "  0.14689558744430542,\n",
+       "  0.7107570171356201,\n",
+       "  0.3264351785182953,\n",
+       "  0.5185019373893738,\n",
+       "  0.0013305929023772478,\n",
+       "  0.18264140188694,\n",
+       "  0.37187331914901733,\n",
+       "  0.5390960574150085,\n",
+       "  -0.13465994596481323,\n",
+       "  -0.7617212533950806,\n",
+       "  -0.1916431337594986,\n",
+       "  -0.16727127134799957,\n",
+       "  0.6731497645378113,\n",
+       "  -0.7767329812049866,\n",
+       "  0.6193000078201294,\n",
+       "  -0.42698243260383606,\n",
+       "  0.3654089570045471,\n",
+       "  0.6835520267486572,\n",
+       "  0.395896852016449,\n",
+       "  -0.7649313807487488,\n",
+       "  -0.42238858342170715,\n",
+       "  0.8192903399467468,\n",
+       "  0.7838611006736755,\n",
+       "  -0.0721166655421257,\n",
+       "  -0.5067527294158936,\n",
+       "  0.29517635703086853,\n",
+       "  -0.36073851585388184,\n",
+       "  0.40435370802879333,\n",
+       "  0.5425378680229187,\n",
+       "  -0.22622635960578918,\n",
+       "  0.8533711433410645,\n",
+       "  -0.003657616674900055,\n",
+       "  0.1506732553243637,\n",
+       "  -0.4110838770866394,\n",
+       "  -1.0123159885406494,\n",
+       "  -0.09841310232877731,\n",
+       "  -0.6191126108169556,\n",
+       "  -0.786047637462616,\n",
+       "  -0.023185061290860176,\n",
+       "  -0.16664241254329681,\n",
+       "  -0.7477964758872986,\n",
+       "  -0.1311689019203186,\n",
+       "  -0.04727170243859291,\n",
+       "  0.7601009011268616,\n",
+       "  -0.21691539883613586,\n",
+       "  0.2879783809185028,\n",
+       "  -0.5148252844810486,\n",
+       "  -0.9074329733848572,\n",
+       "  0.015700897201895714,\n",
+       "  0.019970141351222992,\n",
+       "  1.2790656089782715,\n",
+       "  -0.7192351818084717,\n",
+       "  0.633094072341919,\n",
+       "  -0.2613338828086853,\n",
+       "  0.5991172194480896,\n",
+       "  -0.5007964968681335,\n",
+       "  -0.23982669413089752,\n",
+       "  -0.07967814058065414,\n",
+       "  -0.6458929777145386,\n",
+       "  -0.07101744413375854,\n",
+       "  -0.02982148714363575,\n",
+       "  -0.15407350659370422,\n",
+       "  0.40034782886505127,\n",
+       "  -0.32107964158058167,\n",
+       "  -0.6922317743301392,\n",
+       "  -0.09478769451379776,\n",
+       "  0.33118054270744324,\n",
+       "  -0.5922290086746216,\n",
+       "  -0.2315683513879776,\n",
+       "  -0.3633510172367096,\n",
+       "  0.9553167223930359,\n",
+       "  0.15411309897899628,\n",
+       "  -0.17744380235671997,\n",
+       "  1.2446421384811401,\n",
+       "  0.39525559544563293,\n",
+       "  -1.189293384552002,\n",
+       "  0.439408540725708,\n",
+       "  0.30721813440322876,\n",
+       "  0.5662364959716797,\n",
+       "  -0.6927391886711121,\n",
+       "  -0.26919615268707275,\n",
+       "  0.2464495450258255,\n",
+       "  0.12598511576652527,\n",
+       "  -1.2246264219284058,\n",
+       "  -0.23698285222053528,\n",
+       "  0.07862170785665512,\n",
+       "  0.17724956572055817,\n",
+       "  -0.26024624705314636,\n",
+       "  -0.7359688878059387,\n",
+       "  0.11084423959255219,\n",
+       "  0.5328563451766968,\n",
+       "  0.025927213951945305,\n",
+       "  -1.183160424232483,\n",
+       "  0.3631088435649872,\n",
+       "  -0.8191152215003967,\n",
+       "  -0.755239725112915,\n",
+       "  -0.4995143711566925,\n",
+       "  -0.06928092241287231,\n",
+       "  0.9806907773017883,\n",
+       "  0.4832023084163666,\n",
+       "  0.2266155183315277,\n",
+       "  0.17297831177711487,\n",
+       "  0.23857860267162323,\n",
+       "  0.7700474262237549,\n",
+       "  -0.5227215886116028,\n",
+       "  1.5237351655960083,\n",
+       "  -1.0372787714004517,\n",
+       "  0.42848527431488037,\n",
+       "  0.6967135667800903,\n",
+       "  -0.5061274170875549,\n",
+       "  -0.028543030843138695,\n",
+       "  0.6125296354293823,\n",
+       "  0.11877332627773285,\n",
+       "  -0.24795833230018616,\n",
+       "  0.5738652348518372,\n",
+       "  0.03585290536284447,\n",
+       "  -0.08751246333122253,\n",
+       "  0.5911476016044617,\n",
+       "  0.14302462339401245,\n",
+       "  0.3904249668121338,\n",
+       "  -0.08441024273633957,\n",
+       "  -0.12650245428085327,\n",
+       "  0.04551529139280319,\n",
+       "  0.46586257219314575,\n",
+       "  0.3084683418273926,\n",
+       "  0.2561204433441162,\n",
+       "  -0.2515110373497009,\n",
+       "  -0.16502408683300018,\n",
+       "  0.03153965622186661,\n",
+       "  0.1740194708108902,\n",
+       "  -0.8661266565322876,\n",
+       "  0.3422711491584778,\n",
+       "  0.5051333904266357,\n",
+       "  -0.29426029324531555,\n",
+       "  -1.596143364906311,\n",
+       "  0.4108634293079376,\n",
+       "  -0.2926933467388153,\n",
+       "  -0.6348920464515686,\n",
+       "  0.30726951360702515,\n",
+       "  -0.17813639342784882,\n",
+       "  0.1929423063993454,\n",
+       "  0.8914364576339722,\n",
+       "  0.12266840040683746,\n",
+       "  0.576617419719696,\n",
+       "  -1.2714109420776367,\n",
+       "  -0.028853025287389755,\n",
+       "  -0.549541711807251,\n",
+       "  0.19571059942245483,\n",
+       "  0.41401880979537964,\n",
+       "  0.17110785841941833,\n",
+       "  0.41904062032699585,\n",
+       "  0.29501330852508545,\n",
+       "  0.5240954756736755,\n",
+       "  -0.77303546667099,\n",
+       "  -0.4904113709926605,\n",
+       "  -0.5939957499504089,\n",
+       "  -0.11172720044851303,\n",
+       "  0.8538534045219421,\n",
+       "  -0.20046530663967133,\n",
+       "  -0.7861432433128357,\n",
+       "  -0.4543113112449646,\n",
+       "  1.0110828876495361,\n",
+       "  -0.003347388468682766,\n",
+       "  0.5784980654716492,\n",
+       "  -0.4305913746356964,\n",
+       "  0.7264584898948669,\n",
+       "  0.7619367241859436,\n",
+       "  0.8248848915100098,\n",
+       "  0.24710723757743835,\n",
+       "  -0.4174598753452301,\n",
+       "  -0.5849774479866028,\n",
+       "  -0.08136039227247238,\n",
+       "  0.6947451233863831,\n",
+       "  0.6091447472572327,\n",
+       "  -0.2596603035926819,\n",
+       "  -0.5273916125297546,\n",
+       "  0.02512296661734581,\n",
+       "  -0.2914501130580902,\n",
+       "  -0.340916246175766,\n",
+       "  0.3925054371356964,\n",
+       "  0.264009565114975,\n",
+       "  -0.5922141671180725,\n",
+       "  -0.1410948485136032,\n",
+       "  0.3549291789531708,\n",
+       "  0.7957888841629028,\n",
+       "  -0.49344921112060547,\n",
+       "  -0.10658832639455795,\n",
+       "  -0.14459018409252167,\n",
+       "  0.8777123689651489,\n",
+       "  0.5201388001441956,\n",
+       "  -0.6812755465507507,\n",
+       "  -0.4125320315361023,\n",
+       "  -0.5169220566749573,\n",
+       "  0.9127803444862366,\n",
+       "  0.12648075819015503,\n",
+       "  0.15197505056858063,\n",
+       "  -0.17171065509319305,\n",
+       "  -0.5145682096481323,\n",
+       "  -0.3144108057022095,\n",
+       "  0.25576066970825195,\n",
+       "  -0.2729228138923645,\n",
+       "  0.43763890862464905,\n",
+       "  -0.6974268555641174,\n",
+       "  0.05586937069892883,\n",
+       "  -0.3896856904029846,\n",
+       "  0.35386428236961365,\n",
+       "  0.1315007507801056,\n",
+       "  -0.39295321702957153,\n",
+       "  -0.18069300055503845,\n",
+       "  0.26811668276786804,\n",
+       "  0.3929719924926758,\n",
+       "  0.44114425778388977,\n",
+       "  0.47795361280441284,\n",
+       "  -0.8011078238487244,\n",
+       "  -0.301805317401886,\n",
+       "  0.47754961252212524,\n",
+       "  -0.9720356464385986,\n",
+       "  1.0676907300949097,\n",
+       "  -0.29112306237220764,\n",
+       "  0.2620666027069092,\n",
+       "  -0.2559487521648407,\n",
+       "  -0.30174437165260315,\n",
+       "  0.020500365644693375,\n",
+       "  0.37328124046325684,\n",
+       "  -0.6434176564216614,\n",
+       "  -0.3961181342601776,\n",
+       "  -0.1455620676279068,\n",
+       "  1.1312304735183716,\n",
+       "  -0.35954615473747253,\n",
+       "  -0.7734612226486206,\n",
+       "  0.9958603382110596,\n",
+       "  -0.3421874940395355,\n",
+       "  -0.3012723922729492,\n",
+       "  -0.18579894304275513,\n",
+       "  0.13212817907333374,\n",
+       "  0.4657566249370575,\n",
+       "  -0.16543884575366974,\n",
+       "  -0.02276868373155594,\n",
+       "  0.15026947855949402,\n",
+       "  0.29083219170570374,\n",
+       "  -0.9812489151954651,\n",
+       "  -0.3071942627429962,\n",
+       "  -0.41813355684280396,\n",
+       "  -0.8969392776489258,\n",
+       "  0.4203145503997803,\n",
+       "  -0.24708013236522675,\n",
+       "  -0.8105489015579224,\n",
+       "  0.19139695167541504,\n",
+       "  -0.6527240872383118,\n",
+       "  -0.17958854138851166,\n",
+       "  -1.3926584720611572,\n",
+       "  -0.2781815528869629,\n",
+       "  0.11016010493040085,\n",
+       "  -0.16614437103271484,\n",
+       "  -0.355233371257782,\n",
+       "  0.3178675174713135,\n",
+       "  0.3770565688610077,\n",
+       "  0.877945601940155,\n",
+       "  -0.7948293685913086,\n",
+       "  0.05235274136066437,\n",
+       "  -0.4885311722755432,\n",
+       "  -0.25346195697784424,\n",
+       "  -0.4479544758796692,\n",
+       "  0.45200014114379883,\n",
+       "  0.5162225365638733,\n",
+       "  0.40498116612434387,\n",
+       "  -0.6774299740791321,\n",
+       "  -0.4202435612678528,\n",
+       "  -0.29834842681884766,\n",
+       "  0.08582589030265808,\n",
+       "  -0.7950501441955566,\n",
+       "  -0.7950786352157593,\n",
+       "  0.05144018307328224,\n",
+       "  -0.1953907012939453,\n",
+       "  0.4306655526161194,\n",
+       "  -0.14445535838603973,\n",
+       "  0.44681674242019653,\n",
+       "  0.1289193481206894,\n",
+       "  0.2624998092651367,\n",
+       "  0.6209694147109985,\n",
+       "  0.6485058665275574,\n",
+       "  0.3436071276664734,\n",
+       "  -0.17081555724143982,\n",
+       "  -0.24998722970485687,\n",
+       "  0.8819694519042969,\n",
+       "  0.1914956271648407,\n",
+       "  -0.39287418127059937,\n",
+       "  0.47309058904647827,\n",
+       "  0.9233711957931519,\n",
+       "  -0.06572650372982025,\n",
+       "  0.5558550357818604,\n",
+       "  0.803342342376709,\n",
+       "  0.1837519109249115,\n",
+       "  -0.582427442073822,\n",
+       "  -1.229834794998169,\n",
+       "  -0.5020425915718079,\n",
+       "  -0.395750492811203,\n",
+       "  -1.030993938446045,\n",
+       "  -1.0110739469528198,\n",
+       "  0.10828382521867752,\n",
+       "  -0.6424391269683838,\n",
+       "  0.3970054090023041,\n",
+       "  0.404026061296463,\n",
+       "  -0.343421071767807,\n",
+       "  -0.19432324171066284,\n",
+       "  -1.0158581733703613,\n",
+       "  0.6382966637611389,\n",
+       "  0.009547857567667961,\n",
+       "  -0.16880100965499878,\n",
+       "  -0.42210349440574646,\n",
+       "  0.08941852301359177,\n",
+       "  0.49443307518959045,\n",
+       "  0.6834864020347595,\n",
+       "  0.030288998037576675,\n",
+       "  0.4022229015827179,\n",
+       "  -0.027738414704799652,\n",
+       "  0.5054395198822021,\n",
+       "  0.5111376047134399,\n",
+       "  -0.18553893268108368,\n",
+       "  -0.8887874484062195,\n",
+       "  -0.6932130455970764,\n",
+       "  0.2818927466869354,\n",
+       "  -0.5914751887321472,\n",
+       "  -0.15466520190238953,\n",
+       "  0.020885543897747993,\n",
+       "  -0.3394120931625366,\n",
+       "  0.7122368812561035,\n",
+       "  -0.8371968865394592,\n",
+       "  -0.7580953240394592,\n",
+       "  0.21631324291229248,\n",
+       "  -0.3214702010154724,\n",
+       "  0.10291893780231476,\n",
+       "  -0.1894383281469345,\n",
+       "  0.552446186542511,\n",
+       "  -0.1661849468946457,\n",
+       "  -0.28603285551071167,\n",
+       "  -0.3890632390975952,\n",
+       "  0.8714359998703003,\n",
+       "  0.9080734848976135,\n",
+       "  0.06310735642910004,\n",
+       "  -0.6783433556556702,\n",
+       "  -0.467898428440094,\n",
+       "  -0.8733784556388855,\n",
+       "  -0.8396478295326233,\n",
+       "  0.4398952126502991,\n",
+       "  -0.15299327671527863,\n",
+       "  -0.48063158988952637,\n",
+       "  -0.3609691858291626,\n",
+       "  -0.11896490305662155,\n",
+       "  0.6504183411598206,\n",
+       "  -0.5323073267936707,\n",
+       "  0.5937050580978394,\n",
+       "  1.3630650043487549,\n",
+       "  -1.1628384590148926,\n",
+       "  -0.1730543076992035,\n",
+       "  0.10342907905578613,\n",
+       "  -0.03286043554544449,\n",
+       "  0.2443077713251114,\n",
+       "  -0.13159123063087463,\n",
+       "  0.25179243087768555,\n",
+       "  -0.41535839438438416,\n",
+       "  -0.24177208542823792,\n",
+       "  -0.12448311597108841,\n",
+       "  -0.8177970051765442,\n",
+       "  -1.1557691097259521,\n",
+       "  -1.055833101272583,\n",
+       "  0.47295454144477844,\n",
+       "  1.278720736503601,\n",
+       "  -0.0421457402408123,\n",
+       "  1.6001085042953491,\n",
+       "  -0.3118591904640198,\n",
+       "  -0.501964271068573,\n",
+       "  -0.7178589105606079,\n",
+       "  0.354057639837265,\n",
+       "  0.3875657320022583,\n",
+       "  0.2917666733264923,\n",
+       "  0.9190394878387451,\n",
+       "  0.1699265092611313,\n",
+       "  0.34634047746658325,\n",
+       "  0.3619774878025055,\n",
+       "  0.2515784502029419,\n",
+       "  -0.1314840018749237,\n",
+       "  0.1969815492630005,\n",
+       "  0.21605370938777924,\n",
+       "  -0.29424285888671875,\n",
+       "  -0.25702616572380066,\n",
+       "  0.4314003884792328,\n",
+       "  0.9353189468383789,\n",
+       "  -1.2694830894470215,\n",
+       "  -0.703385055065155,\n",
+       "  -0.29298868775367737,\n",
+       "  -0.03961457684636116,\n",
+       "  -0.6804059147834778,\n",
+       "  -0.938069224357605,\n",
+       "  0.25681132078170776,\n",
+       "  0.34114837646484375,\n",
+       "  0.06630713492631912,\n",
+       "  -0.20925447344779968,\n",
+       "  0.06135372817516327,\n",
+       "  -0.0292774997651577,\n",
+       "  0.9683889150619507,\n",
+       "  -0.1415303349494934,\n",
+       "  0.13003411889076233,\n",
+       "  -0.28229838609695435,\n",
+       "  -0.05650933459401131,\n",
+       "  0.6027146577835083,\n",
+       "  -0.8527910113334656,\n",
+       "  0.8387891054153442,\n",
+       "  -1.0144500732421875,\n",
+       "  -0.13234733045101166,\n",
+       "  0.0887543186545372,\n",
+       "  0.2335500866174698,\n",
+       "  0.5318927764892578,\n",
+       "  0.4429142475128174,\n",
+       "  0.4202386736869812,\n",
+       "  0.7799946665763855,\n",
+       "  -0.2124268263578415,\n",
+       "  0.7880118489265442,\n",
+       "  0.18811221420764923,\n",
+       "  -0.7036977410316467,\n",
+       "  0.5910786986351013,\n",
+       "  -0.41202467679977417,\n",
+       "  -0.8821630477905273,\n",
+       "  -0.47416970133781433,\n",
+       "  0.33798083662986755,\n",
+       "  -0.27297067642211914,\n",
+       "  -0.43055376410484314,\n",
+       "  -0.6825740933418274,\n",
+       "  -0.6926524639129639,\n",
+       "  0.8055598139762878,\n",
+       "  0.08102894574403763,\n",
+       "  -0.4228541851043701,\n",
+       "  0.16037718951702118,\n",
+       "  -0.15351197123527527,\n",
+       "  -0.6214717626571655,\n",
+       "  -0.690116286277771,\n",
+       "  -0.6669543981552124,\n",
+       "  -0.026535583660006523,\n",
+       "  -0.3141920864582062,\n",
+       "  -0.21991942822933197,\n",
+       "  0.08367064595222473,\n",
+       "  -0.2654389441013336,\n",
+       "  -0.4487183392047882,\n",
+       "  0.9583780169487,\n",
+       "  0.016767973080277443,\n",
+       "  1.1328634023666382,\n",
+       "  -0.3838687837123871,\n",
+       "  0.7252568602561951,\n",
+       "  -0.48928102850914,\n",
+       "  -0.8009410500526428,\n",
+       "  -0.48309576511383057,\n",
+       "  0.38519877195358276,\n",
+       "  -0.1801932007074356,\n",
+       "  -0.29743966460227966,\n",
+       "  -0.004791876766830683,\n",
+       "  -0.12718240916728973,\n",
+       "  -0.29024428129196167,\n",
+       "  0.6991103887557983,\n",
+       "  -0.35262465476989746,\n",
+       "  0.09094825387001038,\n",
+       "  -0.19963504374027252,\n",
+       "  -0.00040172284934669733,\n",
+       "  0.4298400282859802,\n",
+       "  0.2996506989002228,\n",
+       "  0.3386493921279907,\n",
+       "  0.7650848031044006,\n",
+       "  1.060438871383667,\n",
+       "  -0.2835727632045746,\n",
+       "  0.33754032850265503,\n",
+       "  -0.5697928071022034,\n",
+       "  -0.11919137090444565,\n",
+       "  -0.9314565062522888,\n",
+       "  0.3563353717327118,\n",
+       "  0.2549656331539154,\n",
+       "  0.2109297662973404,\n",
+       "  -0.456595778465271,\n",
+       "  -0.9328431487083435,\n",
+       "  0.016648896038532257,\n",
+       "  -0.8451475501060486,\n",
+       "  0.5809212923049927,\n",
+       "  -0.340518057346344,\n",
+       "  0.2827947437763214,\n",
+       "  -0.5396698117256165,\n",
+       "  -0.6092702746391296,\n",
+       "  -0.3723966181278229,\n",
+       "  0.6414639949798584,\n",
+       "  0.3107134699821472,\n",
+       "  -0.007445123046636581,\n",
+       "  0.08267766237258911,\n",
+       "  0.12798859179019928,\n",
+       "  -0.2169492542743683,\n",
+       "  -0.559959888458252,\n",
+       "  -0.5217579007148743,\n",
+       "  0.32909470796585083,\n",
+       "  0.7389576435089111,\n",
+       "  -0.293349027633667,\n",
+       "  -0.6930976510047913,\n",
+       "  0.7821656465530396,\n",
+       "  -0.47307252883911133,\n",
+       "  0.2648174464702606,\n",
+       "  -0.2046925574541092,\n",
+       "  -0.6862270832061768,\n",
+       "  -0.6999277472496033,\n",
+       "  -0.4833206534385681,\n",
+       "  0.15186196565628052,\n",
+       "  0.42044275999069214,\n",
+       "  0.4899252653121948,\n",
+       "  -0.06878598779439926,\n",
+       "  0.564720630645752,\n",
+       "  -0.36390984058380127,\n",
+       "  -0.8453814387321472,\n",
+       "  0.24788610637187958,\n",
+       "  -0.7377864122390747,\n",
+       "  -0.5077601075172424,\n",
+       "  0.06311396509408951,\n",
+       "  0.07020704448223114,\n",
+       "  0.2193564623594284,\n",
+       "  0.08405278623104095,\n",
+       "  -1.1775742769241333,\n",
+       "  0.0170441847294569,\n",
+       "  0.029659995809197426,\n",
+       "  0.3503907322883606,\n",
+       "  0.8535836338996887,\n",
+       "  1.0153495073318481,\n",
+       "  -0.008833479136228561,\n",
+       "  0.11853634566068649,\n",
+       "  0.09241313487291336,\n",
+       "  0.49566444754600525,\n",
+       "  0.02248520776629448,\n",
+       "  0.7640588879585266,\n",
+       "  0.03735516965389252,\n",
+       "  -1.245429515838623,\n",
+       "  0.6849268674850464,\n",
+       "  0.12653540074825287,\n",
+       "  0.4803661108016968,\n",
+       "  0.13430093228816986,\n",
+       "  0.07683700323104858,\n",
+       "  0.3195377588272095,\n",
+       "  -0.2754036784172058,\n",
+       "  -0.4229964315891266,\n",
+       "  0.894875168800354,\n",
+       "  -0.5222072005271912,\n",
+       "  -0.1649344265460968,\n",
+       "  0.08378858864307404,\n",
+       "  -0.29044657945632935,\n",
+       "  0.8531003594398499,\n",
+       "  -0.31961607933044434,\n",
+       "  0.12797744572162628,\n",
+       "  0.09183473885059357,\n",
+       "  -0.6410958766937256,\n",
+       "  -0.43033653497695923,\n",
+       "  0.783586859703064,\n",
+       "  1.0653300285339355,\n",
+       "  0.09725117683410645,\n",
+       "  0.17577630281448364,\n",
+       "  0.4870966076850891,\n",
+       "  0.22959446907043457,\n",
+       "  0.12173732370138168,\n",
+       "  -0.9747971296310425,\n",
+       "  -0.38040193915367126,\n",
+       "  0.5408453345298767,\n",
+       "  0.3166840672492981,\n",
+       "  0.32348302006721497,\n",
+       "  0.008488880470395088,\n",
+       "  0.5037934184074402,\n",
+       "  0.8255049586296082,\n",
+       "  -0.37979429960250854,\n",
+       "  -0.07706710696220398,\n",
+       "  0.7456242442131042,\n",
+       "  0.1814427226781845,\n",
+       "  0.11373350769281387,\n",
+       "  0.17987558245658875,\n",
+       "  -0.25761252641677856,\n",
+       "  0.3755275309085846,\n",
+       "  -0.22634661197662354,\n",
+       "  -0.5077285170555115,\n",
+       "  0.020015455782413483,\n",
+       "  -0.49857011437416077,\n",
+       "  0.12688034772872925,\n",
+       "  0.5388888716697693,\n",
+       "  -0.09130289405584335,\n",
+       "  1.0542702674865723,\n",
+       "  -0.33117565512657166,\n",
+       "  -0.03726742044091225,\n",
+       "  -0.9425621032714844,\n",
+       "  -0.0979095920920372,\n",
+       "  0.19087322056293488,\n",
+       "  0.1530478298664093,\n",
+       "  0.03234371542930603,\n",
+       "  0.1964159458875656,\n",
+       "  0.9765700101852417,\n",
+       "  0.15222042798995972,\n",
+       "  -0.2460227906703949,\n",
+       "  0.17485255002975464,\n",
+       "  0.7682655453681946,\n",
+       "  -0.0398302860558033,\n",
+       "  -0.8013843297958374,\n",
+       "  -0.1274305135011673,\n",
+       "  0.26694756746292114,\n",
+       "  0.16433237493038177,\n",
+       "  -0.7932276129722595,\n",
+       "  -0.7979598045349121,\n",
+       "  -1.3931635618209839,\n",
+       "  -0.012929664924740791,\n",
+       "  -0.8024943470954895,\n",
+       "  -0.23012343049049377,\n",
+       "  -0.14787796139717102,\n",
+       "  -1.3017325401306152,\n",
+       "  -0.325692743062973,\n",
+       "  -1.2839562892913818,\n",
+       "  0.2757335603237152,\n",
+       "  -0.2428918182849884,\n",
+       "  0.381331205368042,\n",
+       "  0.610768735408783,\n",
+       "  0.23639538884162903,\n",
+       "  0.22997033596038818,\n",
+       "  1.157219409942627,\n",
+       "  -0.10786467045545578,\n",
+       "  0.7831969857215881,\n",
+       "  0.7697864770889282,\n",
+       "  0.5605380535125732,\n",
+       "  -0.026723943650722504,\n",
+       "  0.45519131422042847,\n",
+       "  0.2872438430786133,\n",
+       "  -0.4689868688583374,\n",
+       "  -0.09962508827447891,\n",
+       "  0.05298158526420593,\n",
+       "  -0.05050082504749298,\n",
+       "  -0.30865341424942017,\n",
+       "  -0.4508135914802551,\n",
+       "  -0.8230398893356323,\n",
+       "  0.7545114755630493,\n",
+       "  0.08302313089370728,\n",
+       "  0.15095211565494537,\n",
+       "  -0.007315643131732941,\n",
+       "  0.35005661845207214,\n",
+       "  -0.027802370488643646,\n",
+       "  -0.7999009490013123,\n",
+       "  -0.18309427797794342,\n",
+       "  -0.32965219020843506,\n",
+       "  -0.716147243976593,\n",
+       "  0.35231006145477295,\n",
+       "  0.31334054470062256,\n",
+       "  0.9026334285736084,\n",
+       "  0.44286203384399414,\n",
+       "  -0.06066688150167465,\n",
+       "  -0.49386537075042725,\n",
+       "  -0.571142852306366,\n",
+       "  -0.42108890414237976,\n",
+       "  -0.8826929926872253,\n",
+       "  0.5461695194244385,\n",
+       "  -0.8487135767936707,\n",
+       "  -0.5901421904563904,\n",
+       "  -0.6019299626350403,\n",
+       "  -0.032040100544691086,\n",
+       "  -0.457055926322937,\n",
+       "  0.4428011476993561,\n",
+       "  -0.8541960716247559,\n",
+       "  -0.32525351643562317,\n",
+       "  0.7125647664070129,\n",
+       "  0.45189979672431946,\n",
+       "  -0.25928154587745667,\n",
+       "  -0.17774581909179688,\n",
+       "  -0.26920250058174133,\n",
+       "  0.08924514800310135,\n",
+       "  0.9944015145301819,\n",
+       "  0.7593095302581787,\n",
+       "  -0.25938305258750916,\n",
+       "  0.3242359459400177,\n",
+       "  -0.34961849451065063,\n",
+       "  -0.47478827834129333,\n",
+       "  -0.06921988725662231,\n",
+       "  -0.7078092694282532,\n",
+       "  0.7564664483070374,\n",
+       "  -0.5934049487113953,\n",
+       "  -0.5741901993751526,\n",
+       "  -0.44621846079826355,\n",
+       "  -0.2329241782426834,\n",
+       "  0.06570033729076385,\n",
+       "  -0.8043128848075867,\n",
+       "  0.3082607686519623,\n",
+       "  0.07662681490182877,\n",
+       "  0.7903819680213928,\n",
+       "  -0.8488594889640808,\n",
+       "  -0.9291868209838867,\n",
+       "  0.16850176453590393,\n",
+       "  -0.2045775055885315,\n",
+       "  -0.41875341534614563,\n",
+       "  0.05377103015780449,\n",
+       "  0.9302248954772949,\n",
+       "  0.1590145081281662,\n",
+       "  0.21007277071475983,\n",
+       "  -0.2307853251695633,\n",
+       "  -0.7894681692123413,\n",
+       "  4.072210788726807,\n",
+       "  1.0314375162124634,\n",
+       "  0.7413455843925476,\n",
+       "  0.2175021767616272,\n",
+       "  0.0460495725274086,\n",
+       "  0.7578788995742798,\n",
+       "  0.09630119055509567,\n",
+       "  0.23811012506484985,\n",
+       "  -0.36347854137420654,\n",
+       "  -0.2232029289007187,\n",
+       "  0.02932274155318737,\n",
+       "  0.564838171005249,\n",
+       "  0.22863909602165222,\n",
+       "  0.12459971755743027,\n",
+       "  0.0018232904840260744,\n",
+       "  0.8779709935188293,\n",
+       "  -0.9465978741645813,\n",
+       "  -0.7080463767051697,\n",
+       "  0.13964389264583588,\n",
+       "  -0.980272114276886,\n",
+       "  -0.7497457265853882,\n",
+       "  -0.3013603687286377,\n",
+       "  0.00335038173943758,\n",
+       "  0.46313101053237915,\n",
+       "  -0.441183865070343,\n",
+       "  -0.3438478708267212,\n",
+       "  0.22290784120559692,\n",
+       "  -0.4461698830127716,\n",
+       "  -0.4505060613155365,\n",
+       "  -0.5350180864334106,\n",
+       "  0.24498435854911804,\n",
+       "  -0.8108664751052856,\n",
+       "  -0.37081730365753174,\n",
+       "  -0.3678787350654602,\n",
+       "  -0.9506158828735352,\n",
+       "  0.4547770917415619,\n",
+       "  0.2541368305683136,\n",
+       "  0.20375360548496246,\n",
+       "  -0.5119951367378235,\n",
+       "  -0.11197996139526367,\n",
+       "  -0.6023352146148682,\n",
+       "  -0.11465101689100266,\n",
+       "  0.9323827624320984,\n",
+       "  -0.4218308925628662,\n",
+       "  0.025832125917077065,\n",
+       "  0.1128021776676178,\n",
+       "  -0.7623777389526367,\n",
+       "  0.21882113814353943,\n",
+       "  -0.1399582177400589,\n",
+       "  -0.9036707878112793,\n",
+       "  0.7563123106956482,\n",
+       "  -0.7850674986839294,\n",
+       "  0.2391638159751892,\n",
+       "  -0.22955968976020813,\n",
+       "  -1.3679088354110718,\n",
+       "  0.316941499710083,\n",
+       "  0.4251406788825989,\n",
+       "  -0.3749549090862274,\n",
+       "  0.13650032877922058,\n",
+       "  0.2597576379776001,\n",
+       "  0.19974054396152496,\n",
+       "  -0.32662948966026306,\n",
+       "  -0.2621956765651703,\n",
+       "  0.3228282332420349,\n",
+       "  -0.4554971754550934,\n",
+       "  0.5398443937301636,\n",
+       "  1.1019084453582764,\n",
+       "  0.7593320608139038,\n",
+       "  -0.5765718221664429,\n",
+       "  -0.015286562032997608,\n",
+       "  -0.2666643261909485,\n",
+       "  ...],\n",
+       " [0.33337298035621643,\n",
+       "  0.02006004936993122,\n",
+       "  0.29406389594078064,\n",
+       "  0.22592930495738983,\n",
+       "  -0.523647665977478,\n",
+       "  0.01782163418829441,\n",
+       "  1.0595035552978516,\n",
+       "  0.5688751935958862,\n",
+       "  0.1603807955980301,\n",
+       "  0.5898828506469727,\n",
+       "  0.3921133875846863,\n",
+       "  -0.19194403290748596,\n",
+       "  0.12333673238754272,\n",
+       "  -0.21691292524337769,\n",
+       "  -0.5172141790390015,\n",
+       "  -0.40508586168289185,\n",
+       "  -0.4508478343486786,\n",
+       "  -0.3571659028530121,\n",
+       "  -0.7934220433235168,\n",
+       "  0.18969739973545074,\n",
+       "  0.33381497859954834,\n",
+       "  1.0246347188949585,\n",
+       "  -1.4730311632156372,\n",
+       "  -0.2654559016227722,\n",
+       "  0.06955422461032867,\n",
+       "  -0.022328363731503487,\n",
+       "  -0.30525442957878113,\n",
+       "  0.03018275834619999,\n",
+       "  0.9212719798088074,\n",
+       "  0.6960930824279785,\n",
+       "  -0.7049258947372437,\n",
+       "  0.15746530890464783,\n",
+       "  -0.13638077676296234,\n",
+       "  -0.9200529456138611,\n",
+       "  -0.7241265773773193,\n",
+       "  -0.3133358955383301,\n",
+       "  -0.23478315770626068,\n",
+       "  -0.5569650530815125,\n",
+       "  -0.18596309423446655,\n",
+       "  -0.8341456055641174,\n",
+       "  0.6043726801872253,\n",
+       "  -0.2477843463420868,\n",
+       "  0.2233496606349945,\n",
+       "  0.006388794630765915,\n",
+       "  -0.7756876349449158,\n",
+       "  -0.19135569036006927,\n",
+       "  -0.15727661550045013,\n",
+       "  -1.0014227628707886,\n",
+       "  0.11967508494853973,\n",
+       "  -0.6124666929244995,\n",
+       "  0.10014550387859344,\n",
+       "  -0.6715226173400879,\n",
+       "  0.11013932526111603,\n",
+       "  0.4542386531829834,\n",
+       "  0.23326599597930908,\n",
+       "  0.45659443736076355,\n",
+       "  0.8691902160644531,\n",
+       "  0.6686016321182251,\n",
+       "  -0.15902860462665558,\n",
+       "  0.6661834120750427,\n",
+       "  -0.16782929003238678,\n",
+       "  0.698865532875061,\n",
+       "  -0.2955860495567322,\n",
+       "  -1.092231035232544,\n",
+       "  -0.015972834080457687,\n",
+       "  -0.08321477472782135,\n",
+       "  -0.3681206703186035,\n",
+       "  -0.9722222089767456,\n",
+       "  0.1314198225736618,\n",
+       "  0.5400716066360474,\n",
+       "  -0.17125047743320465,\n",
+       "  0.17715705931186676,\n",
+       "  -0.5123180747032166,\n",
+       "  -0.6307958364486694,\n",
+       "  -0.14410988986492157,\n",
+       "  0.36386820673942566,\n",
+       "  0.20329363644123077,\n",
+       "  0.06463875621557236,\n",
+       "  -0.045624300837516785,\n",
+       "  0.2660903036594391,\n",
+       "  0.25404325127601624,\n",
+       "  0.778957724571228,\n",
+       "  -0.18303298950195312,\n",
+       "  0.2889940142631531,\n",
+       "  -1.0060813426971436,\n",
+       "  0.12667034566402435,\n",
+       "  0.4112265706062317,\n",
+       "  0.20197828114032745,\n",
+       "  -0.07381415367126465,\n",
+       "  0.15803305804729462,\n",
+       "  -0.23140500485897064,\n",
+       "  0.5384538769721985,\n",
+       "  -0.42067664861679077,\n",
+       "  0.2042783945798874,\n",
+       "  0.5914250612258911,\n",
+       "  0.2336941659450531,\n",
+       "  -0.011780805885791779,\n",
+       "  0.4578266739845276,\n",
+       "  -0.11033887416124344,\n",
+       "  -0.34844693541526794,\n",
+       "  0.5218288898468018,\n",
+       "  0.39677658677101135,\n",
+       "  -0.08914858102798462,\n",
+       "  0.7628657221794128,\n",
+       "  -0.7942704558372498,\n",
+       "  -0.417886883020401,\n",
+       "  0.27624455094337463,\n",
+       "  0.32194775342941284,\n",
+       "  -0.9515729546546936,\n",
+       "  -0.42862173914909363,\n",
+       "  0.6025353670120239,\n",
+       "  -0.01767631061375141,\n",
+       "  0.7204714417457581,\n",
+       "  0.589661717414856,\n",
+       "  0.19199535250663757,\n",
+       "  0.5165079832077026,\n",
+       "  0.4547382593154907,\n",
+       "  1.0152316093444824,\n",
+       "  -0.9116500616073608,\n",
+       "  -0.33246293663978577,\n",
+       "  -0.12730614840984344,\n",
+       "  0.4682310223579407,\n",
+       "  0.14057376980781555,\n",
+       "  0.5323357582092285,\n",
+       "  -0.11350321024656296,\n",
+       "  -0.4165663719177246,\n",
+       "  -0.27480968832969666,\n",
+       "  0.4843340814113617,\n",
+       "  -0.2552838921546936,\n",
+       "  0.027400460094213486,\n",
+       "  -0.10291912406682968,\n",
+       "  -0.3142092227935791,\n",
+       "  0.45550480484962463,\n",
+       "  0.6906976699829102,\n",
+       "  0.38145995140075684,\n",
+       "  0.013644739054143429,\n",
+       "  -0.24501881003379822,\n",
+       "  1.0659372806549072,\n",
+       "  -0.19132722914218903,\n",
+       "  -0.4634144902229309,\n",
+       "  0.502338171005249,\n",
+       "  0.2830981910228729,\n",
+       "  0.23843777179718018,\n",
+       "  1.2106139659881592,\n",
+       "  0.4136737287044525,\n",
+       "  0.2081451267004013,\n",
+       "  -0.29765385389328003,\n",
+       "  -0.022599218413233757,\n",
+       "  -0.6633609533309937,\n",
+       "  0.16462424397468567,\n",
+       "  -0.2663154602050781,\n",
+       "  0.40329116582870483,\n",
+       "  -0.17215271294116974,\n",
+       "  0.575140655040741,\n",
+       "  -0.23595356941223145,\n",
+       "  -0.0679195374250412,\n",
+       "  0.19809095561504364,\n",
+       "  -0.2017083764076233,\n",
+       "  0.703376054763794,\n",
+       "  -0.208828866481781,\n",
+       "  -0.7117382287979126,\n",
+       "  -0.2612796127796173,\n",
+       "  -0.6522277593612671,\n",
+       "  0.19085578620433807,\n",
+       "  -0.21375998854637146,\n",
+       "  1.1422935724258423,\n",
+       "  -0.5978577136993408,\n",
+       "  0.22074031829833984,\n",
+       "  0.47781744599342346,\n",
+       "  0.03307531401515007,\n",
+       "  0.04792780056595802,\n",
+       "  0.22786223888397217,\n",
+       "  -0.08965915441513062,\n",
+       "  -0.07457009702920914,\n",
+       "  0.46671831607818604,\n",
+       "  1.1231400966644287,\n",
+       "  0.17039281129837036,\n",
+       "  -0.4739528298377991,\n",
+       "  0.840653657913208,\n",
+       "  0.3046075105667114,\n",
+       "  -0.23856320977210999,\n",
+       "  0.09542325139045715,\n",
+       "  0.2717638611793518,\n",
+       "  1.0638378858566284,\n",
+       "  0.12824612855911255,\n",
+       "  0.29804855585098267,\n",
+       "  0.2497713565826416,\n",
+       "  -0.009643753059208393,\n",
+       "  -0.4064204692840576,\n",
+       "  -0.5258654952049255,\n",
+       "  -0.3149794638156891,\n",
+       "  0.6216298341751099,\n",
+       "  -0.6467192769050598,\n",
+       "  0.7529037594795227,\n",
+       "  -0.49123141169548035,\n",
+       "  0.36221134662628174,\n",
+       "  -0.2963949143886566,\n",
+       "  -0.3134544789791107,\n",
+       "  -0.5826051235198975,\n",
+       "  -0.9187191128730774,\n",
+       "  -0.05792100727558136,\n",
+       "  0.7655676007270813,\n",
+       "  -0.3502368927001953,\n",
+       "  0.06841688603162766,\n",
+       "  -0.13598032295703888,\n",
+       "  -0.6753174662590027,\n",
+       "  0.6113227009773254,\n",
+       "  1.1845800876617432,\n",
+       "  -0.11031842976808548,\n",
+       "  0.9098318219184875,\n",
+       "  0.5527685284614563,\n",
+       "  0.07846181839704514,\n",
+       "  -0.9813363552093506,\n",
+       "  0.03474795073270798,\n",
+       "  -0.19674032926559448,\n",
+       "  0.2612990736961365,\n",
+       "  0.026111222803592682,\n",
+       "  1.3598994016647339,\n",
+       "  -0.5694597363471985,\n",
+       "  -0.01169208437204361,\n",
+       "  -0.06168972700834274,\n",
+       "  0.5088055729866028,\n",
+       "  0.27369225025177,\n",
+       "  0.8039237856864929,\n",
+       "  0.4718610644340515,\n",
+       "  -0.6337075233459473,\n",
+       "  0.24838368594646454,\n",
+       "  1.4119703769683838,\n",
+       "  0.09402940422296524,\n",
+       "  0.192125141620636,\n",
+       "  -0.21149837970733643,\n",
+       "  0.47530317306518555,\n",
+       "  0.47054359316825867,\n",
+       "  1.0105408430099487,\n",
+       "  0.8663490414619446,\n",
+       "  0.17772014439105988,\n",
+       "  1.0881112813949585,\n",
+       "  0.800692617893219,\n",
+       "  -0.8736886382102966,\n",
+       "  0.4604488015174866,\n",
+       "  -0.06111627444624901,\n",
+       "  -0.013670648448169231,\n",
+       "  0.1469733864068985,\n",
+       "  -0.3231627941131592,\n",
+       "  0.2870139479637146,\n",
+       "  0.3730476200580597,\n",
+       "  -0.12815532088279724,\n",
+       "  0.5387733578681946,\n",
+       "  -0.3937036991119385,\n",
+       "  0.3282574415206909,\n",
+       "  0.20119847357273102,\n",
+       "  0.18447081744670868,\n",
+       "  0.5136070847511292,\n",
+       "  0.4204138219356537,\n",
+       "  -1.2623183727264404,\n",
+       "  -0.03627987578511238,\n",
+       "  -0.29203176498413086,\n",
+       "  0.4513552188873291,\n",
+       "  -0.020403075963258743,\n",
+       "  -0.9387991428375244,\n",
+       "  0.5027630925178528,\n",
+       "  0.09852858632802963,\n",
+       "  0.05215165764093399,\n",
+       "  0.02853984758257866,\n",
+       "  0.6953203082084656,\n",
+       "  0.6391677260398865,\n",
+       "  -0.16501042246818542,\n",
+       "  0.75384920835495,\n",
+       "  -0.3739304542541504,\n",
+       "  -0.4510989189147949,\n",
+       "  -0.23435468971729279,\n",
+       "  -0.6683436036109924,\n",
+       "  -0.4364356994628906,\n",
+       "  -0.5166194438934326,\n",
+       "  -0.6888208389282227,\n",
+       "  -0.3339124321937561,\n",
+       "  0.8124140501022339,\n",
+       "  -0.3124043643474579,\n",
+       "  -0.007011388894170523,\n",
+       "  0.10305935889482498,\n",
+       "  -0.33510252833366394,\n",
+       "  -0.5807340145111084,\n",
+       "  -1.103222370147705,\n",
+       "  0.37464216351509094,\n",
+       "  -0.07387460768222809,\n",
+       "  0.5051655173301697,\n",
+       "  -0.40233567357063293,\n",
+       "  -0.23438723385334015,\n",
+       "  0.48371580243110657,\n",
+       "  0.9854409694671631,\n",
+       "  -0.6379954218864441,\n",
+       "  -0.8572129011154175,\n",
+       "  0.3165505528450012,\n",
+       "  -0.12044452130794525,\n",
+       "  0.09641540795564651,\n",
+       "  -0.09533822536468506,\n",
+       "  -0.1602795571088791,\n",
+       "  0.047207776457071304,\n",
+       "  -0.4326007664203644,\n",
+       "  -1.0536208152770996,\n",
+       "  0.8120434880256653,\n",
+       "  0.4786711037158966,\n",
+       "  -0.5882609486579895,\n",
+       "  -0.1819901019334793,\n",
+       "  -0.45424696803092957,\n",
+       "  0.8017213940620422,\n",
+       "  0.11142898350954056,\n",
+       "  -0.5334643125534058,\n",
+       "  0.4755026400089264,\n",
+       "  0.8635997176170349,\n",
+       "  -0.8725877404212952,\n",
+       "  0.16500402987003326,\n",
+       "  0.4843764901161194,\n",
+       "  0.375041127204895,\n",
+       "  -0.7822120785713196,\n",
+       "  0.2849026620388031,\n",
+       "  -0.0545157715678215,\n",
+       "  0.4773695170879364,\n",
+       "  -1.026876449584961,\n",
+       "  0.1688643991947174,\n",
+       "  -0.40855520963668823,\n",
+       "  -0.25200167298316956,\n",
+       "  -0.2483212649822235,\n",
+       "  0.1072358638048172,\n",
+       "  -0.5030602216720581,\n",
+       "  0.7955505847930908,\n",
+       "  0.5659346580505371,\n",
+       "  -1.4127376079559326,\n",
+       "  0.2981058359146118,\n",
+       "  -0.6198479533195496,\n",
+       "  -0.5340158939361572,\n",
+       "  0.027016988024115562,\n",
+       "  -0.10495337098836899,\n",
+       "  0.7541730999946594,\n",
+       "  -0.37054139375686646,\n",
+       "  -0.21316440403461456,\n",
+       "  0.5282447934150696,\n",
+       "  -0.21311892569065094,\n",
+       "  0.6581853628158569,\n",
+       "  -0.11338408291339874,\n",
+       "  1.4720278978347778,\n",
+       "  -0.4457148611545563,\n",
+       "  0.29888108372688293,\n",
+       "  0.3874196410179138,\n",
+       "  0.8064010739326477,\n",
+       "  0.1078956201672554,\n",
+       "  0.36585867404937744,\n",
+       "  -0.18932294845581055,\n",
+       "  0.17212094366550446,\n",
+       "  0.5691714286804199,\n",
+       "  0.1172683984041214,\n",
+       "  -0.07920059561729431,\n",
+       "  0.01207203883677721,\n",
+       "  -0.4906538426876068,\n",
+       "  -0.5533738732337952,\n",
+       "  0.1900777667760849,\n",
+       "  -0.5938198566436768,\n",
+       "  0.05791061371564865,\n",
+       "  0.529826283454895,\n",
+       "  -0.058250825852155685,\n",
+       "  0.8037002086639404,\n",
+       "  0.2171137034893036,\n",
+       "  0.06018542870879173,\n",
+       "  -0.42023923993110657,\n",
+       "  0.40969744324684143,\n",
+       "  -0.4719778299331665,\n",
+       "  -0.046741679310798645,\n",
+       "  -0.05339540168642998,\n",
+       "  -0.1618456393480301,\n",
+       "  -0.7888380289077759,\n",
+       "  1.0306456089019775,\n",
+       "  -0.2553476393222809,\n",
+       "  -0.4968341886997223,\n",
+       "  0.12717145681381226,\n",
+       "  0.47304674983024597,\n",
+       "  -0.23739096522331238,\n",
+       "  0.6066562533378601,\n",
+       "  0.2889617681503296,\n",
+       "  0.2079630047082901,\n",
+       "  -0.7067514657974243,\n",
+       "  0.17450673878192902,\n",
+       "  0.5637731552124023,\n",
+       "  1.019129991531372,\n",
+       "  -0.28278258442878723,\n",
+       "  0.5833974480628967,\n",
+       "  0.5789215564727783,\n",
+       "  -0.14316393435001373,\n",
+       "  -0.17400890588760376,\n",
+       "  -0.869565486907959,\n",
+       "  -0.2673444449901581,\n",
+       "  -0.799062967300415,\n",
+       "  0.34934860467910767,\n",
+       "  0.3961751461029053,\n",
+       "  0.022633258253335953,\n",
+       "  -1.4608420133590698,\n",
+       "  -0.8705185055732727,\n",
+       "  0.3428339958190918,\n",
+       "  0.4061702787876129,\n",
+       "  0.6089838743209839,\n",
+       "  -0.5418933629989624,\n",
+       "  0.6915159225463867,\n",
+       "  1.154362678527832,\n",
+       "  0.4530835449695587,\n",
+       "  0.9654828310012817,\n",
+       "  0.3842657506465912,\n",
+       "  0.14391981065273285,\n",
+       "  -0.5368731021881104,\n",
+       "  0.2777368426322937,\n",
+       "  0.23602232336997986,\n",
+       "  -0.8527593612670898,\n",
+       "  -0.7937656044960022,\n",
+       "  -0.5162080526351929,\n",
+       "  -0.4528389573097229,\n",
+       "  0.18370385468006134,\n",
+       "  0.6006118655204773,\n",
+       "  0.2790478467941284,\n",
+       "  -0.8608324527740479,\n",
+       "  -0.29005110263824463,\n",
+       "  -0.2544880509376526,\n",
+       "  0.1620083600282669,\n",
+       "  -0.6014496088027954,\n",
+       "  -0.03847014158964157,\n",
+       "  -0.6235532760620117,\n",
+       "  0.5749123096466064,\n",
+       "  0.25629138946533203,\n",
+       "  -1.0107581615447998,\n",
+       "  0.25732943415641785,\n",
+       "  -0.9812096953392029,\n",
+       "  0.48953700065612793,\n",
+       "  0.43293046951293945,\n",
+       "  0.24938367307186127,\n",
+       "  -0.41339924931526184,\n",
+       "  -0.47098976373672485,\n",
+       "  -0.04142199829220772,\n",
+       "  -0.1850498467683792,\n",
+       "  0.203985795378685,\n",
+       "  0.12312035262584686,\n",
+       "  0.331148236989975,\n",
+       "  0.6974695324897766,\n",
+       "  -1.119771957397461,\n",
+       "  0.6848002672195435,\n",
+       "  0.5144025683403015,\n",
+       "  0.16741561889648438,\n",
+       "  0.33643102645874023,\n",
+       "  0.47946038842201233,\n",
+       "  0.21024130284786224,\n",
+       "  0.3091551959514618,\n",
+       "  0.7789376378059387,\n",
+       "  -0.80717933177948,\n",
+       "  -0.3515343964099884,\n",
+       "  0.20816831290721893,\n",
+       "  -1.1832785606384277,\n",
+       "  0.32957813143730164,\n",
+       "  -0.6137903332710266,\n",
+       "  0.29530778527259827,\n",
+       "  -0.1956826150417328,\n",
+       "  -0.858967661857605,\n",
+       "  0.21364042162895203,\n",
+       "  0.5025348663330078,\n",
+       "  -0.8412559032440186,\n",
+       "  -0.37321245670318604,\n",
+       "  -0.12380901724100113,\n",
+       "  0.19590704143047333,\n",
+       "  -0.3227238953113556,\n",
+       "  -0.4664977490901947,\n",
+       "  1.2543898820877075,\n",
+       "  0.4810763895511627,\n",
+       "  -0.4362419545650482,\n",
+       "  0.6109074950218201,\n",
+       "  0.4369519054889679,\n",
+       "  -0.16665898263454437,\n",
+       "  0.15172532200813293,\n",
+       "  0.19131337106227875,\n",
+       "  -0.4149361848831177,\n",
+       "  0.23100414872169495,\n",
+       "  -0.8373755812644958,\n",
+       "  0.32446107268333435,\n",
+       "  -0.31461361050605774,\n",
+       "  -0.6101260781288147,\n",
+       "  1.097629189491272,\n",
+       "  -0.12076549977064133,\n",
+       "  0.19591975212097168,\n",
+       "  -0.33004486560821533,\n",
+       "  -0.5569248795509338,\n",
+       "  -0.16055253148078918,\n",
+       "  -1.1408393383026123,\n",
+       "  -0.4026479721069336,\n",
+       "  0.38586753606796265,\n",
+       "  -0.07469676434993744,\n",
+       "  0.3253757059574127,\n",
+       "  -0.4475138783454895,\n",
+       "  0.14933137595653534,\n",
+       "  0.20228543877601624,\n",
+       "  -0.32332006096839905,\n",
+       "  -0.22193846106529236,\n",
+       "  -0.49372151494026184,\n",
+       "  -0.47194990515708923,\n",
+       "  0.7426949143409729,\n",
+       "  0.20321024954319,\n",
+       "  -0.06921922415494919,\n",
+       "  0.6166821718215942,\n",
+       "  -0.42217525839805603,\n",
+       "  -0.6130588054656982,\n",
+       "  0.2502304017543793,\n",
+       "  0.27586495876312256,\n",
+       "  -0.6323974132537842,\n",
+       "  -0.4165205955505371,\n",
+       "  -0.09528110176324844,\n",
+       "  -0.38591331243515015,\n",
+       "  -0.3825629651546478,\n",
+       "  -0.05458390340209007,\n",
+       "  0.36158621311187744,\n",
+       "  -0.6488738656044006,\n",
+       "  -0.33502787351608276,\n",
+       "  -0.03957970067858696,\n",
+       "  0.5453405976295471,\n",
+       "  -0.523015558719635,\n",
+       "  -0.4035367965698242,\n",
+       "  -0.4531565010547638,\n",
+       "  0.6744226813316345,\n",
+       "  0.5671007037162781,\n",
+       "  -1.2616639137268066,\n",
+       "  0.3643752932548523,\n",
+       "  0.11575832217931747,\n",
+       "  -0.6785139441490173,\n",
+       "  0.3379829525947571,\n",
+       "  -0.09837386757135391,\n",
+       "  -0.534118115901947,\n",
+       "  -0.5068942308425903,\n",
+       "  -0.3973032534122467,\n",
+       "  -0.020721128210425377,\n",
+       "  -0.6782963275909424,\n",
+       "  -0.17098325490951538,\n",
+       "  0.3800031542778015,\n",
+       "  -0.23224514722824097,\n",
+       "  -0.08875378221273422,\n",
+       "  0.3050841689109802,\n",
+       "  -0.44239193201065063,\n",
+       "  0.2886126637458801,\n",
+       "  -0.2797392010688782,\n",
+       "  -0.48867833614349365,\n",
+       "  0.07997419685125351,\n",
+       "  -0.1064998134970665,\n",
+       "  -0.6894057393074036,\n",
+       "  -0.2610807716846466,\n",
+       "  -0.08244015276432037,\n",
+       "  0.725700855255127,\n",
+       "  1.6280871629714966,\n",
+       "  -0.34129852056503296,\n",
+       "  -0.29829180240631104,\n",
+       "  0.2138652354478836,\n",
+       "  0.8792173266410828,\n",
+       "  0.22503052651882172,\n",
+       "  0.49973824620246887,\n",
+       "  -0.08723818510770798,\n",
+       "  -0.6351423859596252,\n",
+       "  0.66599041223526,\n",
+       "  -0.06931690126657486,\n",
+       "  0.11845126748085022,\n",
+       "  0.054412808269262314,\n",
+       "  -0.2929384112358093,\n",
+       "  0.06840210407972336,\n",
+       "  -0.1983087807893753,\n",
+       "  -0.12743064761161804,\n",
+       "  -0.19372841715812683,\n",
+       "  -0.8743732571601868,\n",
+       "  -0.16913680732250214,\n",
+       "  0.17443998157978058,\n",
+       "  0.6963918805122375,\n",
+       "  -0.4569453299045563,\n",
+       "  -0.33058682084083557,\n",
+       "  -0.5040510296821594,\n",
+       "  0.4870394170284271,\n",
+       "  1.013931393623352,\n",
+       "  0.17772573232650757,\n",
+       "  -0.859871506690979,\n",
+       "  -0.6354172229766846,\n",
+       "  -0.7394052147865295,\n",
+       "  -1.0134317874908447,\n",
+       "  0.21716497838497162,\n",
+       "  -0.5441824197769165,\n",
+       "  0.07656727731227875,\n",
+       "  -0.8050359487533569,\n",
+       "  -0.38746634125709534,\n",
+       "  0.6108992695808411,\n",
+       "  0.025348778814077377,\n",
+       "  0.0554591529071331,\n",
+       "  1.1192638874053955,\n",
+       "  -0.46420106291770935,\n",
+       "  -0.09360028058290482,\n",
+       "  -0.8145939111709595,\n",
+       "  0.5652071833610535,\n",
+       "  0.5288896560668945,\n",
+       "  -0.47737547755241394,\n",
+       "  0.106320321559906,\n",
+       "  -0.03591075912117958,\n",
+       "  -1.0859755277633667,\n",
+       "  0.14692366123199463,\n",
+       "  -0.7618046402931213,\n",
+       "  -0.8747251033782959,\n",
+       "  -0.9018937945365906,\n",
+       "  0.34619826078414917,\n",
+       "  0.4967249631881714,\n",
+       "  -0.3446800112724304,\n",
+       "  0.6009508371353149,\n",
+       "  -0.5040149092674255,\n",
+       "  -0.2535114288330078,\n",
+       "  -0.9940255880355835,\n",
+       "  0.9777451157569885,\n",
+       "  1.0061124563217163,\n",
+       "  0.43243682384490967,\n",
+       "  0.798133134841919,\n",
+       "  -0.16374383866786957,\n",
+       "  -0.09608769416809082,\n",
+       "  0.8203686475753784,\n",
+       "  -0.08175600320100784,\n",
+       "  -1.0440312623977661,\n",
+       "  0.0528155192732811,\n",
+       "  1.4948172569274902,\n",
+       "  -0.4558491110801697,\n",
+       "  -0.9544349312782288,\n",
+       "  0.9710138440132141,\n",
+       "  0.7928891181945801,\n",
+       "  -0.7367203235626221,\n",
+       "  -0.3821394443511963,\n",
+       "  0.5050479173660278,\n",
+       "  -0.24570345878601074,\n",
+       "  -0.5429352521896362,\n",
+       "  -0.5734038949012756,\n",
+       "  0.4032129943370819,\n",
+       "  -0.09947071224451065,\n",
+       "  -0.07196611166000366,\n",
+       "  0.08138509094715118,\n",
+       "  0.08501191437244415,\n",
+       "  0.692768394947052,\n",
+       "  0.516019880771637,\n",
+       "  -0.23890283703804016,\n",
+       "  -0.3930414319038391,\n",
+       "  -0.32676461338996887,\n",
+       "  -0.5023223757743835,\n",
+       "  1.117282748222351,\n",
+       "  -1.1511528491973877,\n",
+       "  0.2514539361000061,\n",
+       "  -0.4545832872390747,\n",
+       "  0.14742887020111084,\n",
+       "  0.5285033583641052,\n",
+       "  0.04394351318478584,\n",
+       "  1.0828551054000854,\n",
+       "  -0.0893108919262886,\n",
+       "  -0.16613946855068207,\n",
+       "  0.02459716983139515,\n",
+       "  -0.060437265783548355,\n",
+       "  0.7265113592147827,\n",
+       "  -0.04100891575217247,\n",
+       "  -0.13135457038879395,\n",
+       "  0.5610867738723755,\n",
+       "  -0.46130144596099854,\n",
+       "  -0.5634089112281799,\n",
+       "  -0.3235207200050354,\n",
+       "  0.2439909428358078,\n",
+       "  -0.37141555547714233,\n",
+       "  -0.22560814023017883,\n",
+       "  -0.49496787786483765,\n",
+       "  0.22981230914592743,\n",
+       "  -0.28156283497810364,\n",
+       "  0.6008853912353516,\n",
+       "  -0.597093939781189,\n",
+       "  -0.2577124536037445,\n",
+       "  -0.6199463605880737,\n",
+       "  -1.0368645191192627,\n",
+       "  -0.4652043282985687,\n",
+       "  -0.15111424028873444,\n",
+       "  0.18776163458824158,\n",
+       "  -0.4463488757610321,\n",
+       "  0.6040583252906799,\n",
+       "  -0.06638869643211365,\n",
+       "  -0.34379249811172485,\n",
+       "  0.35486629605293274,\n",
+       "  0.551963210105896,\n",
+       "  -0.06376373767852783,\n",
+       "  0.6461917161941528,\n",
+       "  -0.5193460583686829,\n",
+       "  0.04135504737496376,\n",
+       "  -0.4560208022594452,\n",
+       "  -0.09819166362285614,\n",
+       "  -0.5202165842056274,\n",
+       "  0.3710121810436249,\n",
+       "  -0.5888710021972656,\n",
+       "  0.8580431938171387,\n",
+       "  -0.11344252526760101,\n",
+       "  0.3706965744495392,\n",
+       "  0.032807596027851105,\n",
+       "  0.5074489116668701,\n",
+       "  0.3968987762928009,\n",
+       "  0.4815812408924103,\n",
+       "  0.07075202465057373,\n",
+       "  -0.6092419624328613,\n",
+       "  0.0931212455034256,\n",
+       "  0.8402712345123291,\n",
+       "  0.41422921419143677,\n",
+       "  0.5295222997665405,\n",
+       "  0.3915819525718689,\n",
+       "  -0.03370828554034233,\n",
+       "  0.1485697329044342,\n",
+       "  -0.9483530521392822,\n",
+       "  -0.5270420908927917,\n",
+       "  -0.5873691439628601,\n",
+       "  -0.12930329144001007,\n",
+       "  0.12210045009851456,\n",
+       "  -0.2616996765136719,\n",
+       "  -0.9335662722587585,\n",
+       "  -1.307065725326538,\n",
+       "  -0.05007448419928551,\n",
+       "  -0.5319976806640625,\n",
+       "  0.10045923292636871,\n",
+       "  -0.4464053809642792,\n",
+       "  -0.33466365933418274,\n",
+       "  -0.1945812702178955,\n",
+       "  0.3344098925590515,\n",
+       "  0.48698386549949646,\n",
+       "  0.7741599678993225,\n",
+       "  0.06624109297990799,\n",
+       "  0.2849924862384796,\n",
+       "  -0.02437439002096653,\n",
+       "  0.34459421038627625,\n",
+       "  0.48707157373428345,\n",
+       "  -0.0011744890362024307,\n",
+       "  -0.11979769170284271,\n",
+       "  0.12876878678798676,\n",
+       "  0.5217507481575012,\n",
+       "  -0.5782056450843811,\n",
+       "  -0.049100663512945175,\n",
+       "  0.5967895984649658,\n",
+       "  -0.32750576734542847,\n",
+       "  1.295275092124939,\n",
+       "  0.23809798061847687,\n",
+       "  -0.8720280528068542,\n",
+       "  -0.8907445669174194,\n",
+       "  0.6736933588981628,\n",
+       "  0.5673532485961914,\n",
+       "  -0.04438159614801407,\n",
+       "  0.35714101791381836,\n",
+       "  -0.9200810194015503,\n",
+       "  0.03122362680733204,\n",
+       "  -0.6224260330200195,\n",
+       "  -0.2492886185646057,\n",
+       "  0.4913763701915741,\n",
+       "  -0.9695414304733276,\n",
+       "  -0.16624414920806885,\n",
+       "  0.16488976776599884,\n",
+       "  -0.5543433427810669,\n",
+       "  -0.0014817871851846576,\n",
+       "  -0.11340277642011642,\n",
+       "  -0.7348063588142395,\n",
+       "  -0.13255560398101807,\n",
+       "  -0.5947654843330383,\n",
+       "  0.6416608691215515,\n",
+       "  0.11564739793539047,\n",
+       "  0.5187666416168213,\n",
+       "  0.13580633699893951,\n",
+       "  -0.10638488084077835,\n",
+       "  -0.4954569637775421,\n",
+       "  -0.3444867730140686,\n",
+       "  0.1501612365245819,\n",
+       "  0.28334030508995056,\n",
+       "  -0.18209415674209595,\n",
+       "  -0.7256135940551758,\n",
+       "  0.09097934514284134,\n",
+       "  0.08745330572128296,\n",
+       "  0.2728079557418823,\n",
+       "  -0.7380597591400146,\n",
+       "  -0.30025893449783325,\n",
+       "  0.7116866707801819,\n",
+       "  -0.4461795389652252,\n",
+       "  -0.01990511454641819,\n",
+       "  0.6194266080856323,\n",
+       "  -0.18746225535869598,\n",
+       "  0.2138487994670868,\n",
+       "  -0.14399324357509613,\n",
+       "  -0.5129393935203552,\n",
+       "  0.7855989933013916,\n",
+       "  -0.2378549575805664,\n",
+       "  0.22164812684059143,\n",
+       "  -0.37670761346817017,\n",
+       "  -0.6745481491088867,\n",
+       "  -0.5170747637748718,\n",
+       "  0.46567031741142273,\n",
+       "  1.0807216167449951,\n",
+       "  0.9626607894897461,\n",
+       "  0.14403720200061798,\n",
+       "  0.0271042101085186,\n",
+       "  0.44585588574409485,\n",
+       "  -0.7525822520256042,\n",
+       "  -0.793507993221283,\n",
+       "  -0.4639089107513428,\n",
+       "  0.3724289834499359,\n",
+       "  0.6706063151359558,\n",
+       "  0.007857647724449635,\n",
+       "  0.07323038578033447,\n",
+       "  0.08483569324016571,\n",
+       "  0.7494832873344421,\n",
+       "  -0.6630513668060303,\n",
+       "  -0.6523663401603699,\n",
+       "  0.22919443249702454,\n",
+       "  -0.6444677114486694,\n",
+       "  -0.20680606365203857,\n",
+       "  0.31079399585723877,\n",
+       "  0.16374602913856506,\n",
+       "  0.8246950507164001,\n",
+       "  0.24202780425548553,\n",
+       "  -0.2570505440235138,\n",
+       "  0.06788535416126251,\n",
+       "  -0.7197138667106628,\n",
+       "  -0.14464499056339264,\n",
+       "  0.075093574821949,\n",
+       "  -0.35472220182418823,\n",
+       "  0.6398672461509705,\n",
+       "  -1.0748943090438843,\n",
+       "  0.5152992606163025,\n",
+       "  -0.4245350956916809,\n",
+       "  -0.5303300023078918,\n",
+       "  -0.7421443462371826,\n",
+       "  0.4181268811225891,\n",
+       "  0.17719054222106934,\n",
+       "  0.6649417877197266,\n",
+       "  0.7067188024520874,\n",
+       "  0.17166191339492798,\n",
+       "  0.824521541595459,\n",
+       "  0.22738133370876312,\n",
+       "  0.07140923291444778,\n",
+       "  0.4856291711330414,\n",
+       "  -0.8680378794670105,\n",
+       "  -0.9694925546646118,\n",
+       "  -0.2650892734527588,\n",
+       "  -0.2923256456851959,\n",
+       "  -0.40910470485687256,\n",
+       "  -0.791467547416687,\n",
+       "  -0.9966763854026794,\n",
+       "  0.35533055663108826,\n",
+       "  0.28326791524887085,\n",
+       "  -0.1573113203048706,\n",
+       "  0.4080241918563843,\n",
+       "  -0.6599385142326355,\n",
+       "  -0.048158757388591766,\n",
+       "  -0.8654828071594238,\n",
+       "  0.7412445545196533,\n",
+       "  -0.059746816754341125,\n",
+       "  -0.2391999065876007,\n",
+       "  1.013134241104126,\n",
+       "  -0.2184017300605774,\n",
+       "  0.32816949486732483,\n",
+       "  0.8563316464424133,\n",
+       "  -0.5475587844848633,\n",
+       "  0.4314652979373932,\n",
+       "  0.5650091171264648,\n",
+       "  0.6654657125473022,\n",
+       "  0.37515509128570557,\n",
+       "  0.6548658013343811,\n",
+       "  0.5707045197486877,\n",
+       "  -0.5134177803993225,\n",
+       "  -0.3254169523715973,\n",
+       "  0.058681562542915344,\n",
+       "  -0.014952561818063259,\n",
+       "  -1.0734052658081055,\n",
+       "  0.19492284953594208,\n",
+       "  -0.41136619448661804,\n",
+       "  -0.05579788610339165,\n",
+       "  -0.42256245017051697,\n",
+       "  0.038446128368377686,\n",
+       "  -0.4254162907600403,\n",
+       "  0.5091780424118042,\n",
+       "  0.10499109327793121,\n",
+       "  -0.7356489896774292,\n",
+       "  -0.38812193274497986,\n",
+       "  -0.11899396777153015,\n",
+       "  -0.07734769582748413,\n",
+       "  0.7848846912384033,\n",
+       "  0.517977237701416,\n",
+       "  0.9205548167228699,\n",
+       "  0.6229963302612305,\n",
+       "  0.554986298084259,\n",
+       "  -0.4912668466567993,\n",
+       "  0.22338858246803284,\n",
+       "  0.4977974593639374,\n",
+       "  -0.5370557308197021,\n",
+       "  0.22506436705589294,\n",
+       "  -0.36914753913879395,\n",
+       "  -0.6461860537528992,\n",
+       "  -0.05157399922609329,\n",
+       "  -0.5574749708175659,\n",
+       "  -0.1268477439880371,\n",
+       "  -0.19992513954639435,\n",
+       "  -0.3653377890586853,\n",
+       "  -0.6331583261489868,\n",
+       "  0.04171421006321907,\n",
+       "  0.7474424242973328,\n",
+       "  -0.010283359326422215,\n",
+       "  0.31586945056915283,\n",
+       "  -0.39855462312698364,\n",
+       "  0.4816909730434418,\n",
+       "  0.9028955698013306,\n",
+       "  0.8125403523445129,\n",
+       "  -0.8311466574668884,\n",
+       "  0.4947796165943146,\n",
+       "  0.08468551933765411,\n",
+       "  -0.5357757210731506,\n",
+       "  -0.20605307817459106,\n",
+       "  -0.6768448948860168,\n",
+       "  0.5313697457313538,\n",
+       "  -0.22020414471626282,\n",
+       "  0.21218667924404144,\n",
+       "  -0.61190265417099,\n",
+       "  -0.28624528646469116,\n",
+       "  -0.2993525564670563,\n",
+       "  -0.39397233724594116,\n",
+       "  -0.5008349418640137,\n",
+       "  0.7934759855270386,\n",
+       "  0.25255754590034485,\n",
+       "  -0.5300459265708923,\n",
+       "  -0.8620027899742126,\n",
+       "  -0.3550799489021301,\n",
+       "  -0.5558770298957825,\n",
+       "  -0.1285102367401123,\n",
+       "  -0.4108595550060272,\n",
+       "  0.8588772416114807,\n",
+       "  0.6698674559593201,\n",
+       "  0.02788524143397808,\n",
+       "  0.6135531663894653,\n",
+       "  -1.2352819442749023,\n",
+       "  4.117743492126465,\n",
+       "  0.5004256963729858,\n",
+       "  0.8554301261901855,\n",
+       "  -0.24860478937625885,\n",
+       "  -0.09161481261253357,\n",
+       "  0.5994160771369934,\n",
+       "  -0.26748740673065186,\n",
+       "  -0.08047442138195038,\n",
+       "  -0.29965639114379883,\n",
+       "  -0.8341971635818481,\n",
+       "  0.08606543391942978,\n",
+       "  0.024018365889787674,\n",
+       "  0.22074256837368011,\n",
+       "  0.04627253860235214,\n",
+       "  0.0013079888885840774,\n",
+       "  0.5470229387283325,\n",
+       "  -0.22071290016174316,\n",
+       "  -0.49633893370628357,\n",
+       "  0.12132851779460907,\n",
+       "  -0.29538801312446594,\n",
+       "  -0.1026589497923851,\n",
+       "  0.33525869250297546,\n",
+       "  -0.0020568848121911287,\n",
+       "  -0.06655574589967728,\n",
+       "  0.10691098123788834,\n",
+       "  -0.26251381635665894,\n",
+       "  0.9879724979400635,\n",
+       "  -0.39358532428741455,\n",
+       "  -0.7269737124443054,\n",
+       "  -0.30490443110466003,\n",
+       "  -0.38031333684921265,\n",
+       "  -0.30638155341148376,\n",
+       "  -0.4956100881099701,\n",
+       "  0.016653066501021385,\n",
+       "  -0.9541082382202148,\n",
+       "  0.40978488326072693,\n",
+       "  0.1490773856639862,\n",
+       "  0.06736554950475693,\n",
+       "  -0.7975549101829529,\n",
+       "  0.38396647572517395,\n",
+       "  -0.3804899752140045,\n",
+       "  0.06215175241231918,\n",
+       "  0.8273525238037109,\n",
+       "  -0.8432930707931519,\n",
+       "  -0.05744561553001404,\n",
+       "  0.24414527416229248,\n",
+       "  -0.6568121910095215,\n",
+       "  0.4030216932296753,\n",
+       "  0.06649532914161682,\n",
+       "  -0.47736960649490356,\n",
+       "  0.8090847134590149,\n",
+       "  -0.4633845388889313,\n",
+       "  0.2599547207355499,\n",
+       "  -0.9576112031936646,\n",
+       "  -0.7422605156898499,\n",
+       "  -0.02015363611280918,\n",
+       "  0.20850639045238495,\n",
+       "  -0.22161859273910522,\n",
+       "  -0.36194825172424316,\n",
+       "  0.2561335563659668,\n",
+       "  -0.03479013219475746,\n",
+       "  -0.35598382353782654,\n",
+       "  -0.2267131507396698,\n",
+       "  0.5062740445137024,\n",
+       "  -0.8605638742446899,\n",
+       "  0.3181823790073395,\n",
+       "  0.5258446335792542,\n",
+       "  -0.03991806507110596,\n",
+       "  -0.6525282263755798,\n",
+       "  0.28436800837516785,\n",
+       "  -0.17757639288902283,\n",
+       "  ...]]"
+      ]
+     },
+     "execution_count": 3,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "encoder(\"Hey\")"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Now we define the `RouteLayer`. When called, the route layer will consume text (a query) and output the category (`Route`) it belongs to — to initialize a `RouteLayer` we need our `encoder` model and a list of `routes`."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 5,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "\u001b[32m2024-04-14 20:02:32 INFO semantic_router.utils.logger local\u001b[0m\n"
+     ]
+    }
+   ],
+   "source": [
+    "from semantic_router.layer import RouteLayer\n",
+    "\n",
+    "rl = RouteLayer(encoder=encoder, routes=routes)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "We can check the dimensionality of our vectors by looking at the `index` attribute of the `RouteLayer`."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 6,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "LocalIndex(index=array([[ 0.37762564,  0.37923592,  0.04006954, ...,  0.2910035 ,\n",
+       "         0.14261879, -0.14989774],\n",
+       "       [ 0.14489685, -0.47280183, -0.13473961, ..., -0.184137  ,\n",
+       "        -0.44280073, -0.96940869],\n",
+       "       [ 1.16709912,  0.38906148,  0.24399863, ...,  0.03619115,\n",
+       "        -0.00167309,  0.50425595],\n",
+       "       ...,\n",
+       "       [-0.64046752,  0.45156148, -0.27317011, ..., -0.64851284,\n",
+       "        -0.10258984,  0.15441738],\n",
+       "       [-0.11908327,  0.4233726 , -0.29102552, ..., -0.69622546,\n",
+       "         0.27602831,  0.2030668 ],\n",
+       "       [-0.06046702, -0.18556708, -0.45608515, ..., -0.86009502,\n",
+       "        -0.01424424, -0.489003  ]]), routes=array(['politics', 'politics', 'politics', 'politics', 'politics',\n",
+       "       'politics', 'chitchat', 'chitchat', 'chitchat', 'chitchat',\n",
+       "       'chitchat'], dtype='<U8'), utterances=array([\"isn't politics the best thing ever\",\n",
+       "       \"why don't you tell me about your political opinions\",\n",
+       "       \"don't you just love the president\",\n",
+       "       \"don't you just hate the president\",\n",
+       "       \"they're going to destroy this country!\",\n",
+       "       'they will save the country!', \"how's the weather today?\",\n",
+       "       'how are things going?', 'lovely weather today',\n",
+       "       'the weather is horrendous', \"let's go to the chippy\"],\n",
+       "      dtype='<U51'), dimensions=None, type='local')"
+      ]
+     },
+     "execution_count": 6,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "rl.index"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "We do have 1024-dimensional vectors. Now let's test them:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 7,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "RouteChoice(name='politics', function_call=None, similarity_score=None)"
+      ]
+     },
+     "execution_count": 7,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "rl(\"tell me about your political opinions?\")"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 8,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "RouteChoice(name='chitchat', function_call=None, similarity_score=None)"
+      ]
+     },
+     "execution_count": 8,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "rl(\"how's the weather today?\")"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Both are classified accurately, what if we send a query that is unrelated to our existing `Route` objects?"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 9,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "RouteChoice(name=None, function_call=None, similarity_score=None)"
+      ]
+     },
+     "execution_count": 9,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "rl(\"I'm interested in learning about llama 2\")"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "In this case, we return `None` because no matches were identified. We always recommend optimizing your `RouteLayer` for optimal performance, you can see how in [this notebook](https://github.com/aurelio-labs/semantic-router/blob/main/docs/06-threshold-optimization.ipynb)."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "---"
+   ]
+  }
+ ],
+ "metadata": {
+  "kernelspec": {
+   "display_name": "decision-layer",
+   "language": "python",
+   "name": "python3"
+  },
+  "language_info": {
+   "codemirror_mode": {
+    "name": "ipython",
+    "version": 3
+   },
+   "file_extension": ".py",
+   "mimetype": "text/x-python",
+   "name": "python",
+   "nbconvert_exporter": "python",
+   "pygments_lexer": "ipython3",
+   "version": "3.12.2"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/docs/encoders/huggingface.ipynb b/docs/encoders/huggingface.ipynb
index f0b4b8ba1ecacb2b73db9d75969de71f67b88bd9..cd553a75d261fee9a2327045c898e03e99351dbf 100644
--- a/docs/encoders/huggingface.ipynb
+++ b/docs/encoders/huggingface.ipynb
@@ -53,9 +53,18 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 1,
+   "execution_count": 2,
    "metadata": {},
-   "outputs": [],
+   "outputs": [
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "d:\\Program_Installation\\anaconda\\envs\\testenv\\Lib\\site-packages\\tqdm\\auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n",
+      "  from .autonotebook import tqdm as notebook_tqdm\n"
+     ]
+    }
+   ],
    "source": [
     "from semantic_router import Route\n",
     "\n",
@@ -88,7 +97,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 2,
+   "execution_count": 3,
    "metadata": {},
    "outputs": [],
    "source": [
@@ -115,21 +124,19 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 3,
+   "execution_count": 4,
    "metadata": {},
    "outputs": [
     {
      "name": "stderr",
      "output_type": "stream",
      "text": [
-      "/Users/jamesbriggs/opt/anaconda3/envs/decision-layer/lib/python3.11/site-packages/tqdm/auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n",
-      "  from .autonotebook import tqdm as notebook_tqdm\n",
-      "tokenizer_config.json: 100%|██████████| 350/350 [00:00<00:00, 1.06MB/s]\n",
-      "vocab.txt: 100%|██████████| 232k/232k [00:00<00:00, 1.05MB/s]\n",
-      "tokenizer.json: 100%|██████████| 466k/466k [00:00<00:00, 1.43MB/s]\n",
-      "special_tokens_map.json: 100%|██████████| 112/112 [00:00<00:00, 386kB/s]\n",
-      "config.json: 100%|██████████| 612/612 [00:00<00:00, 2.90MB/s]\n",
-      "pytorch_model.bin: 100%|██████████| 90.9M/90.9M [00:01<00:00, 63.2MB/s]\n"
+      "tokenizer_config.json: 100%|██████████| 350/350 [00:00<?, ?B/s] \n",
+      "vocab.txt: 100%|██████████| 232k/232k [00:00<00:00, 950kB/s]\n",
+      "tokenizer.json: 100%|██████████| 466k/466k [00:00<00:00, 630kB/s]\n",
+      "special_tokens_map.json: 100%|██████████| 112/112 [00:00<?, ?B/s] \n",
+      "config.json: 100%|██████████| 612/612 [00:00<?, ?B/s] \n",
+      "model.safetensors: 100%|██████████| 90.9M/90.9M [00:03<00:00, 25.8MB/s]\n"
      ]
     }
    ],
@@ -139,6 +146,409 @@
     "encoder = HuggingFaceEncoder()"
    ]
   },
+  {
+   "cell_type": "code",
+   "execution_count": 11,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "[[-0.11423865705728531,\n",
+       "  0.013737470842897892,\n",
+       "  0.05483824759721756,\n",
+       "  0.02612205408513546,\n",
+       "  0.03366684541106224,\n",
+       "  -0.0807342678308487,\n",
+       "  0.1294635385274887,\n",
+       "  0.03305264189839363,\n",
+       "  -0.02904639206826687,\n",
+       "  -0.04729180410504341,\n",
+       "  -0.01743963174521923,\n",
+       "  0.010834690183401108,\n",
+       "  -0.013411852531135082,\n",
+       "  -0.002171672647818923,\n",
+       "  0.01874753087759018,\n",
+       "  0.00762708717957139,\n",
+       "  0.025326967239379883,\n",
+       "  -0.10684280842542648,\n",
+       "  -0.09309743344783783,\n",
+       "  0.06578213721513748,\n",
+       "  0.03600294888019562,\n",
+       "  0.030101895332336426,\n",
+       "  0.010903903283178806,\n",
+       "  -0.014277834445238113,\n",
+       "  -0.05480341985821724,\n",
+       "  -0.046608816832304,\n",
+       "  0.03811933100223541,\n",
+       "  0.09334418922662735,\n",
+       "  -0.08844338357448578,\n",
+       "  -0.00015365486615337431,\n",
+       "  -0.05805235356092453,\n",
+       "  0.040658798068761826,\n",
+       "  0.03602350875735283,\n",
+       "  -0.00012040344881825149,\n",
+       "  0.0014777182368561625,\n",
+       "  -0.01575486548244953,\n",
+       "  -0.0839557945728302,\n",
+       "  -0.1172216534614563,\n",
+       "  0.02088264748454094,\n",
+       "  0.03227342665195465,\n",
+       "  -0.01875143311917782,\n",
+       "  -0.006739516742527485,\n",
+       "  -0.013505082577466965,\n",
+       "  0.07939152419567108,\n",
+       "  0.03261948749423027,\n",
+       "  -0.021357867866754532,\n",
+       "  -0.026340456679463387,\n",
+       "  0.02579592913389206,\n",
+       "  0.018229736015200615,\n",
+       "  -0.003337700152769685,\n",
+       "  -0.03188186511397362,\n",
+       "  -0.07872839272022247,\n",
+       "  -0.04228793457150459,\n",
+       "  0.012792701832950115,\n",
+       "  0.14339058101177216,\n",
+       "  0.09618547558784485,\n",
+       "  0.018152154982089996,\n",
+       "  -0.0530053973197937,\n",
+       "  0.09879206120967865,\n",
+       "  -0.0907149612903595,\n",
+       "  -0.08342350274324417,\n",
+       "  0.012273512780666351,\n",
+       "  -0.0819632038474083,\n",
+       "  -0.05105786770582199,\n",
+       "  0.014089709147810936,\n",
+       "  -0.01016179844737053,\n",
+       "  -0.03907155245542526,\n",
+       "  -0.019414644688367844,\n",
+       "  -0.046597715467214584,\n",
+       "  -0.031130781397223473,\n",
+       "  -0.019644174724817276,\n",
+       "  -0.016959073022007942,\n",
+       "  -0.03439386188983917,\n",
+       "  -0.06818914413452148,\n",
+       "  0.037960320711135864,\n",
+       "  -0.027920439839363098,\n",
+       "  0.03703640401363373,\n",
+       "  0.013515403494238853,\n",
+       "  0.001978617860004306,\n",
+       "  -0.00359722669236362,\n",
+       "  0.025217901915311813,\n",
+       "  -0.09175395220518112,\n",
+       "  -0.05270292982459068,\n",
+       "  0.0339379645884037,\n",
+       "  -0.009566015563905239,\n",
+       "  -0.09692132472991943,\n",
+       "  0.0827004685997963,\n",
+       "  -0.003031309926882386,\n",
+       "  -0.014253348112106323,\n",
+       "  0.01019090786576271,\n",
+       "  -0.09519690275192261,\n",
+       "  -0.0002853995538316667,\n",
+       "  0.042065463960170746,\n",
+       "  -0.05857514962553978,\n",
+       "  -0.03812193498015404,\n",
+       "  -0.06450342386960983,\n",
+       "  0.06234588846564293,\n",
+       "  0.035958241671323776,\n",
+       "  -0.09367603063583374,\n",
+       "  0.25373566150665283,\n",
+       "  0.016129741445183754,\n",
+       "  0.07738282531499863,\n",
+       "  0.031760625541210175,\n",
+       "  0.02651532180607319,\n",
+       "  -0.038190484046936035,\n",
+       "  0.026544027030467987,\n",
+       "  -0.0876961499452591,\n",
+       "  0.07003381103277206,\n",
+       "  -0.030265210196375847,\n",
+       "  -0.016104521229863167,\n",
+       "  0.04457677900791168,\n",
+       "  0.00757654057815671,\n",
+       "  0.014453830197453499,\n",
+       "  0.04364680498838425,\n",
+       "  0.1351340413093567,\n",
+       "  0.06684476137161255,\n",
+       "  0.06541601568460464,\n",
+       "  0.02084515616297722,\n",
+       "  -0.008347414433956146,\n",
+       "  -0.07750769704580307,\n",
+       "  -0.0319858118891716,\n",
+       "  -0.03544182702898979,\n",
+       "  -0.001698172534815967,\n",
+       "  -0.021968062967061996,\n",
+       "  0.09773769229650497,\n",
+       "  -0.02362070232629776,\n",
+       "  0.022215133532881737,\n",
+       "  -5.968164449355239e-33,\n",
+       "  0.054632093757390976,\n",
+       "  0.00846831128001213,\n",
+       "  -0.011441917158663273,\n",
+       "  0.13195011019706726,\n",
+       "  0.01962447725236416,\n",
+       "  -0.04277697578072548,\n",
+       "  -0.05078886076807976,\n",
+       "  0.021259799599647522,\n",
+       "  -0.04665791988372803,\n",
+       "  0.01371921319514513,\n",
+       "  0.0699634850025177,\n",
+       "  0.03471170365810394,\n",
+       "  -0.056665170937776566,\n",
+       "  0.009710577316582203,\n",
+       "  0.008900151588022709,\n",
+       "  0.04218043386936188,\n",
+       "  -0.03082343190908432,\n",
+       "  -0.003828516462817788,\n",
+       "  -0.009247229434549809,\n",
+       "  0.010788359679281712,\n",
+       "  -0.030083660036325455,\n",
+       "  -0.047238800674676895,\n",
+       "  0.017595993354916573,\n",
+       "  0.0810183510184288,\n",
+       "  0.004849777091294527,\n",
+       "  -0.036722999066114426,\n",
+       "  0.035562388598918915,\n",
+       "  -0.068642258644104,\n",
+       "  0.05170796439051628,\n",
+       "  0.010919257067143917,\n",
+       "  -0.009729581885039806,\n",
+       "  0.009294673800468445,\n",
+       "  0.03926905244588852,\n",
+       "  0.06409227102994919,\n",
+       "  -0.010028756223618984,\n",
+       "  -0.023192133754491806,\n",
+       "  0.07778891175985336,\n",
+       "  -0.0003171116695739329,\n",
+       "  -0.031507618725299835,\n",
+       "  0.03035464882850647,\n",
+       "  -0.020111646503210068,\n",
+       "  0.024977393448352814,\n",
+       "  0.02069445326924324,\n",
+       "  -0.03973761200904846,\n",
+       "  0.06862123310565948,\n",
+       "  0.08910191804170609,\n",
+       "  -0.02524728514254093,\n",
+       "  0.009801230393350124,\n",
+       "  0.02022949978709221,\n",
+       "  -0.004629763774573803,\n",
+       "  -0.06564957648515701,\n",
+       "  0.05281716212630272,\n",
+       "  -0.09382486343383789,\n",
+       "  -0.007978985086083412,\n",
+       "  -0.07739488780498505,\n",
+       "  -0.04856621101498604,\n",
+       "  -0.015814466401934624,\n",
+       "  -0.01335339155048132,\n",
+       "  0.05370025709271431,\n",
+       "  0.03840520977973938,\n",
+       "  0.025062285363674164,\n",
+       "  0.02736000530421734,\n",
+       "  -0.03568736091256142,\n",
+       "  -0.03636045753955841,\n",
+       "  -0.1445392668247223,\n",
+       "  -0.05933190882205963,\n",
+       "  0.03519044816493988,\n",
+       "  0.013504653237760067,\n",
+       "  0.024751951918005943,\n",
+       "  -0.04175782948732376,\n",
+       "  -0.009688134305179119,\n",
+       "  0.010052510537207127,\n",
+       "  0.005975383333861828,\n",
+       "  0.009347953833639622,\n",
+       "  0.012808509171009064,\n",
+       "  -0.0017119830008596182,\n",
+       "  0.08629827201366425,\n",
+       "  0.007543443702161312,\n",
+       "  0.01831595040857792,\n",
+       "  -0.029061343520879745,\n",
+       "  0.09248100966215134,\n",
+       "  -0.008599715307354927,\n",
+       "  0.00978198740631342,\n",
+       "  -0.05404217913746834,\n",
+       "  0.029240770265460014,\n",
+       "  0.035454150289297104,\n",
+       "  -0.02278723753988743,\n",
+       "  -0.096394382417202,\n",
+       "  -0.015356332994997501,\n",
+       "  -0.02890510857105255,\n",
+       "  -0.09170844405889511,\n",
+       "  0.060586266219615936,\n",
+       "  0.03915942832827568,\n",
+       "  0.002108626300469041,\n",
+       "  -0.007839742116630077,\n",
+       "  4.4580682029652795e-33,\n",
+       "  0.06484320014715195,\n",
+       "  0.09692490845918655,\n",
+       "  -0.02026134543120861,\n",
+       "  0.009838089346885681,\n",
+       "  -0.05348040536046028,\n",
+       "  -0.004755859263241291,\n",
+       "  -0.005625511985272169,\n",
+       "  0.11271227151155472,\n",
+       "  -0.1243550255894661,\n",
+       "  0.002774117747321725,\n",
+       "  0.004616657737642527,\n",
+       "  -0.061961520463228226,\n",
+       "  -0.016888946294784546,\n",
+       "  0.021102236583828926,\n",
+       "  0.03668638691306114,\n",
+       "  -0.010692193172872066,\n",
+       "  0.08665463328361511,\n",
+       "  -0.030606906861066818,\n",
+       "  -0.10806894302368164,\n",
+       "  -0.044540874660015106,\n",
+       "  -0.0013643245911225677,\n",
+       "  -0.04080400615930557,\n",
+       "  -0.006068442016839981,\n",
+       "  0.016468241810798645,\n",
+       "  0.00019835171406157315,\n",
+       "  0.02686193212866783,\n",
+       "  -0.050506819039583206,\n",
+       "  0.04688209667801857,\n",
+       "  -0.05142483115196228,\n",
+       "  0.0071433898992836475,\n",
+       "  0.07447455823421478,\n",
+       "  0.02418288215994835,\n",
+       "  -0.04474595561623573,\n",
+       "  -0.04281294718384743,\n",
+       "  0.029996385797858238,\n",
+       "  0.046952422708272934,\n",
+       "  -0.013240410946309566,\n",
+       "  -0.07489501684904099,\n",
+       "  0.02129260264337063,\n",
+       "  -0.06636284291744232,\n",
+       "  -0.0923016369342804,\n",
+       "  -0.020468896254897118,\n",
+       "  -0.012797920033335686,\n",
+       "  0.052056651562452316,\n",
+       "  0.0018882454605773091,\n",
+       "  -0.005012952722609043,\n",
+       "  0.032687779515981674,\n",
+       "  0.023257508873939514,\n",
+       "  -0.06360457837581635,\n",
+       "  0.027944521978497505,\n",
+       "  -0.0820653885602951,\n",
+       "  -0.05012356862425804,\n",
+       "  0.007555392105132341,\n",
+       "  0.02247454971075058,\n",
+       "  -0.014787756837904453,\n",
+       "  -0.013764528557658195,\n",
+       "  -0.008079699240624905,\n",
+       "  0.043655943125486374,\n",
+       "  -0.03173394128680229,\n",
+       "  -0.010333573445677757,\n",
+       "  -0.004562370479106903,\n",
+       "  0.0429571270942688,\n",
+       "  0.06618060916662216,\n",
+       "  0.08465901762247086,\n",
+       "  -0.008432728238403797,\n",
+       "  0.05195068567991257,\n",
+       "  -0.06404972821474075,\n",
+       "  -0.02680053561925888,\n",
+       "  -0.06115908920764923,\n",
+       "  -0.005285811144858599,\n",
+       "  0.024630464613437653,\n",
+       "  0.0508127361536026,\n",
+       "  -0.02946154959499836,\n",
+       "  0.00315065192990005,\n",
+       "  0.027983715757727623,\n",
+       "  0.0004941211664117873,\n",
+       "  0.0973694920539856,\n",
+       "  -0.00445805536583066,\n",
+       "  0.02243778668344021,\n",
+       "  0.05700451508164406,\n",
+       "  0.023384707048535347,\n",
+       "  0.0002657742297742516,\n",
+       "  -0.006948730908334255,\n",
+       "  0.028135964646935463,\n",
+       "  0.05755734071135521,\n",
+       "  -0.0035311044193804264,\n",
+       "  0.02564452774822712,\n",
+       "  0.06911254674196243,\n",
+       "  0.0001439160987501964,\n",
+       "  -0.0690045952796936,\n",
+       "  0.023919526487588882,\n",
+       "  0.0243697427213192,\n",
+       "  0.0016542165540158749,\n",
+       "  0.00436467956751585,\n",
+       "  -0.003900913055986166,\n",
+       "  -1.4984452789690295e-08,\n",
+       "  0.005736040882766247,\n",
+       "  0.07273048162460327,\n",
+       "  -0.04237211495637894,\n",
+       "  0.07735995203256607,\n",
+       "  0.045224644243717194,\n",
+       "  0.11730047315359116,\n",
+       "  -0.015441788360476494,\n",
+       "  -0.006769617088139057,\n",
+       "  0.011812692508101463,\n",
+       "  0.042124193161726,\n",
+       "  0.101394422352314,\n",
+       "  0.0897025316953659,\n",
+       "  -0.03517512232065201,\n",
+       "  0.023409757763147354,\n",
+       "  0.05634652450680733,\n",
+       "  0.06467470526695251,\n",
+       "  -0.05817856639623642,\n",
+       "  0.007569451350718737,\n",
+       "  -0.0726981908082962,\n",
+       "  -0.058578263968229294,\n",
+       "  -0.01871626265347004,\n",
+       "  0.039866991341114044,\n",
+       "  0.011542759835720062,\n",
+       "  -0.036801159381866455,\n",
+       "  -0.006841242779046297,\n",
+       "  -0.04151619225740433,\n",
+       "  0.011084156110882759,\n",
+       "  0.033770542591810226,\n",
+       "  -0.004958425648510456,\n",
+       "  -0.025353027507662773,\n",
+       "  -0.02028714120388031,\n",
+       "  0.14283043146133423,\n",
+       "  -0.02753743715584278,\n",
+       "  0.036813028156757355,\n",
+       "  0.026038523763418198,\n",
+       "  -0.04208604618906975,\n",
+       "  0.0035880794748663902,\n",
+       "  -0.012132312171161175,\n",
+       "  0.0464431531727314,\n",
+       "  -0.00905541516840458,\n",
+       "  -0.06408620625734329,\n",
+       "  0.024333177134394646,\n",
+       "  -0.003940224181860685,\n",
+       "  -0.02544635906815529,\n",
+       "  -0.017610585317015648,\n",
+       "  -0.0488358810544014,\n",
+       "  0.027587853372097015,\n",
+       "  -0.07398281246423721,\n",
+       "  0.053129442036151886,\n",
+       "  -0.0954415500164032,\n",
+       "  0.00758804427459836,\n",
+       "  0.0036420796532183886,\n",
+       "  0.06142501160502434,\n",
+       "  0.03770154342055321,\n",
+       "  0.1305655688047409,\n",
+       "  -0.01286567933857441,\n",
+       "  0.03425038605928421,\n",
+       "  -0.013945942744612694,\n",
+       "  0.022425182163715363,\n",
+       "  -0.02659265510737896,\n",
+       "  0.06289114058017731,\n",
+       "  0.05313219130039215,\n",
+       "  0.07984637469053268,\n",
+       "  -0.012213138863444328]]"
+      ]
+     },
+     "execution_count": 11,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "encoder([\"hey\"])"
+   ]
+  },
   {
    "cell_type": "markdown",
    "metadata": {},
@@ -148,14 +558,14 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 4,
+   "execution_count": 5,
    "metadata": {},
    "outputs": [
     {
      "name": "stderr",
      "output_type": "stream",
      "text": [
-      "\u001b[32m2024-01-09 00:22:35 INFO semantic_router.utils.logger Initializing RouteLayer\u001b[0m\n"
+      "\u001b[32m2024-04-14 18:15:59 INFO semantic_router.utils.logger local\u001b[0m\n"
      ]
     }
    ],
@@ -165,6 +575,48 @@
     "rl = RouteLayer(encoder=encoder, routes=routes)"
    ]
   },
+  {
+   "cell_type": "code",
+   "execution_count": 7,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "LocalIndex(index=array([[-0.00864941,  0.02088905,  0.04548961, ..., -0.00787578,\n",
+       "         0.0252752 ,  0.01958269],\n",
+       "       [ 0.10101052, -0.05990515,  0.01437028, ..., -0.00809868,\n",
+       "         0.03701495, -0.01487793],\n",
+       "       [ 0.01996296, -0.03627442,  0.15291646, ...,  0.06719883,\n",
+       "         0.08079942, -0.03931363],\n",
+       "       ...,\n",
+       "       [-0.01322144,  0.11396162,  0.14592913, ..., -0.01772162,\n",
+       "        -0.09720093,  0.05921701],\n",
+       "       [ 0.02863792,  0.09272329,  0.10989423, ..., -0.00030185,\n",
+       "        -0.10717052,  0.04849005],\n",
+       "       [-0.03355407, -0.04666358, -0.05054352, ...,  0.04337099,\n",
+       "         0.10585055, -0.06144635]]), routes=array(['politics', 'politics', 'politics', 'politics', 'politics',\n",
+       "       'politics', 'chitchat', 'chitchat', 'chitchat', 'chitchat',\n",
+       "       'chitchat'], dtype='<U8'), utterances=array([\"isn't politics the best thing ever\",\n",
+       "       \"why don't you tell me about your political opinions\",\n",
+       "       \"don't you just love the president\",\n",
+       "       \"don't you just hate the president\",\n",
+       "       \"they're going to destroy this country!\",\n",
+       "       'they will save the country!', \"how's the weather today?\",\n",
+       "       'how are things going?', 'lovely weather today',\n",
+       "       'the weather is horrendous', \"let's go to the chippy\"],\n",
+       "      dtype='<U51'), dimensions=None, type='local')"
+      ]
+     },
+     "execution_count": 7,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "rl.index"
+   ]
+  },
   {
    "cell_type": "markdown",
    "metadata": {},
@@ -174,16 +626,118 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 5,
+   "execution_count": 6,
    "metadata": {},
    "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "vector [ 7.46806897e-03 -3.49807888e-02  8.88827071e-02 -3.65814343e-02\n",
+      "  9.69796628e-02 -3.88786122e-02  1.91174150e-02 -2.44899071e-03\n",
+      "  2.94564646e-02  2.73508448e-02 -1.19639039e-01  3.17963734e-02\n",
+      "  2.52084807e-03  2.75214389e-03 -1.46908767e-03  3.32778133e-02\n",
+      " -8.00867677e-02 -4.17326577e-03 -2.38617379e-02  1.46567017e-01\n",
+      " -1.49368718e-01  4.26295139e-02  4.98373099e-02  1.65512003e-02\n",
+      "  1.98207237e-02 -2.43026596e-02 -1.81025621e-02 -2.04044133e-02\n",
+      " -6.39620274e-02 -4.54164632e-02 -7.70635204e-03  1.11671137e-02\n",
+      " -1.09083969e-02  6.57793432e-02  3.92031223e-02  7.03004422e-03\n",
+      "  5.31722419e-02  2.29947194e-02  3.18085887e-02 -1.34273348e-02\n",
+      "  7.80912861e-03  1.41071444e-02 -2.45402344e-02 -5.35607934e-02\n",
+      " -5.93818501e-02 -2.74034124e-03  3.07757724e-02  4.67852596e-03\n",
+      "  7.82168582e-02 -7.07853511e-02  1.20290471e-02  3.36084664e-02\n",
+      "  3.86536419e-02  4.40022983e-02  7.18170255e-02 -1.54885557e-02\n",
+      "  3.44607979e-02  4.96295393e-02 -4.19351831e-02  9.97676980e-05\n",
+      " -2.87968363e-03  2.87525635e-02 -3.27512138e-02  2.99615487e-02\n",
+      " -3.11616343e-03  3.99692096e-02 -4.20988211e-03 -1.40505536e-02\n",
+      " -3.85094695e-02  1.77390687e-02 -2.16467027e-02  6.61753565e-02\n",
+      "  8.33685175e-02 -4.78239059e-02 -4.70590405e-02 -3.43491174e-02\n",
+      "  3.80785204e-03  8.20114464e-02  4.13801894e-02 -9.00606439e-03\n",
+      "  5.69840260e-02 -5.47169484e-02  1.96720269e-02  5.77765107e-02\n",
+      "  1.66462716e-02 -1.10149585e-01 -5.24689816e-02  5.18206228e-03\n",
+      " -3.89118999e-04 -3.44066173e-02 -3.78542580e-02  1.00882528e-02\n",
+      "  2.04983242e-02 -9.67855193e-03 -2.84724031e-02 -8.81512761e-02\n",
+      "  4.77903932e-02  3.23785283e-02 -9.37398747e-02  8.25569853e-02\n",
+      " -7.05434531e-02 -4.01798189e-02 -8.01931471e-02  5.74426539e-02\n",
+      " -3.66569799e-03 -4.87772673e-02 -1.32716194e-01  1.70647614e-02\n",
+      " -2.05865130e-02 -2.54293457e-02 -3.49317975e-02  5.63595593e-02\n",
+      "  9.65489000e-02 -3.81795168e-02  6.41789660e-02 -5.97803183e-02\n",
+      "  4.79376912e-02 -6.73008412e-02  1.29452450e-02  7.47889131e-02\n",
+      " -3.50754783e-02 -3.92399095e-02 -8.27630535e-02  6.69496059e-02\n",
+      "  5.43073602e-02 -1.05082624e-01  2.50374246e-03 -8.70677792e-33\n",
+      " -6.24993332e-02 -5.26585393e-02 -2.67148105e-04  8.23840424e-02\n",
+      " -9.20600966e-02  1.09337494e-01 -6.93592848e-03 -6.77209422e-02\n",
+      "  2.31854827e-03  2.61983182e-02 -5.97448759e-02  1.39414638e-01\n",
+      "  4.36192639e-02 -4.00043800e-02  4.44744304e-02  4.79639479e-04\n",
+      " -9.06227157e-02 -4.08852892e-03 -4.63285781e-02 -3.02307531e-02\n",
+      " -5.81271201e-02  8.55818465e-02  3.42825167e-02  5.44268265e-02\n",
+      "  1.04459964e-01  3.67966965e-02  8.17925632e-02 -4.86575179e-02\n",
+      "  6.59503713e-02  4.70023975e-02 -2.52449065e-02 -3.77716720e-02\n",
+      " -4.33016196e-02  3.54233049e-02 -3.84103656e-02 -3.85655760e-04\n",
+      " -2.19709128e-02  2.32433695e-02  3.99560183e-02 -3.96165997e-02\n",
+      "  8.89946595e-02  3.30114514e-02 -6.53322786e-03  4.37131003e-02\n",
+      " -2.58748494e-02 -4.89604287e-03  5.74647598e-02  1.34270790e-03\n",
+      " -4.75572189e-03 -2.29260828e-02 -2.30850674e-05  4.61842045e-02\n",
+      "  9.64455009e-02 -1.34467948e-02  5.43327220e-02 -4.99240905e-02\n",
+      " -6.38680682e-02 -3.99457924e-02 -2.31168065e-02 -6.60235286e-02\n",
+      " -4.51665260e-02 -1.06092729e-02  5.11268247e-03 -1.63481403e-02\n",
+      "  4.48726676e-02  4.88157338e-03 -1.21778011e-01  4.07235548e-02\n",
+      "  1.23663016e-01  2.09960677e-02  8.85758456e-03 -2.57863365e-02\n",
+      " -1.25853419e-01 -3.04767899e-02 -4.83227335e-02  2.13521179e-02\n",
+      "  7.65490755e-02 -1.62383765e-02 -4.12127823e-02 -3.46125327e-02\n",
+      "  3.35594527e-02 -2.75545437e-02  1.48337394e-01 -2.41062324e-02\n",
+      "  4.78513241e-02 -2.57437732e-02  6.86436594e-02 -3.65344249e-02\n",
+      "  9.58712995e-02 -7.33761489e-02 -6.54934272e-02 -7.58369714e-02\n",
+      "  2.16469876e-02  2.11787838e-02 -1.32356793e-01  7.74216946e-33\n",
+      " -5.21602631e-02 -1.12684049e-01  3.75458039e-02  2.14454755e-02\n",
+      " -1.59239266e-02 -2.00403482e-02  2.00451282e-03 -7.60207623e-02\n",
+      "  6.17395993e-03  9.82744992e-02 -5.70474076e-05 -5.46450354e-02\n",
+      " -8.58346745e-03  3.54736857e-02  9.09018740e-02 -7.34343156e-02\n",
+      "  5.37787378e-02  2.34990641e-02 -7.36654252e-02 -2.96295825e-02\n",
+      " -4.20701243e-02  4.01046425e-02 -1.05566114e-01  8.53969455e-02\n",
+      " -9.78117287e-02  3.11244652e-02 -8.60458147e-03 -5.80112636e-02\n",
+      "  8.06473009e-03  2.32330374e-02  1.29305897e-02 -1.45072332e-02\n",
+      " -6.42017797e-02 -1.80655587e-02 -3.71037386e-02  7.91664515e-03\n",
+      " -2.76426841e-02 -4.71186750e-02  3.25874314e-02 -2.59979051e-02\n",
+      " -2.75685731e-02 -5.33751510e-02  2.11490206e-02  2.41934936e-02\n",
+      " -7.74724558e-02 -5.48699610e-02 -3.02678696e-03  2.51382738e-02\n",
+      "  7.51809077e-03 -1.04018506e-02 -5.87963313e-02  4.60062809e-02\n",
+      "  3.05394977e-02 -2.98662260e-02  4.60343696e-02 -2.43270658e-02\n",
+      " -1.80021673e-02  8.80592465e-02 -3.52736451e-02  3.42088193e-02\n",
+      " -1.84306744e-02  1.83841325e-02 -1.26974359e-02 -5.30652609e-03\n",
+      "  1.65736768e-02 -1.89048573e-02 -2.92793736e-02 -7.48898089e-02\n",
+      "  9.58707631e-02  4.02442832e-03  2.81538311e-02 -5.81194721e-02\n",
+      " -9.39897671e-02  3.95648554e-02  1.23225600e-02  5.75946681e-02\n",
+      "  1.96183030e-03  6.95726126e-02 -2.68521514e-02  2.91528199e-02\n",
+      "  2.64277216e-02 -1.06734969e-02  1.18107386e-02 -7.41961002e-02\n",
+      "  2.32443679e-02  5.63910119e-02 -2.35880818e-02  6.71420619e-02\n",
+      " -2.24174298e-02  5.93297668e-02  5.77776693e-02  3.75099629e-02\n",
+      "  5.69688855e-03 -2.56761108e-02  6.62673786e-02 -1.96984313e-08\n",
+      "  3.92213389e-02  1.70475300e-02  4.09772508e-02 -6.42266218e-03\n",
+      " -6.23241104e-02 -4.91327532e-02 -1.97951663e-02 -4.40760069e-02\n",
+      " -2.72826254e-02 -1.60910953e-02  1.15375720e-01  4.63905372e-02\n",
+      " -6.51486441e-02 -1.31851183e-02  7.16804564e-02  1.75282490e-02\n",
+      "  6.10029511e-02  2.75316294e-02 -1.92716401e-02 -2.04059891e-02\n",
+      " -1.46359978e-02  4.85771447e-02 -1.65706128e-02  8.66604224e-02\n",
+      "  2.96872873e-02  6.26259074e-02  2.56345142e-02 -3.19722369e-02\n",
+      "  8.13637450e-02 -3.31001319e-02  1.27992919e-02  3.62702198e-02\n",
+      " -6.38388470e-02  4.30489294e-02  5.40841487e-04 -3.80511861e-03\n",
+      "  4.21091588e-03 -1.12978499e-02 -7.65859755e-03 -7.39676924e-03\n",
+      " -1.59889944e-02  1.02662235e-01  5.57321496e-02 -2.99020577e-02\n",
+      " -6.92943633e-02  1.64305847e-02 -1.08625945e-02  2.04215292e-02\n",
+      "  8.24088156e-02  1.39690740e-02 -2.41274685e-02  7.50095770e-02\n",
+      "  8.87042657e-03  1.05826482e-02  9.90147814e-02 -2.97501963e-02\n",
+      "  3.43261287e-02  2.33199596e-02  3.74692902e-02 -8.54534374e-05\n",
+      "  3.10892314e-02  3.17056179e-02  4.35627997e-02 -3.98492068e-02]\n"
+     ]
+    },
     {
      "data": {
       "text/plain": [
-       "RouteChoice(name='politics', function_call=None)"
+       "RouteChoice(name='politics', function_call=None, similarity_score=None)"
       ]
      },
-     "execution_count": 5,
+     "execution_count": 6,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -263,7 +817,7 @@
    "name": "python",
    "nbconvert_exporter": "python",
    "pygments_lexer": "ipython3",
-   "version": "3.11.5"
+   "version": "3.12.2"
   }
  },
  "nbformat": 4,
diff --git a/docs/examples/pinecone-and-scaling.ipynb b/docs/examples/pinecone-and-scaling.ipynb
index 142380a596dbd658305fa4cae6d2b9904123ca81..8b11c661f70722f5616157bdc6edaba870973eca 100644
--- a/docs/examples/pinecone-and-scaling.ipynb
+++ b/docs/examples/pinecone-and-scaling.ipynb
@@ -44,9 +44,9 @@
    },
    "outputs": [],
    "source": [
-    "!pip install -qU \\\n",
-    "    \"semantic-router[local, pinecone]==0.0.22\" \\\n",
-    "    datasets==2.17.0"
+    "# !pip install -qU \\\n",
+    "#     \"semantic-router[local, pinecone]==0.0.22\" \\\n",
+    "#     datasets==2.17.0"
    ]
   },
   {
@@ -58,19 +58,9 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 1,
+   "execution_count": 6,
    "metadata": {},
    "outputs": [
-    {
-     "name": "stderr",
-     "output_type": "stream",
-     "text": [
-      "/Users/jamesbriggs/opt/anaconda3/envs/decision-layer/lib/python3.11/site-packages/tqdm/auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n",
-      "  from .autonotebook import tqdm as notebook_tqdm\n",
-      "Using the latest cached version of the dataset since aurelio-ai/generic-routes couldn't be found on the Hugging Face Hub\n",
-      "Found the latest cached dataset configuration 'default' at /Users/jamesbriggs/.cache/huggingface/datasets/aurelio-ai___generic-routes/default/0.0.0/5ed6ce316bb803dc716232e6c5f0eb1c7400e24d (last modified on Sun Feb 18 15:49:32 2024).\n"
-     ]
-    },
     {
      "data": {
       "text/plain": [
@@ -80,7 +70,7 @@
        "})"
       ]
      },
-     "execution_count": 1,
+     "execution_count": 6,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -101,7 +91,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 2,
+   "execution_count": 7,
    "metadata": {},
    "outputs": [
     {
@@ -119,7 +109,7 @@
        " 'score_threshold': 0.82}"
       ]
      },
-     "execution_count": 2,
+     "execution_count": 7,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -137,7 +127,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 3,
+   "execution_count": 8,
    "metadata": {},
    "outputs": [
     {
@@ -146,7 +136,7 @@
        "Route(name='politics', utterances=[\"isn't politics the best thing ever\", \"why don't you tell me about your political opinions\", \"don't you just love the presidentdon't you just hate the president\", \"they're going to destroy this country!\", 'they will save the country!'], description=None, function_schema=None, llm=None, score_threshold=0.82)"
       ]
      },
-     "execution_count": 3,
+     "execution_count": 8,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -167,7 +157,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 4,
+   "execution_count": 9,
    "metadata": {
     "colab": {
      "base_uri": "https://localhost:8080/"
@@ -191,39 +181,31 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 5,
+   "execution_count": 2,
    "metadata": {},
-   "outputs": [
-    {
-     "name": "stderr",
-     "output_type": "stream",
-     "text": [
-      "\u001b[33m2024-02-18 17:11:50 WARNING semantic_router.utils.logger Index could not be initialized.\u001b[0m\n"
-     ]
-    }
-   ],
+   "outputs": [],
    "source": [
     "import os\n",
     "from getpass import getpass\n",
-    "from semantic_router.index import PineconeIndex\n",
+    "from semantic_router.index.pinecone import PineconeIndex\n",
     "\n",
     "os.environ[\"PINECONE_API_KEY\"] = os.environ.get(\"PINECONE_API_KEY\") or getpass(\n",
     "    \"Enter Pinecone API key: \"\n",
     ")\n",
     "\n",
-    "index = PineconeIndex()"
+    "index = PineconeIndex(index_name=\"index\", namespace=\"namespace\")"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 8,
+   "execution_count": 11,
    "metadata": {},
    "outputs": [
     {
      "name": "stderr",
      "output_type": "stream",
      "text": [
-      "\u001b[32m2024-02-18 17:12:21 INFO semantic_router.utils.logger local\u001b[0m\n"
+      "\u001b[32m2024-04-15 01:56:59 INFO semantic_router.utils.logger local\u001b[0m\n"
      ]
     }
    ],
@@ -244,7 +226,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 9,
+   "execution_count": 12,
    "metadata": {
     "colab": {
      "base_uri": "https://localhost:8080/"
@@ -259,7 +241,7 @@
        "'chitchat'"
       ]
      },
-     "execution_count": 9,
+     "execution_count": 12,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -297,7 +279,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 10,
+   "execution_count": null,
    "metadata": {
     "id": "5jaF1Xa5ur0y"
    },
@@ -310,16 +292,16 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "Let's load our index first. As mentioned, `\"index\"` is the default index name, so we don't need to specify this parameter — but we do so below for demonstrative purposes."
+    "Let's load our index first. As mentioned, `\"index\"` is the default index name and we are passing `\"namespace\"` as namespace name for the pinecone object."
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 11,
+   "execution_count": 3,
    "metadata": {},
    "outputs": [],
    "source": [
-    "index = PineconeIndex(index_name=\"index\")"
+    "index = PineconeIndex(index_name=\"index\", namespace=\"namespace\")"
    ]
   },
   {
@@ -331,180 +313,180 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 12,
+   "execution_count": 2,
    "metadata": {},
    "outputs": [
     {
      "data": {
       "text/plain": [
-       "[('fitness_tips', 'suggest a workout routine'),\n",
-       " ('daily_inspiration', 'give me an inspirational quote'),\n",
-       " ('creative_writing_and_literature', 'how can I improve my writing skills?'),\n",
-       " ('chitchat', \"let's go to the chippy\"),\n",
-       " ('astronomy_and_space_exploration',\n",
-       "  'what are some interesting facts about the universe?'),\n",
-       " ('chitchat', 'the weather is horrendous'),\n",
-       " ('cloud_computing', 'AWS vs Azure vs Google Cloud'),\n",
-       " ('chitchat', 'how are things going?'),\n",
-       " ('educational_facts', 'tell me an interesting fact'),\n",
-       " ('chitchat', \"how's the weather today?\"),\n",
-       " ('ethical_considerations_in_tech', 'ethical hacking and its importance'),\n",
-       " ('compliments', 'say something nice about me'),\n",
-       " ('food_and_recipes', \"what's your favorite food?\"),\n",
-       " ('interview_preparation', 'common programming interview questions'),\n",
-       " ('gaming_and_esports', 'what are the popular games right now?'),\n",
-       " ('frameworks_and_libraries',\n",
-       "  \"what's the difference between React and Angular?\"),\n",
-       " ('environmental_awareness', 'how can I be more eco-friendly?'),\n",
-       " ('career_advice_in_tech',\n",
-       "  'how to build a portfolio for software development'),\n",
-       " ('educational_facts', 'do you know any historical trivia?'),\n",
-       " ('interview_preparation', 'tips for technical interviews'),\n",
-       " ('data_structures_and_algorithms', 'algorithms every developer should know'),\n",
+       "[('cybersecurity_best_practices',\n",
+       "  'introduction to ethical hacking for developers'),\n",
+       " ('coding_standards_and_conventions', 'JavaScript coding conventions'),\n",
+       " ('chitchat', 'lovely weather today'),\n",
        " ('cybersecurity_best_practices', 'securing your web applications'),\n",
+       " ('gaming_and_esports', 'what are the popular games right now?'),\n",
+       " ('compliments', 'say something nice about me'),\n",
        " ('jokes', 'know any good jokes?'),\n",
+       " ('data_structures_and_algorithms', 'algorithms every developer should know'),\n",
+       " ('data_structures_and_algorithms', 'basic data structures for beginners'),\n",
        " ('interview_preparation', 'how to prepare for a coding interview'),\n",
-       " ('coding_standards_and_conventions', 'maintaining consistency in codebase'),\n",
-       " ('cloud_computing', 'best practices for cloud security'),\n",
-       " ('historical_events', 'tell me about a significant historical event'),\n",
-       " ('coding_standards_and_conventions', 'JavaScript coding conventions'),\n",
-       " ('career_advice_in_tech', 'navigating career growth in tech'),\n",
-       " ('development_tools', 'best Git clients for macOS'),\n",
-       " ('environmental_awareness', 'what are some ways to save the planet?'),\n",
-       " ('historical_events', 'who was a notable figure in ancient history?'),\n",
        " ('career_advice', 'suggest some career development tips'),\n",
-       " ('compliments', 'I need some positive vibes'),\n",
-       " ('frameworks_and_libraries', 'best Python libraries for data analysis'),\n",
-       " ('book_recommendations', \"what's your favorite book?\"),\n",
-       " ('gardening_and_horticulture', 'suggest some easy-care indoor plants'),\n",
+       " ('creative_writing_and_literature', 'how can I improve my writing skills?'),\n",
+       " ('art_and_culture', 'tell me about your favorite artist'),\n",
+       " ('language_learning', 'suggest ways to learn a new language'),\n",
+       " ('fitness_tips', 'suggest a workout routine'),\n",
        " ('mental_health_support', 'what are ways to improve mental health?'),\n",
-       " ('data_structures_and_algorithms', 'basic data structures for beginners'),\n",
+       " ('daily_inspiration', 'I need some inspiration for today'),\n",
+       " ('compliments', 'give me a compliment'),\n",
+       " ('gardening_and_horticulture', 'suggest some easy-care indoor plants'),\n",
+       " ('career_advice_in_tech',\n",
+       "  'how to build a portfolio for software development'),\n",
+       " ('astronomy_and_space_exploration', 'tell me about the latest space mission'),\n",
        " ('hobbies_and_interests', 'suggest me a hobby'),\n",
-       " ('career_advice_in_tech', 'tips for landing your first tech job'),\n",
+       " ('creative_writing_and_literature', 'what are some tips for storytelling?'),\n",
        " ('art_and_culture', \"what's an interesting cultural tradition?\"),\n",
-       " ('language_learning', 'suggest ways to learn a new language'),\n",
-       " ('cybersecurity_best_practices',\n",
-       "  'introduction to ethical hacking for developers'),\n",
-       " ('debugging_tips', 'tips for debugging asynchronous code'),\n",
-       " ('coding_standards_and_conventions', 'why coding standards matter'),\n",
-       " ('daily_inspiration', 'share something uplifting'),\n",
-       " ('environmental_awareness', 'tell me about sustainability practices'),\n",
+       " ('ethical_considerations_in_tech',\n",
+       "  'the role of ethics in artificial intelligence'),\n",
+       " ('development_tools', 'using Docker in development'),\n",
        " ('career_advice', 'how can I improve my resume?'),\n",
-       " ('daily_inspiration', 'I need some inspiration for today'),\n",
-       " ('debugging_tips', 'best tools for JavaScript debugging'),\n",
-       " ('food_and_recipes', 'tell me about a dish from your country'),\n",
-       " ('jokes', 'make me laugh'),\n",
-       " ('best_practices', 'best practices for error handling in JavaScript'),\n",
+       " ('jokes', 'tell me a joke'),\n",
+       " ('environmental_awareness', 'how can I be more eco-friendly?'),\n",
+       " ('cloud_computing', 'introduction to cloud storage options'),\n",
+       " ('cloud_computing', 'AWS vs Azure vs Google Cloud'),\n",
+       " ('mindfulness_and_wellness', 'tell me about mindfulness'),\n",
+       " ('frameworks_and_libraries', 'introduction to Django for web development'),\n",
+       " ('career_advice', 'what are the emerging career fields?'),\n",
+       " ('daily_inspiration', 'share something uplifting'),\n",
        " ('gaming_and_esports', 'suggest a good game for beginners'),\n",
-       " ('hobbies_and_interests', 'what are your interests?'),\n",
-       " ('machine_learning_in_development', 'using TensorFlow for beginners'),\n",
-       " ('language_syntax', 'how do closures work in JavaScript?'),\n",
-       " ('machine_learning_in_development',\n",
-       "  'machine learning model deployment best practices'),\n",
-       " ('gaming_and_esports', 'tell me about upcoming esports events'),\n",
-       " ('art_and_culture', 'suggest some must-visit museums'),\n",
+       " ('chitchat', 'how are things going?'),\n",
+       " ('historical_events', 'share an interesting piece of medieval history'),\n",
+       " ('mental_health_support', 'share some self-care practices'),\n",
+       " ('environmental_awareness', 'what are some ways to save the planet?'),\n",
+       " ('mental_health_support', 'how can I manage stress?'),\n",
        " ('language_learning', 'how can I improve my Spanish?'),\n",
-       " ('mindfulness_and_wellness', 'how can I relax?'),\n",
-       " ('astronomy_and_space_exploration', 'tell me about the latest space mission'),\n",
+       " ('career_advice_in_tech', 'navigating career growth in tech'),\n",
+       " ('cloud_computing', 'best practices for cloud security'),\n",
+       " ('fitness_tips', 'give me a fitness tip'),\n",
        " ('machine_learning_in_development',\n",
        "  'how to start with machine learning in Python'),\n",
-       " ('frameworks_and_libraries', 'introduction to Django for web development'),\n",
+       " ('cybersecurity_best_practices', 'common security vulnerabilities to avoid'),\n",
+       " ('chitchat', \"how's the weather today?\"),\n",
+       " ('fitness_tips', 'how can I stay active at home?'),\n",
+       " ('gardening_and_horticulture', 'how do I start a vegetable garden?'),\n",
+       " ('interview_preparation', 'common programming interview questions'),\n",
+       " ('environmental_awareness', 'tell me about sustainability practices'),\n",
+       " ('art_and_culture', 'suggest some must-visit museums'),\n",
+       " ('development_tools', 'recommendations for Python IDEs'),\n",
+       " ('development_tools', 'best Git clients for macOS'),\n",
+       " ('coding_standards_and_conventions', 'maintaining consistency in codebase'),\n",
+       " ('ethical_considerations_in_tech', 'ethical hacking and its importance'),\n",
        " ('data_structures_and_algorithms', 'complexity analysis of algorithms'),\n",
-       " ('debugging_tips', 'how do I debug segmentation faults in C++?'),\n",
-       " ('career_advice', 'what are the emerging career fields?'),\n",
-       " ('creative_writing_and_literature', 'suggest some classic literature'),\n",
+       " ('food_and_recipes', 'tell me about a dish from your country'),\n",
+       " ('coding_standards_and_conventions', 'why coding standards matter'),\n",
+       " ('career_advice_in_tech', 'tips for landing your first tech job'),\n",
+       " ('chitchat', \"let's go to the chippy\"),\n",
+       " ('historical_events', 'tell me about a significant historical event'),\n",
+       " ('food_and_recipes', \"what's your favorite food?\"),\n",
        " ('hobbies_and_interests', \"I'm looking for a new pastime\"),\n",
+       " ('astronomy_and_space_exploration', 'how can I stargaze effectively?'),\n",
+       " ('food_and_recipes', 'suggest a recipe for dinner'),\n",
+       " ('debugging_tips', 'tips for debugging asynchronous code'),\n",
        " ('best_practices', 'how to write clean code in Python'),\n",
-       " ('fitness_tips', 'how can I stay active at home?'),\n",
-       " ('ethical_considerations_in_tech',\n",
-       "  'the role of ethics in artificial intelligence'),\n",
-       " ('cloud_computing', 'introduction to cloud storage options'),\n",
-       " ('ethical_considerations_in_tech', 'privacy concerns in app development'),\n",
+       " ('jokes', 'make me laugh'),\n",
+       " ('language_syntax', 'how do closures work in JavaScript?'),\n",
+       " ('book_recommendations', 'suggest a good book to read'),\n",
        " ('language_syntax', 'explain the syntax of Python functions'),\n",
-       " ('creative_writing_and_literature', 'what are some tips for storytelling?'),\n",
-       " ('cybersecurity_best_practices', 'common security vulnerabilities to avoid'),\n",
-       " ('book_recommendations', 'I need a book recommendation'),\n",
-       " ('mental_health_support', 'how can I manage stress?'),\n",
-       " ('chitchat', 'lovely weather today'),\n",
-       " ('mental_health_support', 'share some self-care practices'),\n",
        " ('best_practices', 'what are the best practices for REST API design?'),\n",
-       " ('food_and_recipes', 'suggest a recipe for dinner'),\n",
-       " ('language_syntax', 'what are the new features in Java 15?'),\n",
-       " ('gardening_and_horticulture', 'how do I start a vegetable garden?'),\n",
+       " ('book_recommendations', 'I need a book recommendation'),\n",
+       " ('astronomy_and_space_exploration',\n",
+       "  'what are some interesting facts about the universe?'),\n",
+       " ('gaming_and_esports', 'tell me about upcoming esports events'),\n",
+       " ('interview_preparation', 'tips for technical interviews'),\n",
+       " ('debugging_tips', 'best tools for JavaScript debugging'),\n",
+       " ('mindfulness_and_wellness', 'give me a wellness tip'),\n",
+       " ('debugging_tips', 'how do I debug segmentation faults in C++?'),\n",
+       " ('historical_events', 'who was a notable figure in ancient history?'),\n",
        " ('language_learning',\n",
        "  'what are some effective language learning techniques?'),\n",
-       " ('historical_events', 'share an interesting piece of medieval history'),\n",
-       " ('mindfulness_and_wellness', 'tell me about mindfulness'),\n",
-       " ('development_tools', 'using Docker in development'),\n",
-       " ('book_recommendations', 'suggest a good book to read'),\n",
+       " ('compliments', 'I need some positive vibes'),\n",
+       " ('frameworks_and_libraries',\n",
+       "  \"what's the difference between React and Angular?\"),\n",
+       " ('chitchat', 'the weather is horrendous'),\n",
+       " ('educational_facts', 'do you know any historical trivia?'),\n",
+       " ('machine_learning_in_development', 'using TensorFlow for beginners'),\n",
+       " ('educational_facts', 'share a science fact'),\n",
        " ('gardening_and_horticulture',\n",
        "  'what are some tips for sustainable gardening?'),\n",
-       " ('art_and_culture', 'tell me about your favorite artist'),\n",
-       " ('educational_facts', 'share a science fact'),\n",
-       " ('astronomy_and_space_exploration', 'how can I stargaze effectively?'),\n",
-       " ('fitness_tips', 'give me a fitness tip'),\n",
-       " ('development_tools', 'recommendations for Python IDEs'),\n",
-       " ('jokes', 'tell me a joke'),\n",
-       " ('compliments', 'give me a compliment'),\n",
-       " ('politics', \"why don't you tell me about your political opinions\"),\n",
-       " ('pet_care_advice', 'suggest some tips for cat care'),\n",
-       " ('music_discovery', 'suggest some new music'),\n",
-       " ('personal_questions', \"what's your favorite color?\"),\n",
-       " ('travel_stories', 'tell me about your favorite travel destination'),\n",
-       " ('tech_trends', 'tell me about the latest gadgets'),\n",
-       " ('science_and_innovation', 'tell me about a recent innovation'),\n",
+       " ('daily_inspiration', 'give me an inspirational quote'),\n",
+       " ('book_recommendations', \"what's your favorite book?\"),\n",
+       " ('best_practices', 'best practices for error handling in JavaScript'),\n",
+       " ('educational_facts', 'tell me an interesting fact'),\n",
+       " ('machine_learning_in_development',\n",
+       "  'machine learning model deployment best practices'),\n",
+       " ('frameworks_and_libraries', 'best Python libraries for data analysis'),\n",
+       " ('hobbies_and_interests', 'what are your interests?'),\n",
+       " ('creative_writing_and_literature', 'suggest some classic literature'),\n",
+       " ('language_syntax', 'what are the new features in Java 15?'),\n",
+       " ('ethical_considerations_in_tech', 'privacy concerns in app development'),\n",
+       " ('software_architecture', 'differences between MVC and MVVM'),\n",
+       " ('motivation', 'give me a motivational quote'),\n",
+       " ('open_source_contributions', 'how to start contributing to open source'),\n",
+       " ('tech_trends', \"what's new in technology?\"),\n",
+       " ('software_architecture', 'explain microservices architecture'),\n",
+       " ('personal_questions', 'what do you like to do for fun?'),\n",
+       " ('movie_suggestions', 'suggest a good movie for tonight'),\n",
        " ('programming_challenges', 'suggest a coding challenge for beginners'),\n",
-       " ('project_management_in_tech', 'agile vs waterfall project management'),\n",
+       " ('movie_suggestions', 'recommend a movie'),\n",
+       " ('web_development_trends', \"what's new in front-end development?\"),\n",
+       " ('politics', \"they're going to destroy this country!\"),\n",
+       " ('web_development_trends', 'emerging back-end technologies'),\n",
+       " ('personal_questions', 'do you have any hobbies?'),\n",
+       " ('version_control_systems', 'best practices for branching in Git'),\n",
        " ('science_and_innovation', 'what are the latest scientific discoveries?'),\n",
+       " ('motivation', 'inspire me'),\n",
+       " ('mobile_app_development', 'optimizing performance in mobile apps'),\n",
+       " ('mobile_app_development', 'Kotlin vs Swift for mobile development'),\n",
        " ('programming_challenges', 'where can I find algorithmic puzzles?'),\n",
-       " ('personal_questions', 'what do you like to do for fun?'),\n",
        " ('open_source_contributions', 'best practices for open-source contributors'),\n",
+       " ('tech_trends', 'what are the emerging tech trends?'),\n",
+       " ('travel_stories', 'tell me about your favorite travel destination'),\n",
+       " ('pet_care_advice', 'what should I know about keeping a pet rabbit?'),\n",
+       " ('philosophical_questions', 'what are your thoughts on free will?'),\n",
+       " ('pet_care_advice', 'how can I train my dog?'),\n",
+       " ('personal_questions', \"what's your favorite color?\"),\n",
+       " ('travel_stories', 'share a travel story'),\n",
+       " ('music_discovery', 'recommend songs for a workout playlist'),\n",
+       " ('science_and_innovation', 'tell me about a recent innovation'),\n",
+       " ('pet_care_advice', 'suggest some tips for cat care'),\n",
+       " ('travel_stories', \"what's the most interesting place you've visited?\"),\n",
+       " ('open_source_contributions', 'finding projects that accept contributions'),\n",
+       " ('version_control_systems', 'how to revert a commit in Git'),\n",
        " ('music_discovery', 'who are the top artists right now?'),\n",
-       " ('mobile_app_development', 'optimizing performance in mobile apps'),\n",
-       " ('open_source_contributions', 'how to start contributing to open source'),\n",
-       " ('programming_challenges', 'programming tasks to improve problem-solving'),\n",
-       " ('politics', \"isn't politics the best thing ever\"),\n",
-       " ('politics',\n",
-       "  \"don't you just love the presidentdon't you just hate the president\"),\n",
-       " ('project_management_in_tech', 'how to lead a development team'),\n",
        " ('philosophical_questions', 'what is the meaning of life?'),\n",
+       " ('philosophical_questions', 'do you believe in fate?'),\n",
        " ('version_control_systems', 'introduction to SVN for beginners'),\n",
-       " ('software_architecture', 'explain microservices architecture'),\n",
-       " ('version_control_systems', 'best practices for branching in Git'),\n",
-       " ('pet_care_advice', 'what should I know about keeping a pet rabbit?'),\n",
-       " ('politics', 'they will save the country!'),\n",
-       " ('pet_care_advice', 'how can I train my dog?'),\n",
-       " ('philosophical_questions', 'what are your thoughts on free will?'),\n",
+       " ('tech_trends', 'tell me about the latest gadgets'),\n",
+       " ('music_discovery', 'suggest some new music'),\n",
        " ('mobile_app_development',\n",
        "  'best tools for cross-platform mobile development'),\n",
-       " ('personal_questions', 'do you have any hobbies?'),\n",
-       " ('travel_stories', 'share a travel story'),\n",
-       " ('science_and_innovation', 'how does AI impact our daily lives?'),\n",
-       " ('movie_suggestions', \"what's your favorite movie?\"),\n",
-       " ('mobile_app_development', 'Kotlin vs Swift for mobile development'),\n",
-       " ('mindfulness_and_wellness', 'give me a wellness tip'),\n",
+       " ('politics', 'they will save the country!'),\n",
+       " ('project_management_in_tech', 'tools for managing tech projects'),\n",
        " ('motivation', 'I need some motivation'),\n",
-       " ('music_discovery', 'recommend songs for a workout playlist'),\n",
-       " ('software_architecture', 'introduction to domain-driven design'),\n",
-       " ('software_architecture', 'differences between MVC and MVVM'),\n",
-       " ('movie_suggestions', 'suggest a good movie for tonight'),\n",
-       " ('web_development_trends', 'emerging back-end technologies'),\n",
-       " ('philosophical_questions', 'do you believe in fate?'),\n",
+       " ('politics',\n",
+       "  \"don't you just love the presidentdon't you just hate the president\"),\n",
+       " ('project_management_in_tech', 'how to lead a development team'),\n",
+       " ('politics', \"why don't you tell me about your political opinions\"),\n",
+       " ('politics', \"isn't politics the best thing ever\"),\n",
        " ('web_development_trends', 'the future of web development'),\n",
-       " ('web_development_trends', \"what's new in front-end development?\"),\n",
-       " ('motivation', 'give me a motivational quote'),\n",
-       " ('tech_trends', \"what's new in technology?\"),\n",
-       " ('version_control_systems', 'how to revert a commit in Git'),\n",
-       " ('project_management_in_tech', 'tools for managing tech projects'),\n",
-       " ('movie_suggestions', 'recommend a movie'),\n",
-       " ('motivation', 'inspire me'),\n",
-       " ('travel_stories', \"what's the most interesting place you've visited?\"),\n",
-       " ('tech_trends', 'what are the emerging tech trends?'),\n",
-       " ('politics', \"they're going to destroy this country!\"),\n",
-       " ('open_source_contributions', 'finding projects that accept contributions')]"
+       " ('mindfulness_and_wellness', 'how can I relax?'),\n",
+       " ('programming_challenges', 'programming tasks to improve problem-solving'),\n",
+       " ('movie_suggestions', \"what's your favorite movie?\"),\n",
+       " ('software_architecture', 'introduction to domain-driven design'),\n",
+       " ('science_and_innovation', 'how does AI impact our daily lives?'),\n",
+       " ('project_management_in_tech', 'agile vs waterfall project management')]"
       ]
      },
-     "execution_count": 12,
+     "execution_count": 2,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -522,7 +504,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 13,
+   "execution_count": 5,
    "metadata": {},
    "outputs": [],
    "source": [
@@ -535,167 +517,167 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 14,
+   "execution_count": 6,
    "metadata": {},
    "outputs": [
     {
      "data": {
       "text/plain": [
-       "{'jokes': ['tell me a joke', 'make me laugh', 'know any good jokes?'],\n",
-       " 'career_advice': ['suggest some career development tips',\n",
-       "  'what are the emerging career fields?',\n",
-       "  'how can I improve my resume?'],\n",
-       " 'environmental_awareness': ['tell me about sustainability practices',\n",
-       "  'how can I be more eco-friendly?',\n",
-       "  'what are some ways to save the planet?'],\n",
-       " 'data_structures_and_algorithms': ['algorithms every developer should know',\n",
-       "  'basic data structures for beginners',\n",
-       "  'complexity analysis of algorithms'],\n",
-       " 'chitchat': ['lovely weather today',\n",
-       "  \"how's the weather today?\",\n",
+       "{'fitness_tips': ['give me a fitness tip',\n",
+       "  'suggest a workout routine',\n",
+       "  'how can I stay active at home?'],\n",
+       " 'language_learning': ['how can I improve my Spanish?',\n",
+       "  'what are some effective language learning techniques?',\n",
+       "  'suggest ways to learn a new language'],\n",
+       " 'frameworks_and_libraries': ['introduction to Django for web development',\n",
+       "  \"what's the difference between React and Angular?\",\n",
+       "  'best Python libraries for data analysis'],\n",
+       " 'book_recommendations': [\"what's your favorite book?\",\n",
+       "  'suggest a good book to read',\n",
+       "  'I need a book recommendation'],\n",
+       " 'coding_standards_and_conventions': ['JavaScript coding conventions',\n",
+       "  'maintaining consistency in codebase',\n",
+       "  'why coding standards matter'],\n",
+       " 'historical_events': ['share an interesting piece of medieval history',\n",
+       "  'who was a notable figure in ancient history?',\n",
+       "  'tell me about a significant historical event'],\n",
+       " 'ethical_considerations_in_tech': ['ethical hacking and its importance',\n",
+       "  'the role of ethics in artificial intelligence',\n",
+       "  'privacy concerns in app development'],\n",
+       " 'jokes': ['make me laugh', 'tell me a joke', 'know any good jokes?'],\n",
+       " 'chitchat': [\"let's go to the chippy\",\n",
        "  'how are things going?',\n",
        "  'the weather is horrendous',\n",
-       "  \"let's go to the chippy\"],\n",
-       " 'daily_inspiration': ['share something uplifting',\n",
-       "  'give me an inspirational quote',\n",
-       "  'I need some inspiration for today'],\n",
-       " 'career_advice_in_tech': ['how to build a portfolio for software development',\n",
-       "  'navigating career growth in tech',\n",
-       "  'tips for landing your first tech job'],\n",
-       " 'cloud_computing': ['best practices for cloud security',\n",
-       "  'introduction to cloud storage options',\n",
-       "  'AWS vs Azure vs Google Cloud'],\n",
-       " 'language_syntax': ['explain the syntax of Python functions',\n",
-       "  'how do closures work in JavaScript?',\n",
-       "  'what are the new features in Java 15?'],\n",
-       " 'art_and_culture': [\"what's an interesting cultural tradition?\",\n",
-       "  'suggest some must-visit museums',\n",
-       "  'tell me about your favorite artist'],\n",
-       " 'hobbies_and_interests': [\"I'm looking for a new pastime\",\n",
-       "  'what are your interests?',\n",
-       "  'suggest me a hobby'],\n",
-       " 'mental_health_support': ['what are ways to improve mental health?',\n",
-       "  'how can I manage stress?',\n",
-       "  'share some self-care practices'],\n",
-       " 'gardening_and_horticulture': ['how do I start a vegetable garden?',\n",
-       "  'suggest some easy-care indoor plants',\n",
+       "  \"how's the weather today?\",\n",
+       "  'lovely weather today'],\n",
+       " 'environmental_awareness': ['how can I be more eco-friendly?',\n",
+       "  'tell me about sustainability practices',\n",
+       "  'what are some ways to save the planet?'],\n",
+       " 'gardening_and_horticulture': ['suggest some easy-care indoor plants',\n",
+       "  'how do I start a vegetable garden?',\n",
        "  'what are some tips for sustainable gardening?'],\n",
-       " 'book_recommendations': ['I need a book recommendation',\n",
-       "  \"what's your favorite book?\",\n",
-       "  'suggest a good book to read'],\n",
-       " 'development_tools': ['best Git clients for macOS',\n",
-       "  'using Docker in development',\n",
-       "  'recommendations for Python IDEs'],\n",
-       " 'debugging_tips': ['best tools for JavaScript debugging',\n",
-       "  'how do I debug segmentation faults in C++?',\n",
-       "  'tips for debugging asynchronous code'],\n",
-       " 'cybersecurity_best_practices': ['securing your web applications',\n",
-       "  'common security vulnerabilities to avoid',\n",
-       "  'introduction to ethical hacking for developers'],\n",
-       " 'interview_preparation': ['how to prepare for a coding interview',\n",
-       "  'common programming interview questions',\n",
-       "  'tips for technical interviews'],\n",
-       " 'best_practices': ['how to write clean code in Python',\n",
-       "  'best practices for error handling in JavaScript',\n",
-       "  'what are the best practices for REST API design?'],\n",
-       " 'educational_facts': ['do you know any historical trivia?',\n",
-       "  'share a science fact',\n",
+       " 'data_structures_and_algorithms': ['basic data structures for beginners',\n",
+       "  'complexity analysis of algorithms',\n",
+       "  'algorithms every developer should know'],\n",
+       " 'educational_facts': ['share a science fact',\n",
+       "  'do you know any historical trivia?',\n",
        "  'tell me an interesting fact'],\n",
-       " 'language_learning': ['what are some effective language learning techniques?',\n",
-       "  'suggest ways to learn a new language',\n",
-       "  'how can I improve my Spanish?'],\n",
-       " 'mindfulness_and_wellness': ['tell me about mindfulness',\n",
-       "  'how can I relax?',\n",
-       "  'give me a wellness tip'],\n",
+       " 'art_and_culture': ['tell me about your favorite artist',\n",
+       "  'suggest some must-visit museums',\n",
+       "  \"what's an interesting cultural tradition?\"],\n",
+       " 'mindfulness_and_wellness': ['give me a wellness tip',\n",
+       "  'tell me about mindfulness',\n",
+       "  'how can I relax?'],\n",
+       " 'cybersecurity_best_practices': ['common security vulnerabilities to avoid',\n",
+       "  'introduction to ethical hacking for developers',\n",
+       "  'securing your web applications'],\n",
+       " 'development_tools': ['using Docker in development',\n",
+       "  'recommendations for Python IDEs',\n",
+       "  'best Git clients for macOS'],\n",
        " 'gaming_and_esports': ['suggest a good game for beginners',\n",
        "  'what are the popular games right now?',\n",
        "  'tell me about upcoming esports events'],\n",
-       " 'historical_events': ['tell me about a significant historical event',\n",
-       "  'who was a notable figure in ancient history?',\n",
-       "  'share an interesting piece of medieval history'],\n",
-       " 'frameworks_and_libraries': ['best Python libraries for data analysis',\n",
-       "  'introduction to Django for web development',\n",
-       "  \"what's the difference between React and Angular?\"],\n",
-       " 'food_and_recipes': ['suggest a recipe for dinner',\n",
-       "  'tell me about a dish from your country',\n",
-       "  \"what's your favorite food?\"],\n",
-       " 'fitness_tips': ['suggest a workout routine',\n",
-       "  'give me a fitness tip',\n",
-       "  'how can I stay active at home?'],\n",
-       " 'ethical_considerations_in_tech': ['ethical hacking and its importance',\n",
-       "  'privacy concerns in app development',\n",
-       "  'the role of ethics in artificial intelligence'],\n",
-       " 'astronomy_and_space_exploration': ['tell me about the latest space mission',\n",
-       "  'what are some interesting facts about the universe?',\n",
-       "  'how can I stargaze effectively?'],\n",
-       " 'creative_writing_and_literature': ['what are some tips for storytelling?',\n",
-       "  'suggest some classic literature',\n",
-       "  'how can I improve my writing skills?'],\n",
-       " 'machine_learning_in_development': ['using TensorFlow for beginners',\n",
+       " 'interview_preparation': ['tips for technical interviews',\n",
+       "  'common programming interview questions',\n",
+       "  'how to prepare for a coding interview'],\n",
+       " 'daily_inspiration': ['give me an inspirational quote',\n",
+       "  'I need some inspiration for today',\n",
+       "  'share something uplifting'],\n",
+       " 'cloud_computing': ['best practices for cloud security',\n",
+       "  'AWS vs Azure vs Google Cloud',\n",
+       "  'introduction to cloud storage options'],\n",
+       " 'machine_learning_in_development': ['how to start with machine learning in Python',\n",
        "  'machine learning model deployment best practices',\n",
-       "  'how to start with machine learning in Python'],\n",
+       "  'using TensorFlow for beginners'],\n",
+       " 'mental_health_support': ['what are ways to improve mental health?',\n",
+       "  'share some self-care practices',\n",
+       "  'how can I manage stress?'],\n",
+       " 'astronomy_and_space_exploration': ['how can I stargaze effectively?',\n",
+       "  'tell me about the latest space mission',\n",
+       "  'what are some interesting facts about the universe?'],\n",
+       " 'career_advice_in_tech': ['how to build a portfolio for software development',\n",
+       "  'tips for landing your first tech job',\n",
+       "  'navigating career growth in tech'],\n",
+       " 'hobbies_and_interests': ['what are your interests?',\n",
+       "  'suggest me a hobby',\n",
+       "  \"I'm looking for a new pastime\"],\n",
+       " 'debugging_tips': ['how do I debug segmentation faults in C++?',\n",
+       "  'best tools for JavaScript debugging',\n",
+       "  'tips for debugging asynchronous code'],\n",
+       " 'career_advice': ['suggest some career development tips',\n",
+       "  'what are the emerging career fields?',\n",
+       "  'how can I improve my resume?'],\n",
        " 'compliments': ['give me a compliment',\n",
        "  'say something nice about me',\n",
        "  'I need some positive vibes'],\n",
-       " 'coding_standards_and_conventions': ['maintaining consistency in codebase',\n",
-       "  'why coding standards matter',\n",
-       "  'JavaScript coding conventions'],\n",
-       " 'politics': [\"why don't you tell me about your political opinions\",\n",
-       "  \"they're going to destroy this country!\",\n",
-       "  'they will save the country!',\n",
-       "  \"isn't politics the best thing ever\",\n",
-       "  \"don't you just love the presidentdon't you just hate the president\"],\n",
-       " 'motivation': ['give me a motivational quote',\n",
-       "  'inspire me',\n",
-       "  'I need some motivation'],\n",
+       " 'best_practices': ['how to write clean code in Python',\n",
+       "  'best practices for error handling in JavaScript',\n",
+       "  'what are the best practices for REST API design?'],\n",
+       " 'food_and_recipes': [\"what's your favorite food?\",\n",
+       "  'suggest a recipe for dinner',\n",
+       "  'tell me about a dish from your country'],\n",
+       " 'creative_writing_and_literature': ['suggest some classic literature',\n",
+       "  'what are some tips for storytelling?',\n",
+       "  'how can I improve my writing skills?'],\n",
+       " 'language_syntax': ['explain the syntax of Python functions',\n",
+       "  'how do closures work in JavaScript?',\n",
+       "  'what are the new features in Java 15?'],\n",
+       " 'travel_stories': [\"what's the most interesting place you've visited?\",\n",
+       "  'share a travel story',\n",
+       "  'tell me about your favorite travel destination'],\n",
+       " 'philosophical_questions': ['do you believe in fate?',\n",
+       "  'what are your thoughts on free will?',\n",
+       "  'what is the meaning of life?'],\n",
+       " 'programming_challenges': ['where can I find algorithmic puzzles?',\n",
+       "  'suggest a coding challenge for beginners',\n",
+       "  'programming tasks to improve problem-solving'],\n",
+       " 'personal_questions': ['what do you like to do for fun?',\n",
+       "  \"what's your favorite color?\",\n",
+       "  'do you have any hobbies?'],\n",
        " 'movie_suggestions': ['recommend a movie',\n",
        "  \"what's your favorite movie?\",\n",
        "  'suggest a good movie for tonight'],\n",
+       " 'science_and_innovation': ['what are the latest scientific discoveries?',\n",
+       "  'how does AI impact our daily lives?',\n",
+       "  'tell me about a recent innovation'],\n",
        " 'music_discovery': ['suggest some new music',\n",
-       "  'recommend songs for a workout playlist',\n",
-       "  'who are the top artists right now?'],\n",
-       " 'web_development_trends': [\"what's new in front-end development?\",\n",
-       "  'emerging back-end technologies',\n",
+       "  'who are the top artists right now?',\n",
+       "  'recommend songs for a workout playlist'],\n",
+       " 'web_development_trends': ['emerging back-end technologies',\n",
+       "  \"what's new in front-end development?\",\n",
        "  'the future of web development'],\n",
-       " 'science_and_innovation': ['tell me about a recent innovation',\n",
-       "  'how does AI impact our daily lives?',\n",
-       "  'what are the latest scientific discoveries?'],\n",
+       " 'tech_trends': ['tell me about the latest gadgets',\n",
+       "  \"what's new in technology?\",\n",
+       "  'what are the emerging tech trends?'],\n",
        " 'open_source_contributions': ['best practices for open-source contributors',\n",
-       "  'how to start contributing to open source',\n",
-       "  'finding projects that accept contributions'],\n",
-       " 'travel_stories': [\"what's the most interesting place you've visited?\",\n",
-       "  'tell me about your favorite travel destination',\n",
-       "  'share a travel story'],\n",
-       " 'pet_care_advice': ['how can I train my dog?',\n",
-       "  'suggest some tips for cat care',\n",
-       "  'what should I know about keeping a pet rabbit?'],\n",
+       "  'finding projects that accept contributions',\n",
+       "  'how to start contributing to open source'],\n",
        " 'mobile_app_development': ['Kotlin vs Swift for mobile development',\n",
        "  'optimizing performance in mobile apps',\n",
        "  'best tools for cross-platform mobile development'],\n",
-       " 'version_control_systems': ['introduction to SVN for beginners',\n",
-       "  'how to revert a commit in Git',\n",
-       "  'best practices for branching in Git'],\n",
-       " 'project_management_in_tech': ['agile vs waterfall project management',\n",
-       "  'tools for managing tech projects',\n",
-       "  'how to lead a development team'],\n",
-       " 'programming_challenges': ['where can I find algorithmic puzzles?',\n",
-       "  'programming tasks to improve problem-solving',\n",
-       "  'suggest a coding challenge for beginners'],\n",
-       " 'tech_trends': [\"what's new in technology?\",\n",
-       "  'tell me about the latest gadgets',\n",
-       "  'what are the emerging tech trends?'],\n",
-       " 'software_architecture': ['introduction to domain-driven design',\n",
-       "  'differences between MVC and MVVM',\n",
+       " 'politics': [\"isn't politics the best thing ever\",\n",
+       "  \"don't you just love the presidentdon't you just hate the president\",\n",
+       "  'they will save the country!',\n",
+       "  \"why don't you tell me about your political opinions\",\n",
+       "  \"they're going to destroy this country!\"],\n",
+       " 'motivation': ['give me a motivational quote',\n",
+       "  'I need some motivation',\n",
+       "  'inspire me'],\n",
+       " 'pet_care_advice': ['what should I know about keeping a pet rabbit?',\n",
+       "  'suggest some tips for cat care',\n",
+       "  'how can I train my dog?'],\n",
+       " 'version_control_systems': ['best practices for branching in Git',\n",
+       "  'introduction to SVN for beginners',\n",
+       "  'how to revert a commit in Git'],\n",
+       " 'software_architecture': ['differences between MVC and MVVM',\n",
+       "  'introduction to domain-driven design',\n",
        "  'explain microservices architecture'],\n",
-       " 'philosophical_questions': ['what is the meaning of life?',\n",
-       "  'do you believe in fate?',\n",
-       "  'what are your thoughts on free will?'],\n",
-       " 'personal_questions': [\"what's your favorite color?\",\n",
-       "  'what do you like to do for fun?',\n",
-       "  'do you have any hobbies?']}"
+       " 'project_management_in_tech': ['agile vs waterfall project management',\n",
+       "  'how to lead a development team',\n",
+       "  'tools for managing tech projects']}"
       ]
      },
-     "execution_count": 14,
+     "execution_count": 6,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -713,16 +695,16 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 15,
+   "execution_count": 13,
    "metadata": {},
    "outputs": [
     {
      "data": {
       "text/plain": [
-       "Route(name='jokes', utterances=['tell me a joke', 'make me laugh', 'know any good jokes?'], description=None, function_schema=None, llm=None, score_threshold=None)"
+       "Route(name='food_and_recipes', utterances=[\"what's your favorite food?\", 'suggest a recipe for dinner', 'tell me about a dish from your country'], description=None, function_schema=None, llm=None, score_threshold=None)"
       ]
      },
-     "execution_count": 15,
+     "execution_count": 13,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -744,7 +726,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 16,
+   "execution_count": 14,
    "metadata": {
     "colab": {
      "base_uri": "https://localhost:8080/",
@@ -758,7 +740,7 @@
      "name": "stderr",
      "output_type": "stream",
      "text": [
-      "\u001b[32m2024-02-18 17:16:19 INFO semantic_router.utils.logger local\u001b[0m\n"
+      "\u001b[32m2024-04-15 01:57:19 INFO semantic_router.utils.logger local\u001b[0m\n"
      ]
     }
    ],
@@ -777,7 +759,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 18,
+   "execution_count": 15,
    "metadata": {},
    "outputs": [
     {
@@ -786,7 +768,7 @@
        "'jokes'"
       ]
      },
-     "execution_count": 18,
+     "execution_count": 15,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -797,7 +779,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 21,
+   "execution_count": 16,
    "metadata": {},
    "outputs": [
     {
@@ -806,7 +788,7 @@
        "'jokes'"
       ]
      },
-     "execution_count": 21,
+     "execution_count": 16,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -817,7 +799,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 27,
+   "execution_count": 17,
    "metadata": {},
    "outputs": [
     {
@@ -826,7 +808,7 @@
        "'chitchat'"
       ]
      },
-     "execution_count": 27,
+     "execution_count": 17,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -835,6 +817,16 @@
     "rl(\"it's raining cats and dogs today\").name"
    ]
   },
+  {
+   "cell_type": "code",
+   "execution_count": 7,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "# delete index\n",
+    "index.delete_index()"
+   ]
+  },
   {
    "cell_type": "markdown",
    "metadata": {
@@ -873,7 +865,7 @@
    "name": "python",
    "nbconvert_exporter": "python",
    "pygments_lexer": "ipython3",
-   "version": "3.11.5"
+   "version": "3.12.2"
   }
  },
  "nbformat": 4,
diff --git a/docs/examples/unstructured-element-splitter.ipynb b/docs/examples/unstructured-element-splitter.ipynb
index 7e36923dc5b75e579913361e49d6a83c3d7fdea1..c53352c37c2d97d64fd6e4d10fccdd8f93fac1ee 100644
--- a/docs/examples/unstructured-element-splitter.ipynb
+++ b/docs/examples/unstructured-element-splitter.ipynb
@@ -16,7 +16,7 @@
     "# It may take longer to install the package\n",
     "!pip install -qU \\\n",
     "    \"unstructured[pdf]==0.12.4\" \\\n",
-    "    \"semantic-router==0.0.29\""
+    "    \"semantic-router==0.0.34\""
    ]
   },
   {
diff --git a/poetry.lock b/poetry.lock
index 1979be5fcb4456852473a279824deba313ccd729..53b7b5cd7df3ef496e4c97d39e3beea6cd662bc8 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -1,88 +1,88 @@
-# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand.
+# This file is automatically @generated by Poetry 1.8.2 and should not be changed by hand.
 
 [[package]]
 name = "aiohttp"
-version = "3.9.3"
+version = "3.9.4"
 description = "Async http client/server framework (asyncio)"
 optional = false
 python-versions = ">=3.8"
 files = [
-    {file = "aiohttp-3.9.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:939677b61f9d72a4fa2a042a5eee2a99a24001a67c13da113b2e30396567db54"},
-    {file = "aiohttp-3.9.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1f5cd333fcf7590a18334c90f8c9147c837a6ec8a178e88d90a9b96ea03194cc"},
-    {file = "aiohttp-3.9.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:82e6aa28dd46374f72093eda8bcd142f7771ee1eb9d1e223ff0fa7177a96b4a5"},
-    {file = "aiohttp-3.9.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f56455b0c2c7cc3b0c584815264461d07b177f903a04481dfc33e08a89f0c26b"},
-    {file = "aiohttp-3.9.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bca77a198bb6e69795ef2f09a5f4c12758487f83f33d63acde5f0d4919815768"},
-    {file = "aiohttp-3.9.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e083c285857b78ee21a96ba1eb1b5339733c3563f72980728ca2b08b53826ca5"},
-    {file = "aiohttp-3.9.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ab40e6251c3873d86ea9b30a1ac6d7478c09277b32e14745d0d3c6e76e3c7e29"},
-    {file = "aiohttp-3.9.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:df822ee7feaaeffb99c1a9e5e608800bd8eda6e5f18f5cfb0dc7eeb2eaa6bbec"},
-    {file = "aiohttp-3.9.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:acef0899fea7492145d2bbaaaec7b345c87753168589cc7faf0afec9afe9b747"},
-    {file = "aiohttp-3.9.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:cd73265a9e5ea618014802ab01babf1940cecb90c9762d8b9e7d2cc1e1969ec6"},
-    {file = "aiohttp-3.9.3-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:a78ed8a53a1221393d9637c01870248a6f4ea5b214a59a92a36f18151739452c"},
-    {file = "aiohttp-3.9.3-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:6b0e029353361f1746bac2e4cc19b32f972ec03f0f943b390c4ab3371840aabf"},
-    {file = "aiohttp-3.9.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7cf5c9458e1e90e3c390c2639f1017a0379a99a94fdfad3a1fd966a2874bba52"},
-    {file = "aiohttp-3.9.3-cp310-cp310-win32.whl", hash = "sha256:3e59c23c52765951b69ec45ddbbc9403a8761ee6f57253250c6e1536cacc758b"},
-    {file = "aiohttp-3.9.3-cp310-cp310-win_amd64.whl", hash = "sha256:055ce4f74b82551678291473f66dc9fb9048a50d8324278751926ff0ae7715e5"},
-    {file = "aiohttp-3.9.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6b88f9386ff1ad91ace19d2a1c0225896e28815ee09fc6a8932fded8cda97c3d"},
-    {file = "aiohttp-3.9.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c46956ed82961e31557b6857a5ca153c67e5476972e5f7190015018760938da2"},
-    {file = "aiohttp-3.9.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:07b837ef0d2f252f96009e9b8435ec1fef68ef8b1461933253d318748ec1acdc"},
-    {file = "aiohttp-3.9.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dad46e6f620574b3b4801c68255492e0159d1712271cc99d8bdf35f2043ec266"},
-    {file = "aiohttp-3.9.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5ed3e046ea7b14938112ccd53d91c1539af3e6679b222f9469981e3dac7ba1ce"},
-    {file = "aiohttp-3.9.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:039df344b45ae0b34ac885ab5b53940b174530d4dd8a14ed8b0e2155b9dddccb"},
-    {file = "aiohttp-3.9.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7943c414d3a8d9235f5f15c22ace69787c140c80b718dcd57caaade95f7cd93b"},
-    {file = "aiohttp-3.9.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:84871a243359bb42c12728f04d181a389718710129b36b6aad0fc4655a7647d4"},
-    {file = "aiohttp-3.9.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:5eafe2c065df5401ba06821b9a054d9cb2848867f3c59801b5d07a0be3a380ae"},
-    {file = "aiohttp-3.9.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:9d3c9b50f19704552f23b4eaea1fc082fdd82c63429a6506446cbd8737823da3"},
-    {file = "aiohttp-3.9.3-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:f033d80bc6283092613882dfe40419c6a6a1527e04fc69350e87a9df02bbc283"},
-    {file = "aiohttp-3.9.3-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:2c895a656dd7e061b2fd6bb77d971cc38f2afc277229ce7dd3552de8313a483e"},
-    {file = "aiohttp-3.9.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:1f5a71d25cd8106eab05f8704cd9167b6e5187bcdf8f090a66c6d88b634802b4"},
-    {file = "aiohttp-3.9.3-cp311-cp311-win32.whl", hash = "sha256:50fca156d718f8ced687a373f9e140c1bb765ca16e3d6f4fe116e3df7c05b2c5"},
-    {file = "aiohttp-3.9.3-cp311-cp311-win_amd64.whl", hash = "sha256:5fe9ce6c09668063b8447f85d43b8d1c4e5d3d7e92c63173e6180b2ac5d46dd8"},
-    {file = "aiohttp-3.9.3-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:38a19bc3b686ad55804ae931012f78f7a534cce165d089a2059f658f6c91fa60"},
-    {file = "aiohttp-3.9.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:770d015888c2a598b377bd2f663adfd947d78c0124cfe7b959e1ef39f5b13869"},
-    {file = "aiohttp-3.9.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ee43080e75fc92bf36219926c8e6de497f9b247301bbf88c5c7593d931426679"},
-    {file = "aiohttp-3.9.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:52df73f14ed99cee84865b95a3d9e044f226320a87af208f068ecc33e0c35b96"},
-    {file = "aiohttp-3.9.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dc9b311743a78043b26ffaeeb9715dc360335e5517832f5a8e339f8a43581e4d"},
-    {file = "aiohttp-3.9.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b955ed993491f1a5da7f92e98d5dad3c1e14dc175f74517c4e610b1f2456fb11"},
-    {file = "aiohttp-3.9.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:504b6981675ace64c28bf4a05a508af5cde526e36492c98916127f5a02354d53"},
-    {file = "aiohttp-3.9.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a6fe5571784af92b6bc2fda8d1925cccdf24642d49546d3144948a6a1ed58ca5"},
-    {file = "aiohttp-3.9.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:ba39e9c8627edc56544c8628cc180d88605df3892beeb2b94c9bc857774848ca"},
-    {file = "aiohttp-3.9.3-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:e5e46b578c0e9db71d04c4b506a2121c0cb371dd89af17a0586ff6769d4c58c1"},
-    {file = "aiohttp-3.9.3-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:938a9653e1e0c592053f815f7028e41a3062e902095e5a7dc84617c87267ebd5"},
-    {file = "aiohttp-3.9.3-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:c3452ea726c76e92f3b9fae4b34a151981a9ec0a4847a627c43d71a15ac32aa6"},
-    {file = "aiohttp-3.9.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:ff30218887e62209942f91ac1be902cc80cddb86bf00fbc6783b7a43b2bea26f"},
-    {file = "aiohttp-3.9.3-cp312-cp312-win32.whl", hash = "sha256:38f307b41e0bea3294a9a2a87833191e4bcf89bb0365e83a8be3a58b31fb7f38"},
-    {file = "aiohttp-3.9.3-cp312-cp312-win_amd64.whl", hash = "sha256:b791a3143681a520c0a17e26ae7465f1b6f99461a28019d1a2f425236e6eedb5"},
-    {file = "aiohttp-3.9.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:0ed621426d961df79aa3b963ac7af0d40392956ffa9be022024cd16297b30c8c"},
-    {file = "aiohttp-3.9.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:7f46acd6a194287b7e41e87957bfe2ad1ad88318d447caf5b090012f2c5bb528"},
-    {file = "aiohttp-3.9.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:feeb18a801aacb098220e2c3eea59a512362eb408d4afd0c242044c33ad6d542"},
-    {file = "aiohttp-3.9.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f734e38fd8666f53da904c52a23ce517f1b07722118d750405af7e4123933511"},
-    {file = "aiohttp-3.9.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b40670ec7e2156d8e57f70aec34a7216407848dfe6c693ef131ddf6e76feb672"},
-    {file = "aiohttp-3.9.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fdd215b7b7fd4a53994f238d0f46b7ba4ac4c0adb12452beee724ddd0743ae5d"},
-    {file = "aiohttp-3.9.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:017a21b0df49039c8f46ca0971b3a7fdc1f56741ab1240cb90ca408049766168"},
-    {file = "aiohttp-3.9.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e99abf0bba688259a496f966211c49a514e65afa9b3073a1fcee08856e04425b"},
-    {file = "aiohttp-3.9.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:648056db9a9fa565d3fa851880f99f45e3f9a771dd3ff3bb0c048ea83fb28194"},
-    {file = "aiohttp-3.9.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:8aacb477dc26797ee089721536a292a664846489c49d3ef9725f992449eda5a8"},
-    {file = "aiohttp-3.9.3-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:522a11c934ea660ff8953eda090dcd2154d367dec1ae3c540aff9f8a5c109ab4"},
-    {file = "aiohttp-3.9.3-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:5bce0dc147ca85caa5d33debc4f4d65e8e8b5c97c7f9f660f215fa74fc49a321"},
-    {file = "aiohttp-3.9.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:4b4af9f25b49a7be47c0972139e59ec0e8285c371049df1a63b6ca81fdd216a2"},
-    {file = "aiohttp-3.9.3-cp38-cp38-win32.whl", hash = "sha256:298abd678033b8571995650ccee753d9458dfa0377be4dba91e4491da3f2be63"},
-    {file = "aiohttp-3.9.3-cp38-cp38-win_amd64.whl", hash = "sha256:69361bfdca5468c0488d7017b9b1e5ce769d40b46a9f4a2eed26b78619e9396c"},
-    {file = "aiohttp-3.9.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:0fa43c32d1643f518491d9d3a730f85f5bbaedcbd7fbcae27435bb8b7a061b29"},
-    {file = "aiohttp-3.9.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:835a55b7ca49468aaaac0b217092dfdff370e6c215c9224c52f30daaa735c1c1"},
-    {file = "aiohttp-3.9.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:06a9b2c8837d9a94fae16c6223acc14b4dfdff216ab9b7202e07a9a09541168f"},
-    {file = "aiohttp-3.9.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:abf151955990d23f84205286938796c55ff11bbfb4ccfada8c9c83ae6b3c89a3"},
-    {file = "aiohttp-3.9.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:59c26c95975f26e662ca78fdf543d4eeaef70e533a672b4113dd888bd2423caa"},
-    {file = "aiohttp-3.9.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f95511dd5d0e05fd9728bac4096319f80615aaef4acbecb35a990afebe953b0e"},
-    {file = "aiohttp-3.9.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:595f105710293e76b9dc09f52e0dd896bd064a79346234b521f6b968ffdd8e58"},
-    {file = "aiohttp-3.9.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c7c8b816c2b5af5c8a436df44ca08258fc1a13b449393a91484225fcb7545533"},
-    {file = "aiohttp-3.9.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f1088fa100bf46e7b398ffd9904f4808a0612e1d966b4aa43baa535d1b6341eb"},
-    {file = "aiohttp-3.9.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f59dfe57bb1ec82ac0698ebfcdb7bcd0e99c255bd637ff613760d5f33e7c81b3"},
-    {file = "aiohttp-3.9.3-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:361a1026c9dd4aba0109e4040e2aecf9884f5cfe1b1b1bd3d09419c205e2e53d"},
-    {file = "aiohttp-3.9.3-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:363afe77cfcbe3a36353d8ea133e904b108feea505aa4792dad6585a8192c55a"},
-    {file = "aiohttp-3.9.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8e2c45c208c62e955e8256949eb225bd8b66a4c9b6865729a786f2aa79b72e9d"},
-    {file = "aiohttp-3.9.3-cp39-cp39-win32.whl", hash = "sha256:f7217af2e14da0856e082e96ff637f14ae45c10a5714b63c77f26d8884cf1051"},
-    {file = "aiohttp-3.9.3-cp39-cp39-win_amd64.whl", hash = "sha256:27468897f628c627230dba07ec65dc8d0db566923c48f29e084ce382119802bc"},
-    {file = "aiohttp-3.9.3.tar.gz", hash = "sha256:90842933e5d1ff760fae6caca4b2b3edba53ba8f4b71e95dacf2818a2aca06f7"},
+    {file = "aiohttp-3.9.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:76d32588ef7e4a3f3adff1956a0ba96faabbdee58f2407c122dd45aa6e34f372"},
+    {file = "aiohttp-3.9.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:56181093c10dbc6ceb8a29dfeea1e815e1dfdc020169203d87fd8d37616f73f9"},
+    {file = "aiohttp-3.9.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c7a5b676d3c65e88b3aca41816bf72831898fcd73f0cbb2680e9d88e819d1e4d"},
+    {file = "aiohttp-3.9.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d1df528a85fb404899d4207a8d9934cfd6be626e30e5d3a5544a83dbae6d8a7e"},
+    {file = "aiohttp-3.9.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f595db1bceabd71c82e92df212dd9525a8a2c6947d39e3c994c4f27d2fe15b11"},
+    {file = "aiohttp-3.9.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9c0b09d76e5a4caac3d27752027fbd43dc987b95f3748fad2b924a03fe8632ad"},
+    {file = "aiohttp-3.9.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:689eb4356649ec9535b3686200b231876fb4cab4aca54e3bece71d37f50c1d13"},
+    {file = "aiohttp-3.9.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a3666cf4182efdb44d73602379a66f5fdfd5da0db5e4520f0ac0dcca644a3497"},
+    {file = "aiohttp-3.9.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b65b0f8747b013570eea2f75726046fa54fa8e0c5db60f3b98dd5d161052004a"},
+    {file = "aiohttp-3.9.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:a1885d2470955f70dfdd33a02e1749613c5a9c5ab855f6db38e0b9389453dce7"},
+    {file = "aiohttp-3.9.4-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:0593822dcdb9483d41f12041ff7c90d4d1033ec0e880bcfaf102919b715f47f1"},
+    {file = "aiohttp-3.9.4-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:47f6eb74e1ecb5e19a78f4a4228aa24df7fbab3b62d4a625d3f41194a08bd54f"},
+    {file = "aiohttp-3.9.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c8b04a3dbd54de6ccb7604242fe3ad67f2f3ca558f2d33fe19d4b08d90701a89"},
+    {file = "aiohttp-3.9.4-cp310-cp310-win32.whl", hash = "sha256:8a78dfb198a328bfb38e4308ca8167028920fb747ddcf086ce706fbdd23b2926"},
+    {file = "aiohttp-3.9.4-cp310-cp310-win_amd64.whl", hash = "sha256:e78da6b55275987cbc89141a1d8e75f5070e577c482dd48bd9123a76a96f0bbb"},
+    {file = "aiohttp-3.9.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:c111b3c69060d2bafc446917534150fd049e7aedd6cbf21ba526a5a97b4402a5"},
+    {file = "aiohttp-3.9.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:efbdd51872cf170093998c87ccdf3cb5993add3559341a8e5708bcb311934c94"},
+    {file = "aiohttp-3.9.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7bfdb41dc6e85d8535b00d73947548a748e9534e8e4fddd2638109ff3fb081df"},
+    {file = "aiohttp-3.9.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2bd9d334412961125e9f68d5b73c1d0ab9ea3f74a58a475e6b119f5293eee7ba"},
+    {file = "aiohttp-3.9.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:35d78076736f4a668d57ade00c65d30a8ce28719d8a42471b2a06ccd1a2e3063"},
+    {file = "aiohttp-3.9.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:824dff4f9f4d0f59d0fa3577932ee9a20e09edec8a2f813e1d6b9f89ced8293f"},
+    {file = "aiohttp-3.9.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:52b8b4e06fc15519019e128abedaeb56412b106ab88b3c452188ca47a25c4093"},
+    {file = "aiohttp-3.9.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eae569fb1e7559d4f3919965617bb39f9e753967fae55ce13454bec2d1c54f09"},
+    {file = "aiohttp-3.9.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:69b97aa5792428f321f72aeb2f118e56893371f27e0b7d05750bcad06fc42ca1"},
+    {file = "aiohttp-3.9.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:4d79aad0ad4b980663316f26d9a492e8fab2af77c69c0f33780a56843ad2f89e"},
+    {file = "aiohttp-3.9.4-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:d6577140cd7db19e430661e4b2653680194ea8c22c994bc65b7a19d8ec834403"},
+    {file = "aiohttp-3.9.4-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:9860d455847cd98eb67897f5957b7cd69fbcb436dd3f06099230f16a66e66f79"},
+    {file = "aiohttp-3.9.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:69ff36d3f8f5652994e08bd22f093e11cfd0444cea310f92e01b45a4e46b624e"},
+    {file = "aiohttp-3.9.4-cp311-cp311-win32.whl", hash = "sha256:e27d3b5ed2c2013bce66ad67ee57cbf614288bda8cdf426c8d8fe548316f1b5f"},
+    {file = "aiohttp-3.9.4-cp311-cp311-win_amd64.whl", hash = "sha256:d6a67e26daa686a6fbdb600a9af8619c80a332556245fa8e86c747d226ab1a1e"},
+    {file = "aiohttp-3.9.4-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:c5ff8ff44825736a4065d8544b43b43ee4c6dd1530f3a08e6c0578a813b0aa35"},
+    {file = "aiohttp-3.9.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:d12a244627eba4e9dc52cbf924edef905ddd6cafc6513849b4876076a6f38b0e"},
+    {file = "aiohttp-3.9.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:dcad56c8d8348e7e468899d2fb3b309b9bc59d94e6db08710555f7436156097f"},
+    {file = "aiohttp-3.9.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4f7e69a7fd4b5ce419238388e55abd220336bd32212c673ceabc57ccf3d05b55"},
+    {file = "aiohttp-3.9.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c4870cb049f10d7680c239b55428916d84158798eb8f353e74fa2c98980dcc0b"},
+    {file = "aiohttp-3.9.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3b2feaf1b7031ede1bc0880cec4b0776fd347259a723d625357bb4b82f62687b"},
+    {file = "aiohttp-3.9.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:939393e8c3f0a5bcd33ef7ace67680c318dc2ae406f15e381c0054dd658397de"},
+    {file = "aiohttp-3.9.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7d2334e387b2adcc944680bebcf412743f2caf4eeebd550f67249c1c3696be04"},
+    {file = "aiohttp-3.9.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:e0198ea897680e480845ec0ffc5a14e8b694e25b3f104f63676d55bf76a82f1a"},
+    {file = "aiohttp-3.9.4-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:e40d2cd22914d67c84824045861a5bb0fb46586b15dfe4f046c7495bf08306b2"},
+    {file = "aiohttp-3.9.4-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:aba80e77c227f4234aa34a5ff2b6ff30c5d6a827a91d22ff6b999de9175d71bd"},
+    {file = "aiohttp-3.9.4-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:fb68dc73bc8ac322d2e392a59a9e396c4f35cb6fdbdd749e139d1d6c985f2527"},
+    {file = "aiohttp-3.9.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:f3460a92638dce7e47062cf088d6e7663adb135e936cb117be88d5e6c48c9d53"},
+    {file = "aiohttp-3.9.4-cp312-cp312-win32.whl", hash = "sha256:32dc814ddbb254f6170bca198fe307920f6c1308a5492f049f7f63554b88ef36"},
+    {file = "aiohttp-3.9.4-cp312-cp312-win_amd64.whl", hash = "sha256:63f41a909d182d2b78fe3abef557fcc14da50c7852f70ae3be60e83ff64edba5"},
+    {file = "aiohttp-3.9.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:c3770365675f6be220032f6609a8fbad994d6dcf3ef7dbcf295c7ee70884c9af"},
+    {file = "aiohttp-3.9.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:305edae1dea368ce09bcb858cf5a63a064f3bff4767dec6fa60a0cc0e805a1d3"},
+    {file = "aiohttp-3.9.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6f121900131d116e4a93b55ab0d12ad72573f967b100e49086e496a9b24523ea"},
+    {file = "aiohttp-3.9.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b71e614c1ae35c3d62a293b19eface83d5e4d194e3eb2fabb10059d33e6e8cbf"},
+    {file = "aiohttp-3.9.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:419f009fa4cfde4d16a7fc070d64f36d70a8d35a90d71aa27670bba2be4fd039"},
+    {file = "aiohttp-3.9.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7b39476ee69cfe64061fd77a73bf692c40021f8547cda617a3466530ef63f947"},
+    {file = "aiohttp-3.9.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b33f34c9c7decdb2ab99c74be6443942b730b56d9c5ee48fb7df2c86492f293c"},
+    {file = "aiohttp-3.9.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c78700130ce2dcebb1a8103202ae795be2fa8c9351d0dd22338fe3dac74847d9"},
+    {file = "aiohttp-3.9.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:268ba22d917655d1259af2d5659072b7dc11b4e1dc2cb9662fdd867d75afc6a4"},
+    {file = "aiohttp-3.9.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:17e7c051f53a0d2ebf33013a9cbf020bb4e098c4bc5bce6f7b0c962108d97eab"},
+    {file = "aiohttp-3.9.4-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:7be99f4abb008cb38e144f85f515598f4c2c8932bf11b65add0ff59c9c876d99"},
+    {file = "aiohttp-3.9.4-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:d58a54d6ff08d2547656356eea8572b224e6f9bbc0cf55fa9966bcaac4ddfb10"},
+    {file = "aiohttp-3.9.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:7673a76772bda15d0d10d1aa881b7911d0580c980dbd16e59d7ba1422b2d83cd"},
+    {file = "aiohttp-3.9.4-cp38-cp38-win32.whl", hash = "sha256:e4370dda04dc8951012f30e1ce7956a0a226ac0714a7b6c389fb2f43f22a250e"},
+    {file = "aiohttp-3.9.4-cp38-cp38-win_amd64.whl", hash = "sha256:eb30c4510a691bb87081192a394fb661860e75ca3896c01c6d186febe7c88530"},
+    {file = "aiohttp-3.9.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:84e90494db7df3be5e056f91412f9fa9e611fbe8ce4aaef70647297f5943b276"},
+    {file = "aiohttp-3.9.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7d4845f8501ab28ebfdbeab980a50a273b415cf69e96e4e674d43d86a464df9d"},
+    {file = "aiohttp-3.9.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:69046cd9a2a17245c4ce3c1f1a4ff8c70c7701ef222fce3d1d8435f09042bba1"},
+    {file = "aiohttp-3.9.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b73a06bafc8dcc508420db43b4dd5850e41e69de99009d0351c4f3007960019"},
+    {file = "aiohttp-3.9.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:418bb0038dfafeac923823c2e63226179976c76f981a2aaad0ad5d51f2229bca"},
+    {file = "aiohttp-3.9.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:71a8f241456b6c2668374d5d28398f8e8cdae4cce568aaea54e0f39359cd928d"},
+    {file = "aiohttp-3.9.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:935c369bf8acc2dc26f6eeb5222768aa7c62917c3554f7215f2ead7386b33748"},
+    {file = "aiohttp-3.9.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:74e4e48c8752d14ecfb36d2ebb3d76d614320570e14de0a3aa7a726ff150a03c"},
+    {file = "aiohttp-3.9.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:916b0417aeddf2c8c61291238ce25286f391a6acb6f28005dd9ce282bd6311b6"},
+    {file = "aiohttp-3.9.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9b6787b6d0b3518b2ee4cbeadd24a507756ee703adbac1ab6dc7c4434b8c572a"},
+    {file = "aiohttp-3.9.4-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:221204dbda5ef350e8db6287937621cf75e85778b296c9c52260b522231940ed"},
+    {file = "aiohttp-3.9.4-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:10afd99b8251022ddf81eaed1d90f5a988e349ee7d779eb429fb07b670751e8c"},
+    {file = "aiohttp-3.9.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:2506d9f7a9b91033201be9ffe7d89c6a54150b0578803cce5cb84a943d075bc3"},
+    {file = "aiohttp-3.9.4-cp39-cp39-win32.whl", hash = "sha256:e571fdd9efd65e86c6af2f332e0e95dad259bfe6beb5d15b3c3eca3a6eb5d87b"},
+    {file = "aiohttp-3.9.4-cp39-cp39-win_amd64.whl", hash = "sha256:7d29dd5319d20aa3b7749719ac9685fbd926f71ac8c77b2477272725f882072d"},
+    {file = "aiohttp-3.9.4.tar.gz", hash = "sha256:6ff71ede6d9a5a58cfb7b6fffc83ab5d4a63138276c771ac91ceaaddf5459644"},
 ]
 
 [package.dependencies]
@@ -215,33 +215,33 @@ files = [
 
 [[package]]
 name = "black"
-version = "24.3.0"
+version = "24.4.0"
 description = "The uncompromising code formatter."
 optional = false
 python-versions = ">=3.8"
 files = [
-    {file = "black-24.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7d5e026f8da0322b5662fa7a8e752b3fa2dac1c1cbc213c3d7ff9bdd0ab12395"},
-    {file = "black-24.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9f50ea1132e2189d8dff0115ab75b65590a3e97de1e143795adb4ce317934995"},
-    {file = "black-24.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e2af80566f43c85f5797365077fb64a393861a3730bd110971ab7a0c94e873e7"},
-    {file = "black-24.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:4be5bb28e090456adfc1255e03967fb67ca846a03be7aadf6249096100ee32d0"},
-    {file = "black-24.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4f1373a7808a8f135b774039f61d59e4be7eb56b2513d3d2f02a8b9365b8a8a9"},
-    {file = "black-24.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:aadf7a02d947936ee418777e0247ea114f78aff0d0959461057cae8a04f20597"},
-    {file = "black-24.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65c02e4ea2ae09d16314d30912a58ada9a5c4fdfedf9512d23326128ac08ac3d"},
-    {file = "black-24.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:bf21b7b230718a5f08bd32d5e4f1db7fc8788345c8aea1d155fc17852b3410f5"},
-    {file = "black-24.3.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:2818cf72dfd5d289e48f37ccfa08b460bf469e67fb7c4abb07edc2e9f16fb63f"},
-    {file = "black-24.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4acf672def7eb1725f41f38bf6bf425c8237248bb0804faa3965c036f7672d11"},
-    {file = "black-24.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c7ed6668cbbfcd231fa0dc1b137d3e40c04c7f786e626b405c62bcd5db5857e4"},
-    {file = "black-24.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:56f52cfbd3dabe2798d76dbdd299faa046a901041faf2cf33288bc4e6dae57b5"},
-    {file = "black-24.3.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:79dcf34b33e38ed1b17434693763301d7ccbd1c5860674a8f871bd15139e7837"},
-    {file = "black-24.3.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e19cb1c6365fd6dc38a6eae2dcb691d7d83935c10215aef8e6c38edee3f77abd"},
-    {file = "black-24.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65b76c275e4c1c5ce6e9870911384bff5ca31ab63d19c76811cb1fb162678213"},
-    {file = "black-24.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:b5991d523eee14756f3c8d5df5231550ae8993e2286b8014e2fdea7156ed0959"},
-    {file = "black-24.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c45f8dff244b3c431b36e3224b6be4a127c6aca780853574c00faf99258041eb"},
-    {file = "black-24.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6905238a754ceb7788a73f02b45637d820b2f5478b20fec82ea865e4f5d4d9f7"},
-    {file = "black-24.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7de8d330763c66663661a1ffd432274a2f92f07feeddd89ffd085b5744f85e7"},
-    {file = "black-24.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:7bb041dca0d784697af4646d3b62ba4a6b028276ae878e53f6b4f74ddd6db99f"},
-    {file = "black-24.3.0-py3-none-any.whl", hash = "sha256:41622020d7120e01d377f74249e677039d20e6344ff5851de8a10f11f513bf93"},
-    {file = "black-24.3.0.tar.gz", hash = "sha256:a0c9c4a0771afc6919578cec71ce82a3e31e054904e7197deacbc9382671c41f"},
+    {file = "black-24.4.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6ad001a9ddd9b8dfd1b434d566be39b1cd502802c8d38bbb1ba612afda2ef436"},
+    {file = "black-24.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e3a3a092b8b756c643fe45f4624dbd5a389f770a4ac294cf4d0fce6af86addaf"},
+    {file = "black-24.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dae79397f367ac8d7adb6c779813328f6d690943f64b32983e896bcccd18cbad"},
+    {file = "black-24.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:71d998b73c957444fb7c52096c3843875f4b6b47a54972598741fe9a7f737fcb"},
+    {file = "black-24.4.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8e5537f456a22cf5cfcb2707803431d2feeb82ab3748ade280d6ccd0b40ed2e8"},
+    {file = "black-24.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:64e60a7edd71fd542a10a9643bf369bfd2644de95ec71e86790b063aa02ff745"},
+    {file = "black-24.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5cd5b4f76056cecce3e69b0d4c228326d2595f506797f40b9233424e2524c070"},
+    {file = "black-24.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:64578cf99b6b46a6301bc28bdb89f9d6f9b592b1c5837818a177c98525dbe397"},
+    {file = "black-24.4.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f95cece33329dc4aa3b0e1a771c41075812e46cf3d6e3f1dfe3d91ff09826ed2"},
+    {file = "black-24.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4396ca365a4310beef84d446ca5016f671b10f07abdba3e4e4304218d2c71d33"},
+    {file = "black-24.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:44d99dfdf37a2a00a6f7a8dcbd19edf361d056ee51093b2445de7ca09adac965"},
+    {file = "black-24.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:21f9407063ec71c5580b8ad975653c66508d6a9f57bd008bb8691d273705adcd"},
+    {file = "black-24.4.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:652e55bb722ca026299eb74e53880ee2315b181dfdd44dca98e43448620ddec1"},
+    {file = "black-24.4.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7f2966b9b2b3b7104fca9d75b2ee856fe3fdd7ed9e47c753a4bb1a675f2caab8"},
+    {file = "black-24.4.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1bb9ca06e556a09f7f7177bc7cb604e5ed2d2df1e9119e4f7d2f1f7071c32e5d"},
+    {file = "black-24.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:d4e71cdebdc8efeb6deaf5f2deb28325f8614d48426bed118ecc2dcaefb9ebf3"},
+    {file = "black-24.4.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6644f97a7ef6f401a150cca551a1ff97e03c25d8519ee0bbc9b0058772882665"},
+    {file = "black-24.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:75a2d0b4f5eb81f7eebc31f788f9830a6ce10a68c91fbe0fade34fff7a2836e6"},
+    {file = "black-24.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eb949f56a63c5e134dfdca12091e98ffb5fd446293ebae123d10fc1abad00b9e"},
+    {file = "black-24.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:7852b05d02b5b9a8c893ab95863ef8986e4dda29af80bbbda94d7aee1abf8702"},
+    {file = "black-24.4.0-py3-none-any.whl", hash = "sha256:74eb9b5420e26b42c00a3ff470dc0cd144b80a766128b1771d07643165e08d0e"},
+    {file = "black-24.4.0.tar.gz", hash = "sha256:f07b69fda20578367eaebbd670ff8fc653ab181e1ff95d84497f9fa20e7d0641"},
 ]
 
 [package.dependencies]
@@ -259,6 +259,17 @@ d = ["aiohttp (>=3.7.4)", "aiohttp (>=3.7.4,!=3.9.0)"]
 jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"]
 uvloop = ["uvloop (>=0.15.2)"]
 
+[[package]]
+name = "cachetools"
+version = "5.3.3"
+description = "Extensible memoizing collections and decorators"
+optional = true
+python-versions = ">=3.7"
+files = [
+    {file = "cachetools-5.3.3-py3-none-any.whl", hash = "sha256:0abad1021d3f8325b2fc1d2e9c8b9c9d57b04c3932657a72465447332c24d945"},
+    {file = "cachetools-5.3.3.tar.gz", hash = "sha256:ba29e2dfa0b8b556606f097407ed1aa62080ee108ab0dc5ec9d6a723a007d105"},
+]
+
 [[package]]
 name = "certifi"
 version = "2024.2.2"
@@ -530,64 +541,64 @@ test = ["pytest"]
 
 [[package]]
 name = "contourpy"
-version = "1.2.0"
+version = "1.2.1"
 description = "Python library for calculating contours of 2D quadrilateral grids"
 optional = true
 python-versions = ">=3.9"
 files = [
-    {file = "contourpy-1.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0274c1cb63625972c0c007ab14dd9ba9e199c36ae1a231ce45d725cbcbfd10a8"},
-    {file = "contourpy-1.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ab459a1cbbf18e8698399c595a01f6dcc5c138220ca3ea9e7e6126232d102bb4"},
-    {file = "contourpy-1.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6fdd887f17c2f4572ce548461e4f96396681212d858cae7bd52ba3310bc6f00f"},
-    {file = "contourpy-1.2.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5d16edfc3fc09968e09ddffada434b3bf989bf4911535e04eada58469873e28e"},
-    {file = "contourpy-1.2.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1c203f617abc0dde5792beb586f827021069fb6d403d7f4d5c2b543d87edceb9"},
-    {file = "contourpy-1.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b69303ceb2e4d4f146bf82fda78891ef7bcd80c41bf16bfca3d0d7eb545448aa"},
-    {file = "contourpy-1.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:884c3f9d42d7218304bc74a8a7693d172685c84bd7ab2bab1ee567b769696df9"},
-    {file = "contourpy-1.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4a1b1208102be6e851f20066bf0e7a96b7d48a07c9b0cfe6d0d4545c2f6cadab"},
-    {file = "contourpy-1.2.0-cp310-cp310-win32.whl", hash = "sha256:34b9071c040d6fe45d9826cbbe3727d20d83f1b6110d219b83eb0e2a01d79488"},
-    {file = "contourpy-1.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:bd2f1ae63998da104f16a8b788f685e55d65760cd1929518fd94cd682bf03e41"},
-    {file = "contourpy-1.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:dd10c26b4eadae44783c45ad6655220426f971c61d9b239e6f7b16d5cdaaa727"},
-    {file = "contourpy-1.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5c6b28956b7b232ae801406e529ad7b350d3f09a4fde958dfdf3c0520cdde0dd"},
-    {file = "contourpy-1.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ebeac59e9e1eb4b84940d076d9f9a6cec0064e241818bcb6e32124cc5c3e377a"},
-    {file = "contourpy-1.2.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:139d8d2e1c1dd52d78682f505e980f592ba53c9f73bd6be102233e358b401063"},
-    {file = "contourpy-1.2.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1e9dc350fb4c58adc64df3e0703ab076f60aac06e67d48b3848c23647ae4310e"},
-    {file = "contourpy-1.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18fc2b4ed8e4a8fe849d18dce4bd3c7ea637758c6343a1f2bae1e9bd4c9f4686"},
-    {file = "contourpy-1.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:16a7380e943a6d52472096cb7ad5264ecee36ed60888e2a3d3814991a0107286"},
-    {file = "contourpy-1.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:8d8faf05be5ec8e02a4d86f616fc2a0322ff4a4ce26c0f09d9f7fb5330a35c95"},
-    {file = "contourpy-1.2.0-cp311-cp311-win32.whl", hash = "sha256:67b7f17679fa62ec82b7e3e611c43a016b887bd64fb933b3ae8638583006c6d6"},
-    {file = "contourpy-1.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:99ad97258985328b4f207a5e777c1b44a83bfe7cf1f87b99f9c11d4ee477c4de"},
-    {file = "contourpy-1.2.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:575bcaf957a25d1194903a10bc9f316c136c19f24e0985a2b9b5608bdf5dbfe0"},
-    {file = "contourpy-1.2.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9e6c93b5b2dbcedad20a2f18ec22cae47da0d705d454308063421a3b290d9ea4"},
-    {file = "contourpy-1.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:464b423bc2a009088f19bdf1f232299e8b6917963e2b7e1d277da5041f33a779"},
-    {file = "contourpy-1.2.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:68ce4788b7d93e47f84edd3f1f95acdcd142ae60bc0e5493bfd120683d2d4316"},
-    {file = "contourpy-1.2.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3d7d1f8871998cdff5d2ff6a087e5e1780139abe2838e85b0b46b7ae6cc25399"},
-    {file = "contourpy-1.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e739530c662a8d6d42c37c2ed52a6f0932c2d4a3e8c1f90692ad0ce1274abe0"},
-    {file = "contourpy-1.2.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:247b9d16535acaa766d03037d8e8fb20866d054d3c7fbf6fd1f993f11fc60ca0"},
-    {file = "contourpy-1.2.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:461e3ae84cd90b30f8d533f07d87c00379644205b1d33a5ea03381edc4b69431"},
-    {file = "contourpy-1.2.0-cp312-cp312-win32.whl", hash = "sha256:1c2559d6cffc94890b0529ea7eeecc20d6fadc1539273aa27faf503eb4656d8f"},
-    {file = "contourpy-1.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:491b1917afdd8638a05b611a56d46587d5a632cabead889a5440f7c638bc6ed9"},
-    {file = "contourpy-1.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5fd1810973a375ca0e097dee059c407913ba35723b111df75671a1976efa04bc"},
-    {file = "contourpy-1.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:999c71939aad2780f003979b25ac5b8f2df651dac7b38fb8ce6c46ba5abe6ae9"},
-    {file = "contourpy-1.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b7caf9b241464c404613512d5594a6e2ff0cc9cb5615c9475cc1d9b514218ae8"},
-    {file = "contourpy-1.2.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:266270c6f6608340f6c9836a0fb9b367be61dde0c9a9a18d5ece97774105ff3e"},
-    {file = "contourpy-1.2.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dbd50d0a0539ae2e96e537553aff6d02c10ed165ef40c65b0e27e744a0f10af8"},
-    {file = "contourpy-1.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11f8d2554e52f459918f7b8e6aa20ec2a3bce35ce95c1f0ef4ba36fbda306df5"},
-    {file = "contourpy-1.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ce96dd400486e80ac7d195b2d800b03e3e6a787e2a522bfb83755938465a819e"},
-    {file = "contourpy-1.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:6d3364b999c62f539cd403f8123ae426da946e142312a514162adb2addd8d808"},
-    {file = "contourpy-1.2.0-cp39-cp39-win32.whl", hash = "sha256:1c88dfb9e0c77612febebb6ac69d44a8d81e3dc60f993215425b62c1161353f4"},
-    {file = "contourpy-1.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:78e6ad33cf2e2e80c5dfaaa0beec3d61face0fb650557100ee36db808bfa6843"},
-    {file = "contourpy-1.2.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:be16975d94c320432657ad2402f6760990cb640c161ae6da1363051805fa8108"},
-    {file = "contourpy-1.2.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b95a225d4948b26a28c08307a60ac00fb8671b14f2047fc5476613252a129776"},
-    {file = "contourpy-1.2.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:0d7e03c0f9a4f90dc18d4e77e9ef4ec7b7bbb437f7f675be8e530d65ae6ef956"},
-    {file = "contourpy-1.2.0.tar.gz", hash = "sha256:171f311cb758de7da13fc53af221ae47a5877be5a0843a9fe150818c51ed276a"},
+    {file = "contourpy-1.2.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bd7c23df857d488f418439686d3b10ae2fbf9bc256cd045b37a8c16575ea1040"},
+    {file = "contourpy-1.2.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5b9eb0ca724a241683c9685a484da9d35c872fd42756574a7cfbf58af26677fd"},
+    {file = "contourpy-1.2.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4c75507d0a55378240f781599c30e7776674dbaf883a46d1c90f37e563453480"},
+    {file = "contourpy-1.2.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:11959f0ce4a6f7b76ec578576a0b61a28bdc0696194b6347ba3f1c53827178b9"},
+    {file = "contourpy-1.2.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eb3315a8a236ee19b6df481fc5f997436e8ade24a9f03dfdc6bd490fea20c6da"},
+    {file = "contourpy-1.2.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:39f3ecaf76cd98e802f094e0d4fbc6dc9c45a8d0c4d185f0f6c2234e14e5f75b"},
+    {file = "contourpy-1.2.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:94b34f32646ca0414237168d68a9157cb3889f06b096612afdd296003fdd32fd"},
+    {file = "contourpy-1.2.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:457499c79fa84593f22454bbd27670227874cd2ff5d6c84e60575c8b50a69619"},
+    {file = "contourpy-1.2.1-cp310-cp310-win32.whl", hash = "sha256:ac58bdee53cbeba2ecad824fa8159493f0bf3b8ea4e93feb06c9a465d6c87da8"},
+    {file = "contourpy-1.2.1-cp310-cp310-win_amd64.whl", hash = "sha256:9cffe0f850e89d7c0012a1fb8730f75edd4320a0a731ed0c183904fe6ecfc3a9"},
+    {file = "contourpy-1.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6022cecf8f44e36af10bd9118ca71f371078b4c168b6e0fab43d4a889985dbb5"},
+    {file = "contourpy-1.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ef5adb9a3b1d0c645ff694f9bca7702ec2c70f4d734f9922ea34de02294fdf72"},
+    {file = "contourpy-1.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6150ffa5c767bc6332df27157d95442c379b7dce3a38dff89c0f39b63275696f"},
+    {file = "contourpy-1.2.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4c863140fafc615c14a4bf4efd0f4425c02230eb8ef02784c9a156461e62c965"},
+    {file = "contourpy-1.2.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:00e5388f71c1a0610e6fe56b5c44ab7ba14165cdd6d695429c5cd94021e390b2"},
+    {file = "contourpy-1.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d4492d82b3bc7fbb7e3610747b159869468079fe149ec5c4d771fa1f614a14df"},
+    {file = "contourpy-1.2.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:49e70d111fee47284d9dd867c9bb9a7058a3c617274900780c43e38d90fe1205"},
+    {file = "contourpy-1.2.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:b59c0ffceff8d4d3996a45f2bb6f4c207f94684a96bf3d9728dbb77428dd8cb8"},
+    {file = "contourpy-1.2.1-cp311-cp311-win32.whl", hash = "sha256:7b4182299f251060996af5249c286bae9361fa8c6a9cda5efc29fe8bfd6062ec"},
+    {file = "contourpy-1.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:2855c8b0b55958265e8b5888d6a615ba02883b225f2227461aa9127c578a4922"},
+    {file = "contourpy-1.2.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:62828cada4a2b850dbef89c81f5a33741898b305db244904de418cc957ff05dc"},
+    {file = "contourpy-1.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:309be79c0a354afff9ff7da4aaed7c3257e77edf6c1b448a779329431ee79d7e"},
+    {file = "contourpy-1.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2e785e0f2ef0d567099b9ff92cbfb958d71c2d5b9259981cd9bee81bd194c9a4"},
+    {file = "contourpy-1.2.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1cac0a8f71a041aa587410424ad46dfa6a11f6149ceb219ce7dd48f6b02b87a7"},
+    {file = "contourpy-1.2.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:af3f4485884750dddd9c25cb7e3915d83c2db92488b38ccb77dd594eac84c4a0"},
+    {file = "contourpy-1.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9ce6889abac9a42afd07a562c2d6d4b2b7134f83f18571d859b25624a331c90b"},
+    {file = "contourpy-1.2.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:a1eea9aecf761c661d096d39ed9026574de8adb2ae1c5bd7b33558af884fb2ce"},
+    {file = "contourpy-1.2.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:187fa1d4c6acc06adb0fae5544c59898ad781409e61a926ac7e84b8f276dcef4"},
+    {file = "contourpy-1.2.1-cp312-cp312-win32.whl", hash = "sha256:c2528d60e398c7c4c799d56f907664673a807635b857df18f7ae64d3e6ce2d9f"},
+    {file = "contourpy-1.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:1a07fc092a4088ee952ddae19a2b2a85757b923217b7eed584fdf25f53a6e7ce"},
+    {file = "contourpy-1.2.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bb6834cbd983b19f06908b45bfc2dad6ac9479ae04abe923a275b5f48f1a186b"},
+    {file = "contourpy-1.2.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1d59e739ab0e3520e62a26c60707cc3ab0365d2f8fecea74bfe4de72dc56388f"},
+    {file = "contourpy-1.2.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bd3db01f59fdcbce5b22afad19e390260d6d0222f35a1023d9adc5690a889364"},
+    {file = "contourpy-1.2.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a12a813949e5066148712a0626895c26b2578874e4cc63160bb007e6df3436fe"},
+    {file = "contourpy-1.2.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fe0ccca550bb8e5abc22f530ec0466136379c01321fd94f30a22231e8a48d985"},
+    {file = "contourpy-1.2.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e1d59258c3c67c865435d8fbeb35f8c59b8bef3d6f46c1f29f6123556af28445"},
+    {file = "contourpy-1.2.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f32c38afb74bd98ce26de7cc74a67b40afb7b05aae7b42924ea990d51e4dac02"},
+    {file = "contourpy-1.2.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d31a63bc6e6d87f77d71e1abbd7387ab817a66733734883d1fc0021ed9bfa083"},
+    {file = "contourpy-1.2.1-cp39-cp39-win32.whl", hash = "sha256:ddcb8581510311e13421b1f544403c16e901c4e8f09083c881fab2be80ee31ba"},
+    {file = "contourpy-1.2.1-cp39-cp39-win_amd64.whl", hash = "sha256:10a37ae557aabf2509c79715cd20b62e4c7c28b8cd62dd7d99e5ed3ce28c3fd9"},
+    {file = "contourpy-1.2.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a31f94983fecbac95e58388210427d68cd30fe8a36927980fab9c20062645609"},
+    {file = "contourpy-1.2.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ef2b055471c0eb466033760a521efb9d8a32b99ab907fc8358481a1dd29e3bd3"},
+    {file = "contourpy-1.2.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:b33d2bc4f69caedcd0a275329eb2198f560b325605810895627be5d4b876bf7f"},
+    {file = "contourpy-1.2.1.tar.gz", hash = "sha256:4d8908b3bee1c889e547867ca4cdc54e5ab6be6d3e078556814a22457f49423c"},
 ]
 
 [package.dependencies]
-numpy = ">=1.20,<2.0"
+numpy = ">=1.20"
 
 [package.extras]
 bokeh = ["bokeh", "selenium"]
 docs = ["furo", "sphinx (>=7.2)", "sphinx-copybutton"]
-mypy = ["contourpy[bokeh,docs]", "docutils-stubs", "mypy (==1.6.1)", "types-Pillow"]
+mypy = ["contourpy[bokeh,docs]", "docutils-stubs", "mypy (==1.8.0)", "types-Pillow"]
 test = ["Pillow", "contourpy[test-no-images]", "matplotlib"]
 test-no-images = ["pytest", "pytest-cov", "pytest-xdist", "wurlitzer"]
 
@@ -737,6 +748,17 @@ files = [
     {file = "distro-1.9.0.tar.gz", hash = "sha256:2fa77c6fd8940f116ee1d6b94a2f90b13b5ea8d019b98bc8bafdcabcdd9bdbed"},
 ]
 
+[[package]]
+name = "docstring-parser"
+version = "0.16"
+description = "Parse Python docstrings in reST, Google and Numpydoc format"
+optional = true
+python-versions = ">=3.6,<4.0"
+files = [
+    {file = "docstring_parser-0.16-py3-none-any.whl", hash = "sha256:bf0a1387354d3691d102edef7ec124f219ef639982d096e26e3b60aeffa90637"},
+    {file = "docstring_parser-0.16.tar.gz", hash = "sha256:538beabd0af1e2db0146b6bd3caa526c35a34d61af9fd2887f3a8a27a739aa6e"},
+]
+
 [[package]]
 name = "exceptiongroup"
 version = "1.2.0"
@@ -753,13 +775,13 @@ test = ["pytest (>=6)"]
 
 [[package]]
 name = "execnet"
-version = "2.0.2"
+version = "2.1.1"
 description = "execnet: rapid multi-Python deployment"
 optional = false
-python-versions = ">=3.7"
+python-versions = ">=3.8"
 files = [
-    {file = "execnet-2.0.2-py3-none-any.whl", hash = "sha256:88256416ae766bc9e8895c76a87928c0012183da3cc4fc18016e6f050e025f41"},
-    {file = "execnet-2.0.2.tar.gz", hash = "sha256:cc59bc4423742fd71ad227122eb0dd44db51efb3dc4095b45ac9a08c770096af"},
+    {file = "execnet-2.1.1-py3-none-any.whl", hash = "sha256:26dee51f1b80cebd6d0ca8e74dd8745419761d3bef34163928cbebbdc4749fdc"},
+    {file = "execnet-2.1.1.tar.gz", hash = "sha256:5189b52c6121c24feae288166ab41b32549c7e2348652736540b9e6e7d4e72e3"},
 ]
 
 [package.extras]
@@ -848,13 +870,13 @@ tqdm = ">=4.66,<5.0"
 
 [[package]]
 name = "filelock"
-version = "3.13.3"
+version = "3.13.4"
 description = "A platform independent file lock."
 optional = true
 python-versions = ">=3.8"
 files = [
-    {file = "filelock-3.13.3-py3-none-any.whl", hash = "sha256:5ffa845303983e7a0b7ae17636509bc97997d58afeafa72fb141a17b152284cb"},
-    {file = "filelock-3.13.3.tar.gz", hash = "sha256:a79895a25bbefdf55d1a2a0a80968f7dbb28edcd6d4234a0afb3f37ecde4b546"},
+    {file = "filelock-3.13.4-py3-none-any.whl", hash = "sha256:404e5e9253aa60ad457cae1be07c0f0ca90a63931200a47d9b6a6af84fd7b45f"},
+    {file = "filelock-3.13.4.tar.gz", hash = "sha256:d13f466618bfde72bd2c18255e269f72542c6e70e7bac83a0232d6b1cc5c8cf4"},
 ]
 
 [package.extras]
@@ -875,53 +897,53 @@ files = [
 
 [[package]]
 name = "fonttools"
-version = "4.50.0"
+version = "4.51.0"
 description = "Tools to manipulate font files"
 optional = true
 python-versions = ">=3.8"
 files = [
-    {file = "fonttools-4.50.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:effd303fb422f8ce06543a36ca69148471144c534cc25f30e5be752bc4f46736"},
-    {file = "fonttools-4.50.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7913992ab836f621d06aabac118fc258b9947a775a607e1a737eb3a91c360335"},
-    {file = "fonttools-4.50.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e0a1c5bd2f63da4043b63888534b52c5a1fd7ae187c8ffc64cbb7ae475b9dab"},
-    {file = "fonttools-4.50.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d40fc98540fa5360e7ecf2c56ddf3c6e7dd04929543618fd7b5cc76e66390562"},
-    {file = "fonttools-4.50.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:9fff65fbb7afe137bac3113827855e0204482727bddd00a806034ab0d3951d0d"},
-    {file = "fonttools-4.50.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b1aeae3dd2ee719074a9372c89ad94f7c581903306d76befdaca2a559f802472"},
-    {file = "fonttools-4.50.0-cp310-cp310-win32.whl", hash = "sha256:e9623afa319405da33b43c85cceb0585a6f5d3a1d7c604daf4f7e1dd55c03d1f"},
-    {file = "fonttools-4.50.0-cp310-cp310-win_amd64.whl", hash = "sha256:778c5f43e7e654ef7fe0605e80894930bc3a7772e2f496238e57218610140f54"},
-    {file = "fonttools-4.50.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:3dfb102e7f63b78c832e4539969167ffcc0375b013080e6472350965a5fe8048"},
-    {file = "fonttools-4.50.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:9e58fe34cb379ba3d01d5d319d67dd3ce7ca9a47ad044ea2b22635cd2d1247fc"},
-    {file = "fonttools-4.50.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c673ab40d15a442a4e6eb09bf007c1dda47c84ac1e2eecbdf359adacb799c24"},
-    {file = "fonttools-4.50.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9b3ac35cdcd1a4c90c23a5200212c1bb74fa05833cc7c14291d7043a52ca2aaa"},
-    {file = "fonttools-4.50.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:8844e7a2c5f7ecf977e82eb6b3014f025c8b454e046d941ece05b768be5847ae"},
-    {file = "fonttools-4.50.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f849bd3c5c2249b49c98eca5aaebb920d2bfd92b3c69e84ca9bddf133e9f83f0"},
-    {file = "fonttools-4.50.0-cp311-cp311-win32.whl", hash = "sha256:39293ff231b36b035575e81c14626dfc14407a20de5262f9596c2cbb199c3625"},
-    {file = "fonttools-4.50.0-cp311-cp311-win_amd64.whl", hash = "sha256:c33d5023523b44d3481624f840c8646656a1def7630ca562f222eb3ead16c438"},
-    {file = "fonttools-4.50.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:b4a886a6dbe60100ba1cd24de962f8cd18139bd32808da80de1fa9f9f27bf1dc"},
-    {file = "fonttools-4.50.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b2ca1837bfbe5eafa11313dbc7edada79052709a1fffa10cea691210af4aa1fa"},
-    {file = "fonttools-4.50.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0493dd97ac8977e48ffc1476b932b37c847cbb87fd68673dee5182004906828"},
-    {file = "fonttools-4.50.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:77844e2f1b0889120b6c222fc49b2b75c3d88b930615e98893b899b9352a27ea"},
-    {file = "fonttools-4.50.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:3566bfb8c55ed9100afe1ba6f0f12265cd63a1387b9661eb6031a1578a28bad1"},
-    {file = "fonttools-4.50.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:35e10ddbc129cf61775d58a14f2d44121178d89874d32cae1eac722e687d9019"},
-    {file = "fonttools-4.50.0-cp312-cp312-win32.whl", hash = "sha256:cc8140baf9fa8f9b903f2b393a6c413a220fa990264b215bf48484f3d0bf8710"},
-    {file = "fonttools-4.50.0-cp312-cp312-win_amd64.whl", hash = "sha256:0ccc85fd96373ab73c59833b824d7a73846670a0cb1f3afbaee2b2c426a8f931"},
-    {file = "fonttools-4.50.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e270a406219af37581d96c810172001ec536e29e5593aa40d4c01cca3e145aa6"},
-    {file = "fonttools-4.50.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ac2463de667233372e9e1c7e9de3d914b708437ef52a3199fdbf5a60184f190c"},
-    {file = "fonttools-4.50.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:47abd6669195abe87c22750dbcd366dc3a0648f1b7c93c2baa97429c4dc1506e"},
-    {file = "fonttools-4.50.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:074841375e2e3d559aecc86e1224caf78e8b8417bb391e7d2506412538f21adc"},
-    {file = "fonttools-4.50.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:0743fd2191ad7ab43d78cd747215b12033ddee24fa1e088605a3efe80d6984de"},
-    {file = "fonttools-4.50.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:3d7080cce7be5ed65bee3496f09f79a82865a514863197ff4d4d177389e981b0"},
-    {file = "fonttools-4.50.0-cp38-cp38-win32.whl", hash = "sha256:a467ba4e2eadc1d5cc1a11d355abb945f680473fbe30d15617e104c81f483045"},
-    {file = "fonttools-4.50.0-cp38-cp38-win_amd64.whl", hash = "sha256:f77e048f805e00870659d6318fd89ef28ca4ee16a22b4c5e1905b735495fc422"},
-    {file = "fonttools-4.50.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:b6245eafd553c4e9a0708e93be51392bd2288c773523892fbd616d33fd2fda59"},
-    {file = "fonttools-4.50.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a4062cc7e8de26f1603323ef3ae2171c9d29c8a9f5e067d555a2813cd5c7a7e0"},
-    {file = "fonttools-4.50.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:34692850dfd64ba06af61e5791a441f664cb7d21e7b544e8f385718430e8f8e4"},
-    {file = "fonttools-4.50.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:678dd95f26a67e02c50dcb5bf250f95231d455642afbc65a3b0bcdacd4e4dd38"},
-    {file = "fonttools-4.50.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4f2ce7b0b295fe64ac0a85aef46a0f2614995774bd7bc643b85679c0283287f9"},
-    {file = "fonttools-4.50.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d346f4dc2221bfb7ab652d1e37d327578434ce559baf7113b0f55768437fe6a0"},
-    {file = "fonttools-4.50.0-cp39-cp39-win32.whl", hash = "sha256:a51eeaf52ba3afd70bf489be20e52fdfafe6c03d652b02477c6ce23c995222f4"},
-    {file = "fonttools-4.50.0-cp39-cp39-win_amd64.whl", hash = "sha256:8639be40d583e5d9da67795aa3eeeda0488fb577a1d42ae11a5036f18fb16d93"},
-    {file = "fonttools-4.50.0-py3-none-any.whl", hash = "sha256:48fa36da06247aa8282766cfd63efff1bb24e55f020f29a335939ed3844d20d3"},
-    {file = "fonttools-4.50.0.tar.gz", hash = "sha256:fa5cf61058c7dbb104c2ac4e782bf1b2016a8cf2f69de6e4dd6a865d2c969bb5"},
+    {file = "fonttools-4.51.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:84d7751f4468dd8cdd03ddada18b8b0857a5beec80bce9f435742abc9a851a74"},
+    {file = "fonttools-4.51.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8b4850fa2ef2cfbc1d1f689bc159ef0f45d8d83298c1425838095bf53ef46308"},
+    {file = "fonttools-4.51.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5b48a1121117047d82695d276c2af2ee3a24ffe0f502ed581acc2673ecf1037"},
+    {file = "fonttools-4.51.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:180194c7fe60c989bb627d7ed5011f2bef1c4d36ecf3ec64daec8302f1ae0716"},
+    {file = "fonttools-4.51.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:96a48e137c36be55e68845fc4284533bda2980f8d6f835e26bca79d7e2006438"},
+    {file = "fonttools-4.51.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:806e7912c32a657fa39d2d6eb1d3012d35f841387c8fc6cf349ed70b7c340039"},
+    {file = "fonttools-4.51.0-cp310-cp310-win32.whl", hash = "sha256:32b17504696f605e9e960647c5f64b35704782a502cc26a37b800b4d69ff3c77"},
+    {file = "fonttools-4.51.0-cp310-cp310-win_amd64.whl", hash = "sha256:c7e91abdfae1b5c9e3a543f48ce96013f9a08c6c9668f1e6be0beabf0a569c1b"},
+    {file = "fonttools-4.51.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:a8feca65bab31479d795b0d16c9a9852902e3a3c0630678efb0b2b7941ea9c74"},
+    {file = "fonttools-4.51.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8ac27f436e8af7779f0bb4d5425aa3535270494d3bc5459ed27de3f03151e4c2"},
+    {file = "fonttools-4.51.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e19bd9e9964a09cd2433a4b100ca7f34e34731e0758e13ba9a1ed6e5468cc0f"},
+    {file = "fonttools-4.51.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b2b92381f37b39ba2fc98c3a45a9d6383bfc9916a87d66ccb6553f7bdd129097"},
+    {file = "fonttools-4.51.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:5f6bc991d1610f5c3bbe997b0233cbc234b8e82fa99fc0b2932dc1ca5e5afec0"},
+    {file = "fonttools-4.51.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9696fe9f3f0c32e9a321d5268208a7cc9205a52f99b89479d1b035ed54c923f1"},
+    {file = "fonttools-4.51.0-cp311-cp311-win32.whl", hash = "sha256:3bee3f3bd9fa1d5ee616ccfd13b27ca605c2b4270e45715bd2883e9504735034"},
+    {file = "fonttools-4.51.0-cp311-cp311-win_amd64.whl", hash = "sha256:0f08c901d3866a8905363619e3741c33f0a83a680d92a9f0e575985c2634fcc1"},
+    {file = "fonttools-4.51.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:4060acc2bfa2d8e98117828a238889f13b6f69d59f4f2d5857eece5277b829ba"},
+    {file = "fonttools-4.51.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:1250e818b5f8a679ad79660855528120a8f0288f8f30ec88b83db51515411fcc"},
+    {file = "fonttools-4.51.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76f1777d8b3386479ffb4a282e74318e730014d86ce60f016908d9801af9ca2a"},
+    {file = "fonttools-4.51.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8b5ad456813d93b9c4b7ee55302208db2b45324315129d85275c01f5cb7e61a2"},
+    {file = "fonttools-4.51.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:68b3fb7775a923be73e739f92f7e8a72725fd333eab24834041365d2278c3671"},
+    {file = "fonttools-4.51.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8e2f1a4499e3b5ee82c19b5ee57f0294673125c65b0a1ff3764ea1f9db2f9ef5"},
+    {file = "fonttools-4.51.0-cp312-cp312-win32.whl", hash = "sha256:278e50f6b003c6aed19bae2242b364e575bcb16304b53f2b64f6551b9c000e15"},
+    {file = "fonttools-4.51.0-cp312-cp312-win_amd64.whl", hash = "sha256:b3c61423f22165541b9403ee39874dcae84cd57a9078b82e1dce8cb06b07fa2e"},
+    {file = "fonttools-4.51.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:1621ee57da887c17312acc4b0e7ac30d3a4fb0fec6174b2e3754a74c26bbed1e"},
+    {file = "fonttools-4.51.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:e9d9298be7a05bb4801f558522adbe2feea1b0b103d5294ebf24a92dd49b78e5"},
+    {file = "fonttools-4.51.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ee1af4be1c5afe4c96ca23badd368d8dc75f611887fb0c0dac9f71ee5d6f110e"},
+    {file = "fonttools-4.51.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c18b49adc721a7d0b8dfe7c3130c89b8704baf599fb396396d07d4aa69b824a1"},
+    {file = "fonttools-4.51.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:de7c29bdbdd35811f14493ffd2534b88f0ce1b9065316433b22d63ca1cd21f14"},
+    {file = "fonttools-4.51.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:cadf4e12a608ef1d13e039864f484c8a968840afa0258b0b843a0556497ea9ed"},
+    {file = "fonttools-4.51.0-cp38-cp38-win32.whl", hash = "sha256:aefa011207ed36cd280babfaa8510b8176f1a77261833e895a9d96e57e44802f"},
+    {file = "fonttools-4.51.0-cp38-cp38-win_amd64.whl", hash = "sha256:865a58b6e60b0938874af0968cd0553bcd88e0b2cb6e588727117bd099eef836"},
+    {file = "fonttools-4.51.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:60a3409c9112aec02d5fb546f557bca6efa773dcb32ac147c6baf5f742e6258b"},
+    {file = "fonttools-4.51.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f7e89853d8bea103c8e3514b9f9dc86b5b4120afb4583b57eb10dfa5afbe0936"},
+    {file = "fonttools-4.51.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:56fc244f2585d6c00b9bcc59e6593e646cf095a96fe68d62cd4da53dd1287b55"},
+    {file = "fonttools-4.51.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0d145976194a5242fdd22df18a1b451481a88071feadf251221af110ca8f00ce"},
+    {file = "fonttools-4.51.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c5b8cab0c137ca229433570151b5c1fc6af212680b58b15abd797dcdd9dd5051"},
+    {file = "fonttools-4.51.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:54dcf21a2f2d06ded676e3c3f9f74b2bafded3a8ff12f0983160b13e9f2fb4a7"},
+    {file = "fonttools-4.51.0-cp39-cp39-win32.whl", hash = "sha256:0118ef998a0699a96c7b28457f15546815015a2710a1b23a7bf6c1be60c01636"},
+    {file = "fonttools-4.51.0-cp39-cp39-win_amd64.whl", hash = "sha256:599bdb75e220241cedc6faebfafedd7670335d2e29620d207dd0378a4e9ccc5a"},
+    {file = "fonttools-4.51.0-py3-none-any.whl", hash = "sha256:15c94eeef6b095831067f72c825eb0e2d48bb4cea0647c1b05c981ecba2bf39f"},
+    {file = "fonttools-4.51.0.tar.gz", hash = "sha256:dc0673361331566d7a663d7ce0f6fdcbfbdc1f59c6e3ed1165ad7202ca183c68"},
 ]
 
 [package.extras]
@@ -1059,6 +1081,327 @@ smb = ["smbprotocol"]
 ssh = ["paramiko"]
 tqdm = ["tqdm"]
 
+[[package]]
+name = "google-api-core"
+version = "2.18.0"
+description = "Google API client core library"
+optional = true
+python-versions = ">=3.7"
+files = [
+    {file = "google-api-core-2.18.0.tar.gz", hash = "sha256:62d97417bfc674d6cef251e5c4d639a9655e00c45528c4364fbfebb478ce72a9"},
+    {file = "google_api_core-2.18.0-py3-none-any.whl", hash = "sha256:5a63aa102e0049abe85b5b88cb9409234c1f70afcda21ce1e40b285b9629c1d6"},
+]
+
+[package.dependencies]
+google-auth = ">=2.14.1,<3.0.dev0"
+googleapis-common-protos = ">=1.56.2,<2.0.dev0"
+grpcio = [
+    {version = ">=1.49.1,<2.0dev", optional = true, markers = "python_version >= \"3.11\" and extra == \"grpc\""},
+    {version = ">=1.33.2,<2.0dev", optional = true, markers = "python_version < \"3.11\" and extra == \"grpc\""},
+]
+grpcio-status = [
+    {version = ">=1.49.1,<2.0.dev0", optional = true, markers = "python_version >= \"3.11\" and extra == \"grpc\""},
+    {version = ">=1.33.2,<2.0.dev0", optional = true, markers = "python_version < \"3.11\" and extra == \"grpc\""},
+]
+proto-plus = ">=1.22.3,<2.0.0dev"
+protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<5.0.0.dev0"
+requests = ">=2.18.0,<3.0.0.dev0"
+
+[package.extras]
+grpc = ["grpcio (>=1.33.2,<2.0dev)", "grpcio (>=1.49.1,<2.0dev)", "grpcio-status (>=1.33.2,<2.0.dev0)", "grpcio-status (>=1.49.1,<2.0.dev0)"]
+grpcgcp = ["grpcio-gcp (>=0.2.2,<1.0.dev0)"]
+grpcio-gcp = ["grpcio-gcp (>=0.2.2,<1.0.dev0)"]
+
+[[package]]
+name = "google-auth"
+version = "2.29.0"
+description = "Google Authentication Library"
+optional = true
+python-versions = ">=3.7"
+files = [
+    {file = "google-auth-2.29.0.tar.gz", hash = "sha256:672dff332d073227550ffc7457868ac4218d6c500b155fe6cc17d2b13602c360"},
+    {file = "google_auth-2.29.0-py2.py3-none-any.whl", hash = "sha256:d452ad095688cd52bae0ad6fafe027f6a6d6f560e810fec20914e17a09526415"},
+]
+
+[package.dependencies]
+cachetools = ">=2.0.0,<6.0"
+pyasn1-modules = ">=0.2.1"
+rsa = ">=3.1.4,<5"
+
+[package.extras]
+aiohttp = ["aiohttp (>=3.6.2,<4.0.0.dev0)", "requests (>=2.20.0,<3.0.0.dev0)"]
+enterprise-cert = ["cryptography (==36.0.2)", "pyopenssl (==22.0.0)"]
+pyopenssl = ["cryptography (>=38.0.3)", "pyopenssl (>=20.0.0)"]
+reauth = ["pyu2f (>=0.1.5)"]
+requests = ["requests (>=2.20.0,<3.0.0.dev0)"]
+
+[[package]]
+name = "google-cloud-aiplatform"
+version = "1.47.0"
+description = "Vertex AI API client library"
+optional = true
+python-versions = ">=3.8"
+files = [
+    {file = "google-cloud-aiplatform-1.47.0.tar.gz", hash = "sha256:1c4537db09b83957bf0623fd2afb37e339f89a3afcda3efce9dce79b16ab59c7"},
+    {file = "google_cloud_aiplatform-1.47.0-py2.py3-none-any.whl", hash = "sha256:454ef0c44ecaeadcffe58f565acfce49e53895fd51bb20da8af0d48202a4cb21"},
+]
+
+[package.dependencies]
+docstring-parser = "<1"
+google-api-core = {version = ">=1.34.1,<2.0.dev0 || >=2.8.dev0,<3.0.0dev", extras = ["grpc"]}
+google-auth = ">=2.14.1,<3.0.0dev"
+google-cloud-bigquery = ">=1.15.0,<3.20.0 || >3.20.0,<4.0.0dev"
+google-cloud-resource-manager = ">=1.3.3,<3.0.0dev"
+google-cloud-storage = ">=1.32.0,<3.0.0dev"
+packaging = ">=14.3"
+proto-plus = ">=1.22.0,<2.0.0dev"
+protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<5.0.0dev"
+pydantic = "<3"
+shapely = "<3.0.0dev"
+
+[package.extras]
+autologging = ["mlflow (>=1.27.0,<=2.1.1)"]
+cloud-profiler = ["tensorboard-plugin-profile (>=2.4.0,<3.0.0dev)", "tensorflow (>=2.4.0,<3.0.0dev)", "werkzeug (>=2.0.0,<2.1.0dev)"]
+datasets = ["pyarrow (>=10.0.1)", "pyarrow (>=14.0.0)", "pyarrow (>=3.0.0,<8.0dev)"]
+endpoint = ["requests (>=2.28.1)"]
+full = ["cloudpickle (<3.0)", "cloudpickle (>=2.2.1,<3.0)", "docker (>=5.0.3)", "explainable-ai-sdk (>=1.0.0)", "fastapi (>=0.71.0,<0.103.1)", "google-cloud-bigquery", "google-cloud-bigquery-storage", "google-cloud-logging (<4.0)", "google-vizier (>=0.1.6)", "httpx (>=0.23.0,<0.25.0)", "immutabledict", "lit-nlp (==0.4.0)", "mlflow (>=1.27.0,<=2.1.1)", "nest-asyncio (>=1.0.0,<1.6.0)", "numpy (>=1.15.0)", "pandas (>=1.0.0)", "pandas (>=1.0.0,<2.2.0)", "pyarrow (>=10.0.1)", "pyarrow (>=14.0.0)", "pyarrow (>=3.0.0,<8.0dev)", "pyarrow (>=6.0.1)", "pydantic (<2)", "pydantic (<3)", "pyyaml (==5.3.1)", "ray[default] (>=2.4,<2.5.dev0 || >2.9.0,!=2.9.1,!=2.9.2,<=2.9.3)", "ray[default] (>=2.5,<=2.9.3)", "requests (>=2.28.1)", "starlette (>=0.17.1)", "tensorflow (>=2.3.0,<2.15.0)", "tensorflow (>=2.3.0,<3.0.0dev)", "urllib3 (>=1.21.1,<1.27)", "uvicorn[standard] (>=0.16.0)"]
+langchain = ["langchain (>=0.1.13,<0.2)", "langchain-core (<0.2)", "langchain-google-vertexai (<0.2)"]
+lit = ["explainable-ai-sdk (>=1.0.0)", "lit-nlp (==0.4.0)", "pandas (>=1.0.0)", "tensorflow (>=2.3.0,<3.0.0dev)"]
+metadata = ["numpy (>=1.15.0)", "pandas (>=1.0.0)"]
+pipelines = ["pyyaml (==5.3.1)"]
+prediction = ["docker (>=5.0.3)", "fastapi (>=0.71.0,<0.103.1)", "httpx (>=0.23.0,<0.25.0)", "starlette (>=0.17.1)", "uvicorn[standard] (>=0.16.0)"]
+preview = ["cloudpickle (<3.0)", "google-cloud-logging (<4.0)"]
+private-endpoints = ["requests (>=2.28.1)", "urllib3 (>=1.21.1,<1.27)"]
+rapid-evaluation = ["nest-asyncio (>=1.0.0,<1.6.0)", "pandas (>=1.0.0,<2.2.0)"]
+ray = ["google-cloud-bigquery", "google-cloud-bigquery-storage", "immutabledict", "pandas (>=1.0.0,<2.2.0)", "pyarrow (>=6.0.1)", "pydantic (<2)", "ray[default] (>=2.4,<2.5.dev0 || >2.9.0,!=2.9.1,!=2.9.2,<=2.9.3)", "ray[default] (>=2.5,<=2.9.3)"]
+ray-testing = ["google-cloud-bigquery", "google-cloud-bigquery-storage", "immutabledict", "pandas (>=1.0.0,<2.2.0)", "pyarrow (>=6.0.1)", "pydantic (<2)", "pytest-xdist", "ray[default] (>=2.4,<2.5.dev0 || >2.9.0,!=2.9.1,!=2.9.2,<=2.9.3)", "ray[default] (>=2.5,<=2.9.3)", "ray[train] (>=2.4,<2.5.dev0 || >2.9.0,!=2.9.1,!=2.9.2,<=2.9.3)", "scikit-learn", "tensorflow", "torch (>=2.0.0,<2.1.0)", "xgboost", "xgboost-ray"]
+reasoningengine = ["cloudpickle (>=2.2.1,<3.0)", "pydantic (<3)"]
+tensorboard = ["tensorflow (>=2.3.0,<2.15.0)"]
+testing = ["bigframes", "cloudpickle (<3.0)", "cloudpickle (>=2.2.1,<3.0)", "docker (>=5.0.3)", "explainable-ai-sdk (>=1.0.0)", "fastapi (>=0.71.0,<0.103.1)", "google-api-core (>=2.11,<3.0.0)", "google-cloud-bigquery", "google-cloud-bigquery-storage", "google-cloud-logging (<4.0)", "google-vizier (>=0.1.6)", "grpcio-testing", "httpx (>=0.23.0,<0.25.0)", "immutabledict", "ipython", "kfp (>=2.6.0,<3.0.0)", "lit-nlp (==0.4.0)", "mlflow (>=1.27.0,<=2.1.1)", "nest-asyncio (>=1.0.0,<1.6.0)", "numpy (>=1.15.0)", "pandas (>=1.0.0)", "pandas (>=1.0.0,<2.2.0)", "pyarrow (>=10.0.1)", "pyarrow (>=14.0.0)", "pyarrow (>=3.0.0,<8.0dev)", "pyarrow (>=6.0.1)", "pydantic (<2)", "pydantic (<3)", "pyfakefs", "pytest-asyncio", "pytest-xdist", "pyyaml (==5.3.1)", "ray[default] (>=2.4,<2.5.dev0 || >2.9.0,!=2.9.1,!=2.9.2,<=2.9.3)", "ray[default] (>=2.5,<=2.9.3)", "requests (>=2.28.1)", "requests-toolbelt (<1.0.0)", "scikit-learn", "starlette (>=0.17.1)", "tensorboard-plugin-profile (>=2.4.0,<3.0.0dev)", "tensorflow (==2.13.0)", "tensorflow (==2.16.1)", "tensorflow (>=2.3.0,<2.15.0)", "tensorflow (>=2.3.0,<3.0.0dev)", "tensorflow (>=2.4.0,<3.0.0dev)", "torch (>=2.0.0,<2.1.0)", "torch (>=2.2.0)", "urllib3 (>=1.21.1,<1.27)", "uvicorn[standard] (>=0.16.0)", "werkzeug (>=2.0.0,<2.1.0dev)", "xgboost"]
+vizier = ["google-vizier (>=0.1.6)"]
+xai = ["tensorflow (>=2.3.0,<3.0.0dev)"]
+
+[[package]]
+name = "google-cloud-bigquery"
+version = "3.20.1"
+description = "Google BigQuery API client library"
+optional = true
+python-versions = ">=3.7"
+files = [
+    {file = "google-cloud-bigquery-3.20.1.tar.gz", hash = "sha256:318aa3abab5f1900ee24f63ba8bd02b9cdafaa942d738b4dc14a4ef2cc2d925f"},
+    {file = "google_cloud_bigquery-3.20.1-py2.py3-none-any.whl", hash = "sha256:d3e62fe61138c658b8853c402e2d8fb9346c84e602e21e3a26584be10fc5b0a4"},
+]
+
+[package.dependencies]
+google-api-core = {version = ">=1.34.1,<2.0.dev0 || >=2.11.dev0,<3.0.0dev", extras = ["grpc"]}
+google-auth = ">=2.14.1,<3.0.0dev"
+google-cloud-core = ">=1.6.0,<3.0.0dev"
+google-resumable-media = ">=0.6.0,<3.0dev"
+packaging = ">=20.0.0"
+python-dateutil = ">=2.7.2,<3.0dev"
+requests = ">=2.21.0,<3.0.0dev"
+
+[package.extras]
+all = ["Shapely (>=1.8.4,<3.0.0dev)", "db-dtypes (>=0.3.0,<2.0.0dev)", "geopandas (>=0.9.0,<1.0dev)", "google-cloud-bigquery-storage (>=2.6.0,<3.0.0dev)", "grpcio (>=1.47.0,<2.0dev)", "grpcio (>=1.49.1,<2.0dev)", "importlib-metadata (>=1.0.0)", "ipykernel (>=6.0.0)", "ipython (>=7.23.1,!=8.1.0)", "ipywidgets (>=7.7.0)", "opentelemetry-api (>=1.1.0)", "opentelemetry-instrumentation (>=0.20b0)", "opentelemetry-sdk (>=1.1.0)", "pandas (>=1.1.0)", "proto-plus (>=1.15.0,<2.0.0dev)", "protobuf (>=3.19.5,!=3.20.0,!=3.20.1,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<5.0.0dev)", "pyarrow (>=3.0.0)", "tqdm (>=4.7.4,<5.0.0dev)"]
+bigquery-v2 = ["proto-plus (>=1.15.0,<2.0.0dev)", "protobuf (>=3.19.5,!=3.20.0,!=3.20.1,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<5.0.0dev)"]
+bqstorage = ["google-cloud-bigquery-storage (>=2.6.0,<3.0.0dev)", "grpcio (>=1.47.0,<2.0dev)", "grpcio (>=1.49.1,<2.0dev)", "pyarrow (>=3.0.0)"]
+geopandas = ["Shapely (>=1.8.4,<3.0.0dev)", "geopandas (>=0.9.0,<1.0dev)"]
+ipython = ["ipykernel (>=6.0.0)", "ipython (>=7.23.1,!=8.1.0)"]
+ipywidgets = ["ipykernel (>=6.0.0)", "ipywidgets (>=7.7.0)"]
+opentelemetry = ["opentelemetry-api (>=1.1.0)", "opentelemetry-instrumentation (>=0.20b0)", "opentelemetry-sdk (>=1.1.0)"]
+pandas = ["db-dtypes (>=0.3.0,<2.0.0dev)", "importlib-metadata (>=1.0.0)", "pandas (>=1.1.0)", "pyarrow (>=3.0.0)"]
+tqdm = ["tqdm (>=4.7.4,<5.0.0dev)"]
+
+[[package]]
+name = "google-cloud-core"
+version = "2.4.1"
+description = "Google Cloud API client core library"
+optional = true
+python-versions = ">=3.7"
+files = [
+    {file = "google-cloud-core-2.4.1.tar.gz", hash = "sha256:9b7749272a812bde58fff28868d0c5e2f585b82f37e09a1f6ed2d4d10f134073"},
+    {file = "google_cloud_core-2.4.1-py2.py3-none-any.whl", hash = "sha256:a9e6a4422b9ac5c29f79a0ede9485473338e2ce78d91f2370c01e730eab22e61"},
+]
+
+[package.dependencies]
+google-api-core = ">=1.31.6,<2.0.dev0 || >2.3.0,<3.0.0dev"
+google-auth = ">=1.25.0,<3.0dev"
+
+[package.extras]
+grpc = ["grpcio (>=1.38.0,<2.0dev)", "grpcio-status (>=1.38.0,<2.0.dev0)"]
+
+[[package]]
+name = "google-cloud-resource-manager"
+version = "1.12.3"
+description = "Google Cloud Resource Manager API client library"
+optional = true
+python-versions = ">=3.7"
+files = [
+    {file = "google-cloud-resource-manager-1.12.3.tar.gz", hash = "sha256:809851824119834e4f2310b2c4f38621c1d16b2bb14d5b9f132e69c79d355e7f"},
+    {file = "google_cloud_resource_manager-1.12.3-py2.py3-none-any.whl", hash = "sha256:92be7d6959927b76d90eafc4028985c37975a46ded5466a018f02e8649e113d4"},
+]
+
+[package.dependencies]
+google-api-core = {version = ">=1.34.1,<2.0.dev0 || >=2.11.dev0,<3.0.0dev", extras = ["grpc"]}
+google-auth = ">=2.14.1,<2.24.0 || >2.24.0,<2.25.0 || >2.25.0,<3.0.0dev"
+grpc-google-iam-v1 = ">=0.12.4,<1.0.0dev"
+proto-plus = ">=1.22.3,<2.0.0dev"
+protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<5.0.0dev"
+
+[[package]]
+name = "google-cloud-storage"
+version = "2.16.0"
+description = "Google Cloud Storage API client library"
+optional = true
+python-versions = ">=3.7"
+files = [
+    {file = "google-cloud-storage-2.16.0.tar.gz", hash = "sha256:dda485fa503710a828d01246bd16ce9db0823dc51bbca742ce96a6817d58669f"},
+    {file = "google_cloud_storage-2.16.0-py2.py3-none-any.whl", hash = "sha256:91a06b96fb79cf9cdfb4e759f178ce11ea885c79938f89590344d079305f5852"},
+]
+
+[package.dependencies]
+google-api-core = ">=2.15.0,<3.0.0dev"
+google-auth = ">=2.26.1,<3.0dev"
+google-cloud-core = ">=2.3.0,<3.0dev"
+google-crc32c = ">=1.0,<2.0dev"
+google-resumable-media = ">=2.6.0"
+requests = ">=2.18.0,<3.0.0dev"
+
+[package.extras]
+protobuf = ["protobuf (<5.0.0dev)"]
+
+[[package]]
+name = "google-crc32c"
+version = "1.5.0"
+description = "A python wrapper of the C library 'Google CRC32C'"
+optional = true
+python-versions = ">=3.7"
+files = [
+    {file = "google-crc32c-1.5.0.tar.gz", hash = "sha256:89284716bc6a5a415d4eaa11b1726d2d60a0cd12aadf5439828353662ede9dd7"},
+    {file = "google_crc32c-1.5.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:596d1f98fc70232fcb6590c439f43b350cb762fb5d61ce7b0e9db4539654cc13"},
+    {file = "google_crc32c-1.5.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:be82c3c8cfb15b30f36768797a640e800513793d6ae1724aaaafe5bf86f8f346"},
+    {file = "google_crc32c-1.5.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:461665ff58895f508e2866824a47bdee72497b091c730071f2b7575d5762ab65"},
+    {file = "google_crc32c-1.5.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e2096eddb4e7c7bdae4bd69ad364e55e07b8316653234a56552d9c988bd2d61b"},
+    {file = "google_crc32c-1.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:116a7c3c616dd14a3de8c64a965828b197e5f2d121fedd2f8c5585c547e87b02"},
+    {file = "google_crc32c-1.5.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:5829b792bf5822fd0a6f6eb34c5f81dd074f01d570ed7f36aa101d6fc7a0a6e4"},
+    {file = "google_crc32c-1.5.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:64e52e2b3970bd891309c113b54cf0e4384762c934d5ae56e283f9a0afcd953e"},
+    {file = "google_crc32c-1.5.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:02ebb8bf46c13e36998aeaad1de9b48f4caf545e91d14041270d9dca767b780c"},
+    {file = "google_crc32c-1.5.0-cp310-cp310-win32.whl", hash = "sha256:2e920d506ec85eb4ba50cd4228c2bec05642894d4c73c59b3a2fe20346bd00ee"},
+    {file = "google_crc32c-1.5.0-cp310-cp310-win_amd64.whl", hash = "sha256:07eb3c611ce363c51a933bf6bd7f8e3878a51d124acfc89452a75120bc436289"},
+    {file = "google_crc32c-1.5.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:cae0274952c079886567f3f4f685bcaf5708f0a23a5f5216fdab71f81a6c0273"},
+    {file = "google_crc32c-1.5.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1034d91442ead5a95b5aaef90dbfaca8633b0247d1e41621d1e9f9db88c36298"},
+    {file = "google_crc32c-1.5.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7c42c70cd1d362284289c6273adda4c6af8039a8ae12dc451dcd61cdabb8ab57"},
+    {file = "google_crc32c-1.5.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8485b340a6a9e76c62a7dce3c98e5f102c9219f4cfbf896a00cf48caf078d438"},
+    {file = "google_crc32c-1.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:77e2fd3057c9d78e225fa0a2160f96b64a824de17840351b26825b0848022906"},
+    {file = "google_crc32c-1.5.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f583edb943cf2e09c60441b910d6a20b4d9d626c75a36c8fcac01a6c96c01183"},
+    {file = "google_crc32c-1.5.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:a1fd716e7a01f8e717490fbe2e431d2905ab8aa598b9b12f8d10abebb36b04dd"},
+    {file = "google_crc32c-1.5.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:72218785ce41b9cfd2fc1d6a017dc1ff7acfc4c17d01053265c41a2c0cc39b8c"},
+    {file = "google_crc32c-1.5.0-cp311-cp311-win32.whl", hash = "sha256:66741ef4ee08ea0b2cc3c86916ab66b6aef03768525627fd6a1b34968b4e3709"},
+    {file = "google_crc32c-1.5.0-cp311-cp311-win_amd64.whl", hash = "sha256:ba1eb1843304b1e5537e1fca632fa894d6f6deca8d6389636ee5b4797affb968"},
+    {file = "google_crc32c-1.5.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:98cb4d057f285bd80d8778ebc4fde6b4d509ac3f331758fb1528b733215443ae"},
+    {file = "google_crc32c-1.5.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fd8536e902db7e365f49e7d9029283403974ccf29b13fc7028b97e2295b33556"},
+    {file = "google_crc32c-1.5.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:19e0a019d2c4dcc5e598cd4a4bc7b008546b0358bd322537c74ad47a5386884f"},
+    {file = "google_crc32c-1.5.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:02c65b9817512edc6a4ae7c7e987fea799d2e0ee40c53ec573a692bee24de876"},
+    {file = "google_crc32c-1.5.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6ac08d24c1f16bd2bf5eca8eaf8304812f44af5cfe5062006ec676e7e1d50afc"},
+    {file = "google_crc32c-1.5.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:3359fc442a743e870f4588fcf5dcbc1bf929df1fad8fb9905cd94e5edb02e84c"},
+    {file = "google_crc32c-1.5.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:1e986b206dae4476f41bcec1faa057851f3889503a70e1bdb2378d406223994a"},
+    {file = "google_crc32c-1.5.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:de06adc872bcd8c2a4e0dc51250e9e65ef2ca91be023b9d13ebd67c2ba552e1e"},
+    {file = "google_crc32c-1.5.0-cp37-cp37m-win32.whl", hash = "sha256:d3515f198eaa2f0ed49f8819d5732d70698c3fa37384146079b3799b97667a94"},
+    {file = "google_crc32c-1.5.0-cp37-cp37m-win_amd64.whl", hash = "sha256:67b741654b851abafb7bc625b6d1cdd520a379074e64b6a128e3b688c3c04740"},
+    {file = "google_crc32c-1.5.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:c02ec1c5856179f171e032a31d6f8bf84e5a75c45c33b2e20a3de353b266ebd8"},
+    {file = "google_crc32c-1.5.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:edfedb64740750e1a3b16152620220f51d58ff1b4abceb339ca92e934775c27a"},
+    {file = "google_crc32c-1.5.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:84e6e8cd997930fc66d5bb4fde61e2b62ba19d62b7abd7a69920406f9ecca946"},
+    {file = "google_crc32c-1.5.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:024894d9d3cfbc5943f8f230e23950cd4906b2fe004c72e29b209420a1e6b05a"},
+    {file = "google_crc32c-1.5.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:998679bf62b7fb599d2878aa3ed06b9ce688b8974893e7223c60db155f26bd8d"},
+    {file = "google_crc32c-1.5.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:83c681c526a3439b5cf94f7420471705bbf96262f49a6fe546a6db5f687a3d4a"},
+    {file = "google_crc32c-1.5.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:4c6fdd4fccbec90cc8a01fc00773fcd5fa28db683c116ee3cb35cd5da9ef6c37"},
+    {file = "google_crc32c-1.5.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:5ae44e10a8e3407dbe138984f21e536583f2bba1be9491239f942c2464ac0894"},
+    {file = "google_crc32c-1.5.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:37933ec6e693e51a5b07505bd05de57eee12f3e8c32b07da7e73669398e6630a"},
+    {file = "google_crc32c-1.5.0-cp38-cp38-win32.whl", hash = "sha256:fe70e325aa68fa4b5edf7d1a4b6f691eb04bbccac0ace68e34820d283b5f80d4"},
+    {file = "google_crc32c-1.5.0-cp38-cp38-win_amd64.whl", hash = "sha256:74dea7751d98034887dbd821b7aae3e1d36eda111d6ca36c206c44478035709c"},
+    {file = "google_crc32c-1.5.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c6c777a480337ac14f38564ac88ae82d4cd238bf293f0a22295b66eb89ffced7"},
+    {file = "google_crc32c-1.5.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:759ce4851a4bb15ecabae28f4d2e18983c244eddd767f560165563bf9aefbc8d"},
+    {file = "google_crc32c-1.5.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f13cae8cc389a440def0c8c52057f37359014ccbc9dc1f0827936bcd367c6100"},
+    {file = "google_crc32c-1.5.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e560628513ed34759456a416bf86b54b2476c59144a9138165c9a1575801d0d9"},
+    {file = "google_crc32c-1.5.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e1674e4307fa3024fc897ca774e9c7562c957af85df55efe2988ed9056dc4e57"},
+    {file = "google_crc32c-1.5.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:278d2ed7c16cfc075c91378c4f47924c0625f5fc84b2d50d921b18b7975bd210"},
+    {file = "google_crc32c-1.5.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d5280312b9af0976231f9e317c20e4a61cd2f9629b7bfea6a693d1878a264ebd"},
+    {file = "google_crc32c-1.5.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:8b87e1a59c38f275c0e3676fc2ab6d59eccecfd460be267ac360cc31f7bcde96"},
+    {file = "google_crc32c-1.5.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:7c074fece789b5034b9b1404a1f8208fc2d4c6ce9decdd16e8220c5a793e6f61"},
+    {file = "google_crc32c-1.5.0-cp39-cp39-win32.whl", hash = "sha256:7f57f14606cd1dd0f0de396e1e53824c371e9544a822648cd76c034d209b559c"},
+    {file = "google_crc32c-1.5.0-cp39-cp39-win_amd64.whl", hash = "sha256:a2355cba1f4ad8b6988a4ca3feed5bff33f6af2d7f134852cf279c2aebfde541"},
+    {file = "google_crc32c-1.5.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:f314013e7dcd5cf45ab1945d92e713eec788166262ae8deb2cfacd53def27325"},
+    {file = "google_crc32c-1.5.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3b747a674c20a67343cb61d43fdd9207ce5da6a99f629c6e2541aa0e89215bcd"},
+    {file = "google_crc32c-1.5.0-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8f24ed114432de109aa9fd317278518a5af2d31ac2ea6b952b2f7782b43da091"},
+    {file = "google_crc32c-1.5.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8667b48e7a7ef66afba2c81e1094ef526388d35b873966d8a9a447974ed9178"},
+    {file = "google_crc32c-1.5.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:1c7abdac90433b09bad6c43a43af253e688c9cfc1c86d332aed13f9a7c7f65e2"},
+    {file = "google_crc32c-1.5.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:6f998db4e71b645350b9ac28a2167e6632c239963ca9da411523bb439c5c514d"},
+    {file = "google_crc32c-1.5.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9c99616c853bb585301df6de07ca2cadad344fd1ada6d62bb30aec05219c45d2"},
+    {file = "google_crc32c-1.5.0-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2ad40e31093a4af319dadf503b2467ccdc8f67c72e4bcba97f8c10cb078207b5"},
+    {file = "google_crc32c-1.5.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cd67cf24a553339d5062eff51013780a00d6f97a39ca062781d06b3a73b15462"},
+    {file = "google_crc32c-1.5.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:398af5e3ba9cf768787eef45c803ff9614cc3e22a5b2f7d7ae116df8b11e3314"},
+    {file = "google_crc32c-1.5.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:b1f8133c9a275df5613a451e73f36c2aea4fe13c5c8997e22cf355ebd7bd0728"},
+    {file = "google_crc32c-1.5.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9ba053c5f50430a3fcfd36f75aff9caeba0440b2d076afdb79a318d6ca245f88"},
+    {file = "google_crc32c-1.5.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:272d3892a1e1a2dbc39cc5cde96834c236d5327e2122d3aaa19f6614531bb6eb"},
+    {file = "google_crc32c-1.5.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:635f5d4dd18758a1fbd1049a8e8d2fee4ffed124462d837d1a02a0e009c3ab31"},
+    {file = "google_crc32c-1.5.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:c672d99a345849301784604bfeaeba4db0c7aae50b95be04dd651fd2a7310b93"},
+]
+
+[package.extras]
+testing = ["pytest"]
+
+[[package]]
+name = "google-resumable-media"
+version = "2.7.0"
+description = "Utilities for Google Media Downloads and Resumable Uploads"
+optional = true
+python-versions = ">= 3.7"
+files = [
+    {file = "google-resumable-media-2.7.0.tar.gz", hash = "sha256:5f18f5fa9836f4b083162064a1c2c98c17239bfda9ca50ad970ccf905f3e625b"},
+    {file = "google_resumable_media-2.7.0-py2.py3-none-any.whl", hash = "sha256:79543cfe433b63fd81c0844b7803aba1bb8950b47bedf7d980c38fa123937e08"},
+]
+
+[package.dependencies]
+google-crc32c = ">=1.0,<2.0dev"
+
+[package.extras]
+aiohttp = ["aiohttp (>=3.6.2,<4.0.0dev)", "google-auth (>=1.22.0,<2.0dev)"]
+requests = ["requests (>=2.18.0,<3.0.0dev)"]
+
+[[package]]
+name = "googleapis-common-protos"
+version = "1.63.0"
+description = "Common protobufs used in Google APIs"
+optional = true
+python-versions = ">=3.7"
+files = [
+    {file = "googleapis-common-protos-1.63.0.tar.gz", hash = "sha256:17ad01b11d5f1d0171c06d3ba5c04c54474e883b66b949722b4938ee2694ef4e"},
+    {file = "googleapis_common_protos-1.63.0-py2.py3-none-any.whl", hash = "sha256:ae45f75702f7c08b541f750854a678bd8f534a1a6bace6afe975f1d0a82d6632"},
+]
+
+[package.dependencies]
+grpcio = {version = ">=1.44.0,<2.0.0.dev0", optional = true, markers = "extra == \"grpc\""}
+protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<5.0.0.dev0"
+
+[package.extras]
+grpc = ["grpcio (>=1.44.0,<2.0.0.dev0)"]
+
+[[package]]
+name = "grpc-google-iam-v1"
+version = "0.13.0"
+description = "IAM API client library"
+optional = true
+python-versions = ">=3.7"
+files = [
+    {file = "grpc-google-iam-v1-0.13.0.tar.gz", hash = "sha256:fad318608b9e093258fbf12529180f400d1c44453698a33509cc6ecf005b294e"},
+    {file = "grpc_google_iam_v1-0.13.0-py2.py3-none-any.whl", hash = "sha256:53902e2af7de8df8c1bd91373d9be55b0743ec267a7428ea638db3775becae89"},
+]
+
+[package.dependencies]
+googleapis-common-protos = {version = ">=1.56.0,<2.0.0dev", extras = ["grpc"]}
+grpcio = ">=1.44.0,<2.0.0dev"
+protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<5.0.0dev"
+
 [[package]]
 name = "grpcio"
 version = "1.62.1"
@@ -1125,6 +1468,22 @@ files = [
 [package.extras]
 protobuf = ["grpcio-tools (>=1.62.1)"]
 
+[[package]]
+name = "grpcio-status"
+version = "1.62.1"
+description = "Status proto mapping for gRPC"
+optional = true
+python-versions = ">=3.6"
+files = [
+    {file = "grpcio-status-1.62.1.tar.gz", hash = "sha256:3431c8abbab0054912c41df5c72f03ddf3b7a67be8a287bb3c18a3456f96ff77"},
+    {file = "grpcio_status-1.62.1-py3-none-any.whl", hash = "sha256:af0c3ab85da31669f21749e8d53d669c061ebc6ce5637be49a46edcb7aa8ab17"},
+]
+
+[package.dependencies]
+googleapis-common-protos = ">=1.5.5"
+grpcio = ">=1.62.1"
+protobuf = ">=4.21.6"
+
 [[package]]
 name = "grpcio-tools"
 version = "1.62.1"
@@ -1335,13 +1694,13 @@ files = [
 
 [[package]]
 name = "idna"
-version = "3.6"
+version = "3.7"
 description = "Internationalized Domain Names in Applications (IDNA)"
 optional = false
 python-versions = ">=3.5"
 files = [
-    {file = "idna-3.6-py3-none-any.whl", hash = "sha256:c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f"},
-    {file = "idna-3.6.tar.gz", hash = "sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca"},
+    {file = "idna-3.7-py3-none-any.whl", hash = "sha256:82fee1fc78add43492d3a1898bfa6d8a904cc97d8427f683ed8e798d07761aa0"},
+    {file = "idna-3.7.tar.gz", hash = "sha256:028ff3aadf0609c1fd278d8ea3089299412a7a8b9bd005dd08b9f8285bcb5cfc"},
 ]
 
 [[package]]
@@ -1500,13 +1859,13 @@ i18n = ["Babel (>=2.7)"]
 
 [[package]]
 name = "joblib"
-version = "1.3.2"
+version = "1.4.0"
 description = "Lightweight pipelining with Python functions"
 optional = true
-python-versions = ">=3.7"
+python-versions = ">=3.8"
 files = [
-    {file = "joblib-1.3.2-py3-none-any.whl", hash = "sha256:ef4331c65f239985f3f2220ecc87db222f08fd22097a3dd5698f693875f8cbb9"},
-    {file = "joblib-1.3.2.tar.gz", hash = "sha256:92f865e621e17784e7955080b6d042489e3b8e294949cc44c6eac304f59772b1"},
+    {file = "joblib-1.4.0-py3-none-any.whl", hash = "sha256:42942470d4062537be4d54c83511186da1fc14ba354961a2114da91efa9a4ed7"},
+    {file = "joblib-1.4.0.tar.gz", hash = "sha256:1eb0dc091919cd384490de890cb5dfd538410a6d4b3b54eef09fb8c50b409b1c"},
 ]
 
 [[package]]
@@ -1667,12 +2026,12 @@ files = [
 
 [[package]]
 name = "llama-cpp-python"
-version = "0.2.58"
+version = "0.2.61"
 description = "Python bindings for the llama.cpp library"
 optional = true
 python-versions = ">=3.8"
 files = [
-    {file = "llama_cpp_python-0.2.58.tar.gz", hash = "sha256:50d4d16835326b15f5c4ed20dbf2f24508bf29b34531d50612ce215a596dde3f"},
+    {file = "llama_cpp_python-0.2.61.tar.gz", hash = "sha256:2d554259a66040f5daae7f3cf7e43b44971dc49f10225a9ba196eb2a49778bd4"},
 ]
 
 [package.dependencies]
@@ -1684,7 +2043,7 @@ typing-extensions = ">=4.5.0"
 [package.extras]
 all = ["llama_cpp_python[dev,server,test]"]
 dev = ["black (>=23.3.0)", "httpx (>=0.24.1)", "mkdocs (>=1.4.3)", "mkdocs-material (>=9.1.18)", "mkdocstrings[python] (>=0.22.0)", "pytest (>=7.4.0)", "twine (>=4.0.2)"]
-server = ["fastapi (>=0.100.0)", "pydantic-settings (>=2.0.1)", "sse-starlette (>=1.6.1)", "starlette-context (>=0.3.6,<0.4)", "uvicorn (>=0.22.0)"]
+server = ["PyYAML (>=5.1)", "fastapi (>=0.100.0)", "pydantic-settings (>=2.0.1)", "sse-starlette (>=1.6.1)", "starlette-context (>=0.3.6,<0.4)", "uvicorn (>=0.22.0)"]
 test = ["httpx (>=0.24.1)", "pytest (>=7.4.0)", "scipy (>=1.10)"]
 
 [[package]]
@@ -1776,39 +2135,39 @@ files = [
 
 [[package]]
 name = "matplotlib"
-version = "3.8.3"
+version = "3.8.4"
 description = "Python plotting package"
 optional = true
 python-versions = ">=3.9"
 files = [
-    {file = "matplotlib-3.8.3-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:cf60138ccc8004f117ab2a2bad513cc4d122e55864b4fe7adf4db20ca68a078f"},
-    {file = "matplotlib-3.8.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5f557156f7116be3340cdeef7f128fa99b0d5d287d5f41a16e169819dcf22357"},
-    {file = "matplotlib-3.8.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f386cf162b059809ecfac3bcc491a9ea17da69fa35c8ded8ad154cd4b933d5ec"},
-    {file = "matplotlib-3.8.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b3c5f96f57b0369c288bf6f9b5274ba45787f7e0589a34d24bdbaf6d3344632f"},
-    {file = "matplotlib-3.8.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:83e0f72e2c116ca7e571c57aa29b0fe697d4c6425c4e87c6e994159e0c008635"},
-    {file = "matplotlib-3.8.3-cp310-cp310-win_amd64.whl", hash = "sha256:1c5c8290074ba31a41db1dc332dc2b62def469ff33766cbe325d32a3ee291aea"},
-    {file = "matplotlib-3.8.3-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:5184e07c7e1d6d1481862ee361905b7059f7fe065fc837f7c3dc11eeb3f2f900"},
-    {file = "matplotlib-3.8.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d7e7e0993d0758933b1a241a432b42c2db22dfa37d4108342ab4afb9557cbe3e"},
-    {file = "matplotlib-3.8.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:04b36ad07eac9740fc76c2aa16edf94e50b297d6eb4c081e3add863de4bb19a7"},
-    {file = "matplotlib-3.8.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7c42dae72a62f14982f1474f7e5c9959fc4bc70c9de11cc5244c6e766200ba65"},
-    {file = "matplotlib-3.8.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:bf5932eee0d428192c40b7eac1399d608f5d995f975cdb9d1e6b48539a5ad8d0"},
-    {file = "matplotlib-3.8.3-cp311-cp311-win_amd64.whl", hash = "sha256:40321634e3a05ed02abf7c7b47a50be50b53ef3eaa3a573847431a545585b407"},
-    {file = "matplotlib-3.8.3-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:09074f8057917d17ab52c242fdf4916f30e99959c1908958b1fc6032e2d0f6d4"},
-    {file = "matplotlib-3.8.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5745f6d0fb5acfabbb2790318db03809a253096e98c91b9a31969df28ee604aa"},
-    {file = "matplotlib-3.8.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b97653d869a71721b639714b42d87cda4cfee0ee74b47c569e4874c7590c55c5"},
-    {file = "matplotlib-3.8.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:242489efdb75b690c9c2e70bb5c6550727058c8a614e4c7716f363c27e10bba1"},
-    {file = "matplotlib-3.8.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:83c0653c64b73926730bd9ea14aa0f50f202ba187c307a881673bad4985967b7"},
-    {file = "matplotlib-3.8.3-cp312-cp312-win_amd64.whl", hash = "sha256:ef6c1025a570354297d6c15f7d0f296d95f88bd3850066b7f1e7b4f2f4c13a39"},
-    {file = "matplotlib-3.8.3-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:c4af3f7317f8a1009bbb2d0bf23dfaba859eb7dd4ccbd604eba146dccaaaf0a4"},
-    {file = "matplotlib-3.8.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4c6e00a65d017d26009bac6808f637b75ceade3e1ff91a138576f6b3065eeeba"},
-    {file = "matplotlib-3.8.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e7b49ab49a3bea17802df6872f8d44f664ba8f9be0632a60c99b20b6db2165b7"},
-    {file = "matplotlib-3.8.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6728dde0a3997396b053602dbd907a9bd64ec7d5cf99e728b404083698d3ca01"},
-    {file = "matplotlib-3.8.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:813925d08fb86aba139f2d31864928d67511f64e5945ca909ad5bc09a96189bb"},
-    {file = "matplotlib-3.8.3-cp39-cp39-win_amd64.whl", hash = "sha256:cd3a0c2be76f4e7be03d34a14d49ded6acf22ef61f88da600a18a5cd8b3c5f3c"},
-    {file = "matplotlib-3.8.3-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:fa93695d5c08544f4a0dfd0965f378e7afc410d8672816aff1e81be1f45dbf2e"},
-    {file = "matplotlib-3.8.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e9764df0e8778f06414b9d281a75235c1e85071f64bb5d71564b97c1306a2afc"},
-    {file = "matplotlib-3.8.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:5e431a09e6fab4012b01fc155db0ce6dccacdbabe8198197f523a4ef4805eb26"},
-    {file = "matplotlib-3.8.3.tar.gz", hash = "sha256:7b416239e9ae38be54b028abbf9048aff5054a9aba5416bef0bd17f9162ce161"},
+    {file = "matplotlib-3.8.4-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:abc9d838f93583650c35eca41cfcec65b2e7cb50fd486da6f0c49b5e1ed23014"},
+    {file = "matplotlib-3.8.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8f65c9f002d281a6e904976007b2d46a1ee2bcea3a68a8c12dda24709ddc9106"},
+    {file = "matplotlib-3.8.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ce1edd9f5383b504dbc26eeea404ed0a00656c526638129028b758fd43fc5f10"},
+    {file = "matplotlib-3.8.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ecd79298550cba13a43c340581a3ec9c707bd895a6a061a78fa2524660482fc0"},
+    {file = "matplotlib-3.8.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:90df07db7b599fe7035d2f74ab7e438b656528c68ba6bb59b7dc46af39ee48ef"},
+    {file = "matplotlib-3.8.4-cp310-cp310-win_amd64.whl", hash = "sha256:ac24233e8f2939ac4fd2919eed1e9c0871eac8057666070e94cbf0b33dd9c338"},
+    {file = "matplotlib-3.8.4-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:72f9322712e4562e792b2961971891b9fbbb0e525011e09ea0d1f416c4645661"},
+    {file = "matplotlib-3.8.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:232ce322bfd020a434caaffbd9a95333f7c2491e59cfc014041d95e38ab90d1c"},
+    {file = "matplotlib-3.8.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6addbd5b488aedb7f9bc19f91cd87ea476206f45d7116fcfe3d31416702a82fa"},
+    {file = "matplotlib-3.8.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc4ccdc64e3039fc303defd119658148f2349239871db72cd74e2eeaa9b80b71"},
+    {file = "matplotlib-3.8.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:b7a2a253d3b36d90c8993b4620183b55665a429da8357a4f621e78cd48b2b30b"},
+    {file = "matplotlib-3.8.4-cp311-cp311-win_amd64.whl", hash = "sha256:8080d5081a86e690d7688ffa542532e87f224c38a6ed71f8fbed34dd1d9fedae"},
+    {file = "matplotlib-3.8.4-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:6485ac1f2e84676cff22e693eaa4fbed50ef5dc37173ce1f023daef4687df616"},
+    {file = "matplotlib-3.8.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c89ee9314ef48c72fe92ce55c4e95f2f39d70208f9f1d9db4e64079420d8d732"},
+    {file = "matplotlib-3.8.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50bac6e4d77e4262c4340d7a985c30912054745ec99756ce213bfbc3cb3808eb"},
+    {file = "matplotlib-3.8.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f51c4c869d4b60d769f7b4406eec39596648d9d70246428745a681c327a8ad30"},
+    {file = "matplotlib-3.8.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:b12ba985837e4899b762b81f5b2845bd1a28f4fdd1a126d9ace64e9c4eb2fb25"},
+    {file = "matplotlib-3.8.4-cp312-cp312-win_amd64.whl", hash = "sha256:7a6769f58ce51791b4cb8b4d7642489df347697cd3e23d88266aaaee93b41d9a"},
+    {file = "matplotlib-3.8.4-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:843cbde2f0946dadd8c5c11c6d91847abd18ec76859dc319362a0964493f0ba6"},
+    {file = "matplotlib-3.8.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1c13f041a7178f9780fb61cc3a2b10423d5e125480e4be51beaf62b172413b67"},
+    {file = "matplotlib-3.8.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb44f53af0a62dc80bba4443d9b27f2fde6acfdac281d95bc872dc148a6509cc"},
+    {file = "matplotlib-3.8.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:606e3b90897554c989b1e38a258c626d46c873523de432b1462f295db13de6f9"},
+    {file = "matplotlib-3.8.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9bb0189011785ea794ee827b68777db3ca3f93f3e339ea4d920315a0e5a78d54"},
+    {file = "matplotlib-3.8.4-cp39-cp39-win_amd64.whl", hash = "sha256:6209e5c9aaccc056e63b547a8152661324404dd92340a6e479b3a7f24b42a5d0"},
+    {file = "matplotlib-3.8.4-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:c7064120a59ce6f64103c9cefba8ffe6fba87f2c61d67c401186423c9a20fd35"},
+    {file = "matplotlib-3.8.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a0e47eda4eb2614300fc7bb4657fced3e83d6334d03da2173b09e447418d499f"},
+    {file = "matplotlib-3.8.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:493e9f6aa5819156b58fce42b296ea31969f2aab71c5b680b4ea7a3cb5c07d94"},
+    {file = "matplotlib-3.8.4.tar.gz", hash = "sha256:8aac397d5e9ec158960e31c381c5ffc52ddd52bd9a47717e2a694038167dffea"},
 ]
 
 [package.dependencies]
@@ -1817,7 +2176,7 @@ cycler = ">=0.10"
 fonttools = ">=4.22.0"
 importlib-resources = {version = ">=3.2.0", markers = "python_version < \"3.10\""}
 kiwisolver = ">=1.3.1"
-numpy = ">=1.21,<2"
+numpy = ">=1.21"
 packaging = ">=20.0"
 pillow = ">=8"
 pyparsing = ">=2.3.1"
@@ -2291,14 +2650,13 @@ files = [
 
 [[package]]
 name = "nvidia-nvjitlink-cu12"
-version = "12.4.99"
+version = "12.4.127"
 description = "Nvidia JIT LTO Library"
 optional = true
 python-versions = ">=3"
 files = [
-    {file = "nvidia_nvjitlink_cu12-12.4.99-py3-none-manylinux2014_aarch64.whl", hash = "sha256:75d6498c96d9adb9435f2bbdbddb479805ddfb97b5c1b32395c694185c20ca57"},
-    {file = "nvidia_nvjitlink_cu12-12.4.99-py3-none-manylinux2014_x86_64.whl", hash = "sha256:c6428836d20fe7e327191c175791d38570e10762edc588fb46749217cd444c74"},
-    {file = "nvidia_nvjitlink_cu12-12.4.99-py3-none-win_amd64.whl", hash = "sha256:991905ffa2144cb603d8ca7962d75c35334ae82bf92820b6ba78157277da1ad2"},
+    {file = "nvidia_nvjitlink_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl", hash = "sha256:06b3b9b25bf3f8af351d664978ca26a16d2c5127dbd53c0497e28d1fb9611d57"},
+    {file = "nvidia_nvjitlink_cu12-12.4.127-py3-none-win_amd64.whl", hash = "sha256:fd9020c501d27d135f983c6d3e244b197a7ccad769e34df53a42e276b0e25fa1"},
 ]
 
 [[package]]
@@ -2361,36 +2719,36 @@ reference = ["Pillow", "google-re2"]
 
 [[package]]
 name = "onnxruntime"
-version = "1.17.1"
+version = "1.17.3"
 description = "ONNX Runtime is a runtime accelerator for Machine Learning models"
 optional = true
 python-versions = "*"
 files = [
-    {file = "onnxruntime-1.17.1-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:d43ac17ac4fa3c9096ad3c0e5255bb41fd134560212dc124e7f52c3159af5d21"},
-    {file = "onnxruntime-1.17.1-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:55b5e92a4c76a23981c998078b9bf6145e4fb0b016321a8274b1607bd3c6bd35"},
-    {file = "onnxruntime-1.17.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ebbcd2bc3a066cf54e6f18c75708eb4d309ef42be54606d22e5bdd78afc5b0d7"},
-    {file = "onnxruntime-1.17.1-cp310-cp310-win32.whl", hash = "sha256:5e3716b5eec9092e29a8d17aab55e737480487deabfca7eac3cd3ed952b6ada9"},
-    {file = "onnxruntime-1.17.1-cp310-cp310-win_amd64.whl", hash = "sha256:fbb98cced6782ae1bb799cc74ddcbbeeae8819f3ad1d942a74d88e72b6511337"},
-    {file = "onnxruntime-1.17.1-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:36fd6f87a1ecad87e9c652e42407a50fb305374f9a31d71293eb231caae18784"},
-    {file = "onnxruntime-1.17.1-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:99a8bddeb538edabc524d468edb60ad4722cff8a49d66f4e280c39eace70500b"},
-    {file = "onnxruntime-1.17.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fd7fddb4311deb5a7d3390cd8e9b3912d4d963efbe4dfe075edbaf18d01c024e"},
-    {file = "onnxruntime-1.17.1-cp311-cp311-win32.whl", hash = "sha256:606a7cbfb6680202b0e4f1890881041ffc3ac6e41760a25763bd9fe146f0b335"},
-    {file = "onnxruntime-1.17.1-cp311-cp311-win_amd64.whl", hash = "sha256:53e4e06c0a541696ebdf96085fd9390304b7b04b748a19e02cf3b35c869a1e76"},
-    {file = "onnxruntime-1.17.1-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:40f08e378e0f85929712a2b2c9b9a9cc400a90c8a8ca741d1d92c00abec60843"},
-    {file = "onnxruntime-1.17.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ac79da6d3e1bb4590f1dad4bb3c2979d7228555f92bb39820889af8b8e6bd472"},
-    {file = "onnxruntime-1.17.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ae9ba47dc099004e3781f2d0814ad710a13c868c739ab086fc697524061695ea"},
-    {file = "onnxruntime-1.17.1-cp312-cp312-win32.whl", hash = "sha256:2dff1a24354220ac30e4a4ce2fb1df38cb1ea59f7dac2c116238d63fe7f4c5ff"},
-    {file = "onnxruntime-1.17.1-cp312-cp312-win_amd64.whl", hash = "sha256:6226a5201ab8cafb15e12e72ff2a4fc8f50654e8fa5737c6f0bd57c5ff66827e"},
-    {file = "onnxruntime-1.17.1-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:cd0c07c0d1dfb8629e820b05fda5739e4835b3b82faf43753d2998edf2cf00aa"},
-    {file = "onnxruntime-1.17.1-cp38-cp38-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:617ebdf49184efa1ba6e4467e602fbfa029ed52c92f13ce3c9f417d303006381"},
-    {file = "onnxruntime-1.17.1-cp38-cp38-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9dae9071e3facdf2920769dceee03b71c684b6439021defa45b830d05e148924"},
-    {file = "onnxruntime-1.17.1-cp38-cp38-win32.whl", hash = "sha256:835d38fa1064841679433b1aa8138b5e1218ddf0cfa7a3ae0d056d8fd9cec713"},
-    {file = "onnxruntime-1.17.1-cp38-cp38-win_amd64.whl", hash = "sha256:96621e0c555c2453bf607606d08af3f70fbf6f315230c28ddea91754e17ad4e6"},
-    {file = "onnxruntime-1.17.1-cp39-cp39-macosx_11_0_universal2.whl", hash = "sha256:7a9539935fb2d78ebf2cf2693cad02d9930b0fb23cdd5cf37a7df813e977674d"},
-    {file = "onnxruntime-1.17.1-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:45c6a384e9d9a29c78afff62032a46a993c477b280247a7e335df09372aedbe9"},
-    {file = "onnxruntime-1.17.1-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4e19f966450f16863a1d6182a685ca33ae04d7772a76132303852d05b95411ea"},
-    {file = "onnxruntime-1.17.1-cp39-cp39-win32.whl", hash = "sha256:e2ae712d64a42aac29ed7a40a426cb1e624a08cfe9273dcfe681614aa65b07dc"},
-    {file = "onnxruntime-1.17.1-cp39-cp39-win_amd64.whl", hash = "sha256:f7e9f7fb049825cdddf4a923cfc7c649d84d63c0134315f8e0aa9e0c3004672c"},
+    {file = "onnxruntime-1.17.3-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:d86dde9c0bb435d709e51bd25991c9fe5b9a5b168df45ce119769edc4d198b15"},
+    {file = "onnxruntime-1.17.3-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9d87b68bf931ac527b2d3c094ead66bb4381bac4298b65f46c54fe4d1e255865"},
+    {file = "onnxruntime-1.17.3-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:26e950cf0333cf114a155f9142e71da344d2b08dfe202763a403ae81cc02ebd1"},
+    {file = "onnxruntime-1.17.3-cp310-cp310-win32.whl", hash = "sha256:0962a4d0f5acebf62e1f0bf69b6e0adf16649115d8de854c1460e79972324d68"},
+    {file = "onnxruntime-1.17.3-cp310-cp310-win_amd64.whl", hash = "sha256:468ccb8a0faa25c681a41787b1594bf4448b0252d3efc8b62fd8b2411754340f"},
+    {file = "onnxruntime-1.17.3-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:e8cd90c1c17d13d47b89ab076471e07fb85467c01dcd87a8b8b5cdfbcb40aa51"},
+    {file = "onnxruntime-1.17.3-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a058b39801baefe454eeb8acf3ada298c55a06a4896fafc224c02d79e9037f60"},
+    {file = "onnxruntime-1.17.3-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2f823d5eb4807007f3da7b27ca972263df6a1836e6f327384eb266274c53d05d"},
+    {file = "onnxruntime-1.17.3-cp311-cp311-win32.whl", hash = "sha256:b66b23f9109e78ff2791628627a26f65cd335dcc5fbd67ff60162733a2f7aded"},
+    {file = "onnxruntime-1.17.3-cp311-cp311-win_amd64.whl", hash = "sha256:570760ca53a74cdd751ee49f13de70d1384dcf73d9888b8deac0917023ccda6d"},
+    {file = "onnxruntime-1.17.3-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:77c318178d9c16e9beadd9a4070d8aaa9f57382c3f509b01709f0f010e583b99"},
+    {file = "onnxruntime-1.17.3-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:23da8469049b9759082e22c41a444f44a520a9c874b084711b6343672879f50b"},
+    {file = "onnxruntime-1.17.3-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2949730215af3f9289008b2e31e9bbef952012a77035b911c4977edea06f3f9e"},
+    {file = "onnxruntime-1.17.3-cp312-cp312-win32.whl", hash = "sha256:6c7555a49008f403fb3b19204671efb94187c5085976ae526cb625f6ede317bc"},
+    {file = "onnxruntime-1.17.3-cp312-cp312-win_amd64.whl", hash = "sha256:58672cf20293a1b8a277a5c6c55383359fcdf6119b2f14df6ce3b140f5001c39"},
+    {file = "onnxruntime-1.17.3-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:4395ba86e3c1e93c794a00619ef1aec597ab78f5a5039f3c6d2e9d0695c0a734"},
+    {file = "onnxruntime-1.17.3-cp38-cp38-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bdf354c04344ec38564fc22394e1fe08aa6d70d790df00159205a0055c4a4d3f"},
+    {file = "onnxruntime-1.17.3-cp38-cp38-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a94b600b7af50e922d44b95a57981e3e35103c6e3693241a03d3ca204740bbda"},
+    {file = "onnxruntime-1.17.3-cp38-cp38-win32.whl", hash = "sha256:5a335c76f9c002a8586c7f38bc20fe4b3725ced21f8ead835c3e4e507e42b2ab"},
+    {file = "onnxruntime-1.17.3-cp38-cp38-win_amd64.whl", hash = "sha256:8f56a86fbd0ddc8f22696ddeda0677b041381f4168a2ca06f712ef6ec6050d6d"},
+    {file = "onnxruntime-1.17.3-cp39-cp39-macosx_11_0_universal2.whl", hash = "sha256:e0ae39f5452278cd349520c296e7de3e90d62dc5b0157c6868e2748d7f28b871"},
+    {file = "onnxruntime-1.17.3-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3ff2dc012bd930578aff5232afd2905bf16620815f36783a941aafabf94b3702"},
+    {file = "onnxruntime-1.17.3-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cf6c37483782e4785019b56e26224a25e9b9a35b849d0169ce69189867a22bb1"},
+    {file = "onnxruntime-1.17.3-cp39-cp39-win32.whl", hash = "sha256:351bf5a1140dcc43bfb8d3d1a230928ee61fcd54b0ea664c8e9a889a8e3aa515"},
+    {file = "onnxruntime-1.17.3-cp39-cp39-win_amd64.whl", hash = "sha256:57a3de15778da8d6cc43fbf6cf038e1e746146300b5f0b1fbf01f6f795dc6440"},
 ]
 
 [package.dependencies]
@@ -2403,13 +2761,13 @@ sympy = "*"
 
 [[package]]
 name = "openai"
-version = "1.16.0"
+version = "1.17.1"
 description = "The official Python library for the openai API"
 optional = false
 python-versions = ">=3.7.1"
 files = [
-    {file = "openai-1.16.0-py3-none-any.whl", hash = "sha256:c715c9872515369621ab16d31af917540b69af7d5df2d01b4c81f809cc17e91d"},
-    {file = "openai-1.16.0.tar.gz", hash = "sha256:2d1f2b106f0efc35ac9590dd7e4d1fcc10c616bfdd7eae17829c07f9ea212517"},
+    {file = "openai-1.17.1-py3-none-any.whl", hash = "sha256:d42e0d7a692c7b78cbae21598df5ded396abecf6c285325635ec62621e6c82f1"},
+    {file = "openai-1.17.1.tar.gz", hash = "sha256:c5a909e70e2b4cd04ef4076b68497c4eb894704cf8ab23d32d6552931fda6e5b"},
 ]
 
 [package.dependencies]
@@ -2497,18 +2855,18 @@ files = [
 
 [[package]]
 name = "parso"
-version = "0.8.3"
+version = "0.8.4"
 description = "A Python Parser"
 optional = false
 python-versions = ">=3.6"
 files = [
-    {file = "parso-0.8.3-py2.py3-none-any.whl", hash = "sha256:c001d4636cd3aecdaf33cbb40aebb59b094be2a74c556778ef5576c175e19e75"},
-    {file = "parso-0.8.3.tar.gz", hash = "sha256:8c07be290bb59f03588915921e29e8a50002acaf2cdc5fa0e0114f91709fafa0"},
+    {file = "parso-0.8.4-py2.py3-none-any.whl", hash = "sha256:a418670a20291dacd2dddc80c377c5c3791378ee1e8d12bffc35420643d43f18"},
+    {file = "parso-0.8.4.tar.gz", hash = "sha256:eb3a7b58240fb99099a345571deecc0f9540ea5f4dd2fe14c2a99d6b281ab92d"},
 ]
 
 [package.extras]
-qa = ["flake8 (==3.8.3)", "mypy (==0.782)"]
-testing = ["docopt", "pytest (<6.0.0)"]
+qa = ["flake8 (==5.0.4)", "mypy (==0.971)", "types-setuptools (==67.2.0.1)"]
+testing = ["docopt", "pytest"]
 
 [[package]]
 name = "pathspec"
@@ -2735,6 +3093,23 @@ files = [
 [package.dependencies]
 wcwidth = "*"
 
+[[package]]
+name = "proto-plus"
+version = "1.23.0"
+description = "Beautiful, Pythonic protocol buffers."
+optional = true
+python-versions = ">=3.6"
+files = [
+    {file = "proto-plus-1.23.0.tar.gz", hash = "sha256:89075171ef11988b3fa157f5dbd8b9cf09d65fffee97e29ce403cd8defba19d2"},
+    {file = "proto_plus-1.23.0-py3-none-any.whl", hash = "sha256:a829c79e619e1cf632de091013a4173deed13a55f326ef84f05af6f50ff4c82c"},
+]
+
+[package.dependencies]
+protobuf = ">=3.19.0,<5.0.0dev"
+
+[package.extras]
+testing = ["google-api-core[grpc] (>=1.31.5)"]
+
 [[package]]
 name = "protobuf"
 version = "4.25.3"
@@ -2808,6 +3183,31 @@ files = [
 [package.extras]
 tests = ["pytest"]
 
+[[package]]
+name = "pyasn1"
+version = "0.6.0"
+description = "Pure-Python implementation of ASN.1 types and DER/BER/CER codecs (X.208)"
+optional = true
+python-versions = ">=3.8"
+files = [
+    {file = "pyasn1-0.6.0-py2.py3-none-any.whl", hash = "sha256:cca4bb0f2df5504f02f6f8a775b6e416ff9b0b3b16f7ee80b5a3153d9b804473"},
+    {file = "pyasn1-0.6.0.tar.gz", hash = "sha256:3a35ab2c4b5ef98e17dfdec8ab074046fbda76e281c5a706ccd82328cfc8f64c"},
+]
+
+[[package]]
+name = "pyasn1-modules"
+version = "0.4.0"
+description = "A collection of ASN.1-based protocols modules"
+optional = true
+python-versions = ">=3.8"
+files = [
+    {file = "pyasn1_modules-0.4.0-py3-none-any.whl", hash = "sha256:be04f15b66c206eed667e0bb5ab27e2b1855ea54a842e5037738099e8ca4ae0b"},
+    {file = "pyasn1_modules-0.4.0.tar.gz", hash = "sha256:831dbcea1b177b28c9baddf4c6d1013c24c3accd14a1873fffaa6a2e905f17b6"},
+]
+
+[package.dependencies]
+pyasn1 = ">=0.4.6,<0.7.0"
+
 [[package]]
 name = "pycparser"
 version = "2.22"
@@ -2821,18 +3221,18 @@ files = [
 
 [[package]]
 name = "pydantic"
-version = "2.6.4"
+version = "2.7.0"
 description = "Data validation using Python type hints"
 optional = false
 python-versions = ">=3.8"
 files = [
-    {file = "pydantic-2.6.4-py3-none-any.whl", hash = "sha256:cc46fce86607580867bdc3361ad462bab9c222ef042d3da86f2fb333e1d916c5"},
-    {file = "pydantic-2.6.4.tar.gz", hash = "sha256:b1704e0847db01817624a6b86766967f552dd9dbf3afba4004409f908dcc84e6"},
+    {file = "pydantic-2.7.0-py3-none-any.whl", hash = "sha256:9dee74a271705f14f9a1567671d144a851c675b072736f0a7b2608fd9e495352"},
+    {file = "pydantic-2.7.0.tar.gz", hash = "sha256:b5ecdd42262ca2462e2624793551e80911a1e989f462910bb81aef974b4bb383"},
 ]
 
 [package.dependencies]
 annotated-types = ">=0.4.0"
-pydantic-core = "2.16.3"
+pydantic-core = "2.18.1"
 typing-extensions = ">=4.6.1"
 
 [package.extras]
@@ -2840,90 +3240,90 @@ email = ["email-validator (>=2.0.0)"]
 
 [[package]]
 name = "pydantic-core"
-version = "2.16.3"
-description = ""
+version = "2.18.1"
+description = "Core functionality for Pydantic validation and serialization"
 optional = false
 python-versions = ">=3.8"
 files = [
-    {file = "pydantic_core-2.16.3-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:75b81e678d1c1ede0785c7f46690621e4c6e63ccd9192af1f0bd9d504bbb6bf4"},
-    {file = "pydantic_core-2.16.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9c865a7ee6f93783bd5d781af5a4c43dadc37053a5b42f7d18dc019f8c9d2bd1"},
-    {file = "pydantic_core-2.16.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:162e498303d2b1c036b957a1278fa0899d02b2842f1ff901b6395104c5554a45"},
-    {file = "pydantic_core-2.16.3-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2f583bd01bbfbff4eaee0868e6fc607efdfcc2b03c1c766b06a707abbc856187"},
-    {file = "pydantic_core-2.16.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b926dd38db1519ed3043a4de50214e0d600d404099c3392f098a7f9d75029ff8"},
-    {file = "pydantic_core-2.16.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:716b542728d4c742353448765aa7cdaa519a7b82f9564130e2b3f6766018c9ec"},
-    {file = "pydantic_core-2.16.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc4ad7f7ee1a13d9cb49d8198cd7d7e3aa93e425f371a68235f784e99741561f"},
-    {file = "pydantic_core-2.16.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:bd87f48924f360e5d1c5f770d6155ce0e7d83f7b4e10c2f9ec001c73cf475c99"},
-    {file = "pydantic_core-2.16.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:0df446663464884297c793874573549229f9eca73b59360878f382a0fc085979"},
-    {file = "pydantic_core-2.16.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4df8a199d9f6afc5ae9a65f8f95ee52cae389a8c6b20163762bde0426275b7db"},
-    {file = "pydantic_core-2.16.3-cp310-none-win32.whl", hash = "sha256:456855f57b413f077dff513a5a28ed838dbbb15082ba00f80750377eed23d132"},
-    {file = "pydantic_core-2.16.3-cp310-none-win_amd64.whl", hash = "sha256:732da3243e1b8d3eab8c6ae23ae6a58548849d2e4a4e03a1924c8ddf71a387cb"},
-    {file = "pydantic_core-2.16.3-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:519ae0312616026bf4cedc0fe459e982734f3ca82ee8c7246c19b650b60a5ee4"},
-    {file = "pydantic_core-2.16.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b3992a322a5617ded0a9f23fd06dbc1e4bd7cf39bc4ccf344b10f80af58beacd"},
-    {file = "pydantic_core-2.16.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8d62da299c6ecb04df729e4b5c52dc0d53f4f8430b4492b93aa8de1f541c4aac"},
-    {file = "pydantic_core-2.16.3-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2acca2be4bb2f2147ada8cac612f8a98fc09f41c89f87add7256ad27332c2fda"},
-    {file = "pydantic_core-2.16.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1b662180108c55dfbf1280d865b2d116633d436cfc0bba82323554873967b340"},
-    {file = "pydantic_core-2.16.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e7c6ed0dc9d8e65f24f5824291550139fe6f37fac03788d4580da0d33bc00c97"},
-    {file = "pydantic_core-2.16.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a6b1bb0827f56654b4437955555dc3aeeebeddc47c2d7ed575477f082622c49e"},
-    {file = "pydantic_core-2.16.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e56f8186d6210ac7ece503193ec84104da7ceb98f68ce18c07282fcc2452e76f"},
-    {file = "pydantic_core-2.16.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:936e5db01dd49476fa8f4383c259b8b1303d5dd5fb34c97de194560698cc2c5e"},
-    {file = "pydantic_core-2.16.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:33809aebac276089b78db106ee692bdc9044710e26f24a9a2eaa35a0f9fa70ba"},
-    {file = "pydantic_core-2.16.3-cp311-none-win32.whl", hash = "sha256:ded1c35f15c9dea16ead9bffcde9bb5c7c031bff076355dc58dcb1cb436c4721"},
-    {file = "pydantic_core-2.16.3-cp311-none-win_amd64.whl", hash = "sha256:d89ca19cdd0dd5f31606a9329e309d4fcbb3df860960acec32630297d61820df"},
-    {file = "pydantic_core-2.16.3-cp311-none-win_arm64.whl", hash = "sha256:6162f8d2dc27ba21027f261e4fa26f8bcb3cf9784b7f9499466a311ac284b5b9"},
-    {file = "pydantic_core-2.16.3-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:0f56ae86b60ea987ae8bcd6654a887238fd53d1384f9b222ac457070b7ac4cff"},
-    {file = "pydantic_core-2.16.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c9bd22a2a639e26171068f8ebb5400ce2c1bc7d17959f60a3b753ae13c632975"},
-    {file = "pydantic_core-2.16.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4204e773b4b408062960e65468d5346bdfe139247ee5f1ca2a378983e11388a2"},
-    {file = "pydantic_core-2.16.3-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f651dd19363c632f4abe3480a7c87a9773be27cfe1341aef06e8759599454120"},
-    {file = "pydantic_core-2.16.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aaf09e615a0bf98d406657e0008e4a8701b11481840be7d31755dc9f97c44053"},
-    {file = "pydantic_core-2.16.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8e47755d8152c1ab5b55928ab422a76e2e7b22b5ed8e90a7d584268dd49e9c6b"},
-    {file = "pydantic_core-2.16.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:500960cb3a0543a724a81ba859da816e8cf01b0e6aaeedf2c3775d12ee49cade"},
-    {file = "pydantic_core-2.16.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:cf6204fe865da605285c34cf1172879d0314ff267b1c35ff59de7154f35fdc2e"},
-    {file = "pydantic_core-2.16.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d33dd21f572545649f90c38c227cc8631268ba25c460b5569abebdd0ec5974ca"},
-    {file = "pydantic_core-2.16.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:49d5d58abd4b83fb8ce763be7794d09b2f50f10aa65c0f0c1696c677edeb7cbf"},
-    {file = "pydantic_core-2.16.3-cp312-none-win32.whl", hash = "sha256:f53aace168a2a10582e570b7736cc5bef12cae9cf21775e3eafac597e8551fbe"},
-    {file = "pydantic_core-2.16.3-cp312-none-win_amd64.whl", hash = "sha256:0d32576b1de5a30d9a97f300cc6a3f4694c428d956adbc7e6e2f9cad279e45ed"},
-    {file = "pydantic_core-2.16.3-cp312-none-win_arm64.whl", hash = "sha256:ec08be75bb268473677edb83ba71e7e74b43c008e4a7b1907c6d57e940bf34b6"},
-    {file = "pydantic_core-2.16.3-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:b1f6f5938d63c6139860f044e2538baeee6f0b251a1816e7adb6cbce106a1f01"},
-    {file = "pydantic_core-2.16.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2a1ef6a36fdbf71538142ed604ad19b82f67b05749512e47f247a6ddd06afdc7"},
-    {file = "pydantic_core-2.16.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:704d35ecc7e9c31d48926150afada60401c55efa3b46cd1ded5a01bdffaf1d48"},
-    {file = "pydantic_core-2.16.3-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d937653a696465677ed583124b94a4b2d79f5e30b2c46115a68e482c6a591c8a"},
-    {file = "pydantic_core-2.16.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c9803edf8e29bd825f43481f19c37f50d2b01899448273b3a7758441b512acf8"},
-    {file = "pydantic_core-2.16.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:72282ad4892a9fb2da25defeac8c2e84352c108705c972db82ab121d15f14e6d"},
-    {file = "pydantic_core-2.16.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f752826b5b8361193df55afcdf8ca6a57d0232653494ba473630a83ba50d8c9"},
-    {file = "pydantic_core-2.16.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4384a8f68ddb31a0b0c3deae88765f5868a1b9148939c3f4121233314ad5532c"},
-    {file = "pydantic_core-2.16.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:a4b2bf78342c40b3dc830880106f54328928ff03e357935ad26c7128bbd66ce8"},
-    {file = "pydantic_core-2.16.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:13dcc4802961b5f843a9385fc821a0b0135e8c07fc3d9949fd49627c1a5e6ae5"},
-    {file = "pydantic_core-2.16.3-cp38-none-win32.whl", hash = "sha256:e3e70c94a0c3841e6aa831edab1619ad5c511199be94d0c11ba75fe06efe107a"},
-    {file = "pydantic_core-2.16.3-cp38-none-win_amd64.whl", hash = "sha256:ecdf6bf5f578615f2e985a5e1f6572e23aa632c4bd1dc67f8f406d445ac115ed"},
-    {file = "pydantic_core-2.16.3-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:bda1ee3e08252b8d41fa5537413ffdddd58fa73107171a126d3b9ff001b9b820"},
-    {file = "pydantic_core-2.16.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:21b888c973e4f26b7a96491c0965a8a312e13be108022ee510248fe379a5fa23"},
-    {file = "pydantic_core-2.16.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:be0ec334369316fa73448cc8c982c01e5d2a81c95969d58b8f6e272884df0074"},
-    {file = "pydantic_core-2.16.3-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b5b6079cc452a7c53dd378c6f881ac528246b3ac9aae0f8eef98498a75657805"},
-    {file = "pydantic_core-2.16.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7ee8d5f878dccb6d499ba4d30d757111847b6849ae07acdd1205fffa1fc1253c"},
-    {file = "pydantic_core-2.16.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7233d65d9d651242a68801159763d09e9ec96e8a158dbf118dc090cd77a104c9"},
-    {file = "pydantic_core-2.16.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c6119dc90483a5cb50a1306adb8d52c66e447da88ea44f323e0ae1a5fcb14256"},
-    {file = "pydantic_core-2.16.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:578114bc803a4c1ff9946d977c221e4376620a46cf78da267d946397dc9514a8"},
-    {file = "pydantic_core-2.16.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d8f99b147ff3fcf6b3cc60cb0c39ea443884d5559a30b1481e92495f2310ff2b"},
-    {file = "pydantic_core-2.16.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:4ac6b4ce1e7283d715c4b729d8f9dab9627586dafce81d9eaa009dd7f25dd972"},
-    {file = "pydantic_core-2.16.3-cp39-none-win32.whl", hash = "sha256:e7774b570e61cb998490c5235740d475413a1f6de823169b4cf94e2fe9e9f6b2"},
-    {file = "pydantic_core-2.16.3-cp39-none-win_amd64.whl", hash = "sha256:9091632a25b8b87b9a605ec0e61f241c456e9248bfdcf7abdf344fdb169c81cf"},
-    {file = "pydantic_core-2.16.3-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:36fa178aacbc277bc6b62a2c3da95226520da4f4e9e206fdf076484363895d2c"},
-    {file = "pydantic_core-2.16.3-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:dcca5d2bf65c6fb591fff92da03f94cd4f315972f97c21975398bd4bd046854a"},
-    {file = "pydantic_core-2.16.3-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2a72fb9963cba4cd5793854fd12f4cfee731e86df140f59ff52a49b3552db241"},
-    {file = "pydantic_core-2.16.3-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b60cc1a081f80a2105a59385b92d82278b15d80ebb3adb200542ae165cd7d183"},
-    {file = "pydantic_core-2.16.3-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:cbcc558401de90a746d02ef330c528f2e668c83350f045833543cd57ecead1ad"},
-    {file = "pydantic_core-2.16.3-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:fee427241c2d9fb7192b658190f9f5fd6dfe41e02f3c1489d2ec1e6a5ab1e04a"},
-    {file = "pydantic_core-2.16.3-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:f4cb85f693044e0f71f394ff76c98ddc1bc0953e48c061725e540396d5c8a2e1"},
-    {file = "pydantic_core-2.16.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:b29eeb887aa931c2fcef5aa515d9d176d25006794610c264ddc114c053bf96fe"},
-    {file = "pydantic_core-2.16.3-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:a425479ee40ff021f8216c9d07a6a3b54b31c8267c6e17aa88b70d7ebd0e5e5b"},
-    {file = "pydantic_core-2.16.3-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:5c5cbc703168d1b7a838668998308018a2718c2130595e8e190220238addc96f"},
-    {file = "pydantic_core-2.16.3-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:99b6add4c0b39a513d323d3b93bc173dac663c27b99860dd5bf491b240d26137"},
-    {file = "pydantic_core-2.16.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75f76ee558751746d6a38f89d60b6228fa174e5172d143886af0f85aa306fd89"},
-    {file = "pydantic_core-2.16.3-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:00ee1c97b5364b84cb0bd82e9bbf645d5e2871fb8c58059d158412fee2d33d8a"},
-    {file = "pydantic_core-2.16.3-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:287073c66748f624be4cef893ef9174e3eb88fe0b8a78dc22e88eca4bc357ca6"},
-    {file = "pydantic_core-2.16.3-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:ed25e1835c00a332cb10c683cd39da96a719ab1dfc08427d476bce41b92531fc"},
-    {file = "pydantic_core-2.16.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:86b3d0033580bd6bbe07590152007275bd7af95f98eaa5bd36f3da219dcd93da"},
-    {file = "pydantic_core-2.16.3.tar.gz", hash = "sha256:1cac689f80a3abab2d3c0048b29eea5751114054f032a941a32de4c852c59cad"},
+    {file = "pydantic_core-2.18.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:ee9cf33e7fe14243f5ca6977658eb7d1042caaa66847daacbd2117adb258b226"},
+    {file = "pydantic_core-2.18.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6b7bbb97d82659ac8b37450c60ff2e9f97e4eb0f8a8a3645a5568b9334b08b50"},
+    {file = "pydantic_core-2.18.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:df4249b579e75094f7e9bb4bd28231acf55e308bf686b952f43100a5a0be394c"},
+    {file = "pydantic_core-2.18.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d0491006a6ad20507aec2be72e7831a42efc93193d2402018007ff827dc62926"},
+    {file = "pydantic_core-2.18.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2ae80f72bb7a3e397ab37b53a2b49c62cc5496412e71bc4f1277620a7ce3f52b"},
+    {file = "pydantic_core-2.18.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:58aca931bef83217fca7a390e0486ae327c4af9c3e941adb75f8772f8eeb03a1"},
+    {file = "pydantic_core-2.18.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1be91ad664fc9245404a789d60cba1e91c26b1454ba136d2a1bf0c2ac0c0505a"},
+    {file = "pydantic_core-2.18.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:667880321e916a8920ef49f5d50e7983792cf59f3b6079f3c9dac2b88a311d17"},
+    {file = "pydantic_core-2.18.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:f7054fdc556f5421f01e39cbb767d5ec5c1139ea98c3e5b350e02e62201740c7"},
+    {file = "pydantic_core-2.18.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:030e4f9516f9947f38179249778709a460a3adb516bf39b5eb9066fcfe43d0e6"},
+    {file = "pydantic_core-2.18.1-cp310-none-win32.whl", hash = "sha256:2e91711e36e229978d92642bfc3546333a9127ecebb3f2761372e096395fc649"},
+    {file = "pydantic_core-2.18.1-cp310-none-win_amd64.whl", hash = "sha256:9a29726f91c6cb390b3c2338f0df5cd3e216ad7a938762d11c994bb37552edb0"},
+    {file = "pydantic_core-2.18.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:9ece8a49696669d483d206b4474c367852c44815fca23ac4e48b72b339807f80"},
+    {file = "pydantic_core-2.18.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7a5d83efc109ceddb99abd2c1316298ced2adb4570410defe766851a804fcd5b"},
+    {file = "pydantic_core-2.18.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5f7973c381283783cd1043a8c8f61ea5ce7a3a58b0369f0ee0ee975eaf2f2a1b"},
+    {file = "pydantic_core-2.18.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:54c7375c62190a7845091f521add19b0f026bcf6ae674bdb89f296972272e86d"},
+    {file = "pydantic_core-2.18.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dd63cec4e26e790b70544ae5cc48d11b515b09e05fdd5eff12e3195f54b8a586"},
+    {file = "pydantic_core-2.18.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:561cf62c8a3498406495cfc49eee086ed2bb186d08bcc65812b75fda42c38294"},
+    {file = "pydantic_core-2.18.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:68717c38a68e37af87c4da20e08f3e27d7e4212e99e96c3d875fbf3f4812abfc"},
+    {file = "pydantic_core-2.18.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2d5728e93d28a3c63ee513d9ffbac9c5989de8c76e049dbcb5bfe4b923a9739d"},
+    {file = "pydantic_core-2.18.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f0f17814c505f07806e22b28856c59ac80cee7dd0fbb152aed273e116378f519"},
+    {file = "pydantic_core-2.18.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d816f44a51ba5175394bc6c7879ca0bd2be560b2c9e9f3411ef3a4cbe644c2e9"},
+    {file = "pydantic_core-2.18.1-cp311-none-win32.whl", hash = "sha256:09f03dfc0ef8c22622eaa8608caa4a1e189cfb83ce847045eca34f690895eccb"},
+    {file = "pydantic_core-2.18.1-cp311-none-win_amd64.whl", hash = "sha256:27f1009dc292f3b7ca77feb3571c537276b9aad5dd4efb471ac88a8bd09024e9"},
+    {file = "pydantic_core-2.18.1-cp311-none-win_arm64.whl", hash = "sha256:48dd883db92e92519201f2b01cafa881e5f7125666141a49ffba8b9facc072b0"},
+    {file = "pydantic_core-2.18.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:b6b0e4912030c6f28bcb72b9ebe4989d6dc2eebcd2a9cdc35fefc38052dd4fe8"},
+    {file = "pydantic_core-2.18.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f3202a429fe825b699c57892d4371c74cc3456d8d71b7f35d6028c96dfecad31"},
+    {file = "pydantic_core-2.18.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a3982b0a32d0a88b3907e4b0dc36809fda477f0757c59a505d4e9b455f384b8b"},
+    {file = "pydantic_core-2.18.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:25595ac311f20e5324d1941909b0d12933f1fd2171075fcff763e90f43e92a0d"},
+    {file = "pydantic_core-2.18.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:14fe73881cf8e4cbdaded8ca0aa671635b597e42447fec7060d0868b52d074e6"},
+    {file = "pydantic_core-2.18.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ca976884ce34070799e4dfc6fbd68cb1d181db1eefe4a3a94798ddfb34b8867f"},
+    {file = "pydantic_core-2.18.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:684d840d2c9ec5de9cb397fcb3f36d5ebb6fa0d94734f9886032dd796c1ead06"},
+    {file = "pydantic_core-2.18.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:54764c083bbe0264f0f746cefcded6cb08fbbaaf1ad1d78fb8a4c30cff999a90"},
+    {file = "pydantic_core-2.18.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:201713f2f462e5c015b343e86e68bd8a530a4f76609b33d8f0ec65d2b921712a"},
+    {file = "pydantic_core-2.18.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:fd1a9edb9dd9d79fbeac1ea1f9a8dd527a6113b18d2e9bcc0d541d308dae639b"},
+    {file = "pydantic_core-2.18.1-cp312-none-win32.whl", hash = "sha256:d5e6b7155b8197b329dc787356cfd2684c9d6a6b1a197f6bbf45f5555a98d411"},
+    {file = "pydantic_core-2.18.1-cp312-none-win_amd64.whl", hash = "sha256:9376d83d686ec62e8b19c0ac3bf8d28d8a5981d0df290196fb6ef24d8a26f0d6"},
+    {file = "pydantic_core-2.18.1-cp312-none-win_arm64.whl", hash = "sha256:c562b49c96906b4029b5685075fe1ebd3b5cc2601dfa0b9e16c2c09d6cbce048"},
+    {file = "pydantic_core-2.18.1-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:3e352f0191d99fe617371096845070dee295444979efb8f27ad941227de6ad09"},
+    {file = "pydantic_core-2.18.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:c0295d52b012cbe0d3059b1dba99159c3be55e632aae1999ab74ae2bd86a33d7"},
+    {file = "pydantic_core-2.18.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:56823a92075780582d1ffd4489a2e61d56fd3ebb4b40b713d63f96dd92d28144"},
+    {file = "pydantic_core-2.18.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:dd3f79e17b56741b5177bcc36307750d50ea0698df6aa82f69c7db32d968c1c2"},
+    {file = "pydantic_core-2.18.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:38a5024de321d672a132b1834a66eeb7931959c59964b777e8f32dbe9523f6b1"},
+    {file = "pydantic_core-2.18.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d2ce426ee691319d4767748c8e0895cfc56593d725594e415f274059bcf3cb76"},
+    {file = "pydantic_core-2.18.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2adaeea59849ec0939af5c5d476935f2bab4b7f0335b0110f0f069a41024278e"},
+    {file = "pydantic_core-2.18.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9b6431559676a1079eac0f52d6d0721fb8e3c5ba43c37bc537c8c83724031feb"},
+    {file = "pydantic_core-2.18.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:85233abb44bc18d16e72dc05bf13848a36f363f83757541f1a97db2f8d58cfd9"},
+    {file = "pydantic_core-2.18.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:641a018af4fe48be57a2b3d7a1f0f5dbca07c1d00951d3d7463f0ac9dac66622"},
+    {file = "pydantic_core-2.18.1-cp38-none-win32.whl", hash = "sha256:63d7523cd95d2fde0d28dc42968ac731b5bb1e516cc56b93a50ab293f4daeaad"},
+    {file = "pydantic_core-2.18.1-cp38-none-win_amd64.whl", hash = "sha256:907a4d7720abfcb1c81619863efd47c8a85d26a257a2dbebdb87c3b847df0278"},
+    {file = "pydantic_core-2.18.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:aad17e462f42ddbef5984d70c40bfc4146c322a2da79715932cd8976317054de"},
+    {file = "pydantic_core-2.18.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:94b9769ba435b598b547c762184bcfc4783d0d4c7771b04a3b45775c3589ca44"},
+    {file = "pydantic_core-2.18.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:80e0e57cc704a52fb1b48f16d5b2c8818da087dbee6f98d9bf19546930dc64b5"},
+    {file = "pydantic_core-2.18.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:76b86e24039c35280ceee6dce7e62945eb93a5175d43689ba98360ab31eebc4a"},
+    {file = "pydantic_core-2.18.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:12a05db5013ec0ca4a32cc6433f53faa2a014ec364031408540ba858c2172bb0"},
+    {file = "pydantic_core-2.18.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:250ae39445cb5475e483a36b1061af1bc233de3e9ad0f4f76a71b66231b07f88"},
+    {file = "pydantic_core-2.18.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a32204489259786a923e02990249c65b0f17235073149d0033efcebe80095570"},
+    {file = "pydantic_core-2.18.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6395a4435fa26519fd96fdccb77e9d00ddae9dd6c742309bd0b5610609ad7fb2"},
+    {file = "pydantic_core-2.18.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:2533ad2883f001efa72f3d0e733fb846710c3af6dcdd544fe5bf14fa5fe2d7db"},
+    {file = "pydantic_core-2.18.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b560b72ed4816aee52783c66854d96157fd8175631f01ef58e894cc57c84f0f6"},
+    {file = "pydantic_core-2.18.1-cp39-none-win32.whl", hash = "sha256:582cf2cead97c9e382a7f4d3b744cf0ef1a6e815e44d3aa81af3ad98762f5a9b"},
+    {file = "pydantic_core-2.18.1-cp39-none-win_amd64.whl", hash = "sha256:ca71d501629d1fa50ea7fa3b08ba884fe10cefc559f5c6c8dfe9036c16e8ae89"},
+    {file = "pydantic_core-2.18.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:e178e5b66a06ec5bf51668ec0d4ac8cfb2bdcb553b2c207d58148340efd00143"},
+    {file = "pydantic_core-2.18.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:72722ce529a76a4637a60be18bd789d8fb871e84472490ed7ddff62d5fed620d"},
+    {file = "pydantic_core-2.18.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2fe0c1ce5b129455e43f941f7a46f61f3d3861e571f2905d55cdbb8b5c6f5e2c"},
+    {file = "pydantic_core-2.18.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d4284c621f06a72ce2cb55f74ea3150113d926a6eb78ab38340c08f770eb9b4d"},
+    {file = "pydantic_core-2.18.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1a0c3e718f4e064efde68092d9d974e39572c14e56726ecfaeebbe6544521f47"},
+    {file = "pydantic_core-2.18.1-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:2027493cc44c23b598cfaf200936110433d9caa84e2c6cf487a83999638a96ac"},
+    {file = "pydantic_core-2.18.1-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:76909849d1a6bffa5a07742294f3fa1d357dc917cb1fe7b470afbc3a7579d539"},
+    {file = "pydantic_core-2.18.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:ee7ccc7fb7e921d767f853b47814c3048c7de536663e82fbc37f5eb0d532224b"},
+    {file = "pydantic_core-2.18.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:ee2794111c188548a4547eccc73a6a8527fe2af6cf25e1a4ebda2fd01cdd2e60"},
+    {file = "pydantic_core-2.18.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:a139fe9f298dc097349fb4f28c8b81cc7a202dbfba66af0e14be5cfca4ef7ce5"},
+    {file = "pydantic_core-2.18.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d074b07a10c391fc5bbdcb37b2f16f20fcd9e51e10d01652ab298c0d07908ee2"},
+    {file = "pydantic_core-2.18.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c69567ddbac186e8c0aadc1f324a60a564cfe25e43ef2ce81bcc4b8c3abffbae"},
+    {file = "pydantic_core-2.18.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:baf1c7b78cddb5af00971ad5294a4583188bda1495b13760d9f03c9483bb6203"},
+    {file = "pydantic_core-2.18.1-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:2684a94fdfd1b146ff10689c6e4e815f6a01141781c493b97342cdc5b06f4d5d"},
+    {file = "pydantic_core-2.18.1-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:73c1bc8a86a5c9e8721a088df234265317692d0b5cd9e86e975ce3bc3db62a59"},
+    {file = "pydantic_core-2.18.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:e60defc3c15defb70bb38dd605ff7e0fae5f6c9c7cbfe0ad7868582cb7e844a6"},
+    {file = "pydantic_core-2.18.1.tar.gz", hash = "sha256:de9d3e8717560eb05e28739d1b35e4eac2e458553a52a301e51352a7ffc86a35"},
 ]
 
 [package.dependencies]
@@ -3108,7 +3508,6 @@ files = [
     {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"},
     {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"},
     {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"},
-    {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a08c6f0fe150303c1c6b71ebcd7213c2858041a7e01975da3a99aed1e7a378ef"},
     {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"},
     {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"},
     {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"},
@@ -3397,6 +3796,37 @@ urllib3 = ">=1.21.1,<3"
 socks = ["PySocks (>=1.5.6,!=1.5.7)"]
 use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"]
 
+[[package]]
+name = "requests-mock"
+version = "1.12.1"
+description = "Mock out responses from the requests package"
+optional = false
+python-versions = ">=3.5"
+files = [
+    {file = "requests-mock-1.12.1.tar.gz", hash = "sha256:e9e12e333b525156e82a3c852f22016b9158220d2f47454de9cae8a77d371401"},
+    {file = "requests_mock-1.12.1-py2.py3-none-any.whl", hash = "sha256:b1e37054004cdd5e56c84454cc7df12b25f90f382159087f4b6915aaeef39563"},
+]
+
+[package.dependencies]
+requests = ">=2.22,<3"
+
+[package.extras]
+fixture = ["fixtures"]
+
+[[package]]
+name = "rsa"
+version = "4.9"
+description = "Pure-Python RSA implementation"
+optional = true
+python-versions = ">=3.6,<4"
+files = [
+    {file = "rsa-4.9-py3-none-any.whl", hash = "sha256:90260d9058e514786967344d0ef75fa8727eed8a7d2e43ce9f4bcf1b536174f7"},
+    {file = "rsa-4.9.tar.gz", hash = "sha256:e38464a49c6c85d7f1351b0126661487a7e0a14a50f1675ec50eb34d4f20ef21"},
+]
+
+[package.dependencies]
+pyasn1 = ">=0.1.3"
+
 [[package]]
 name = "ruff"
 version = "0.1.15"
@@ -3557,20 +3987,77 @@ torch = ["safetensors[numpy]", "torch (>=1.10)"]
 
 [[package]]
 name = "setuptools"
-version = "69.2.0"
+version = "69.5.1"
 description = "Easily download, build, install, upgrade, and uninstall Python packages"
 optional = true
 python-versions = ">=3.8"
 files = [
-    {file = "setuptools-69.2.0-py3-none-any.whl", hash = "sha256:c21c49fb1042386df081cb5d86759792ab89efca84cf114889191cd09aacc80c"},
-    {file = "setuptools-69.2.0.tar.gz", hash = "sha256:0ff4183f8f42cd8fa3acea16c45205521a4ef28f73c6391d8a25e92893134f2e"},
+    {file = "setuptools-69.5.1-py3-none-any.whl", hash = "sha256:c636ac361bc47580504644275c9ad802c50415c7522212252c033bd15f301f32"},
+    {file = "setuptools-69.5.1.tar.gz", hash = "sha256:6c1fccdac05a97e598fb0ae3bbed5904ccb317337a51139dcd51453611bbb987"},
 ]
 
 [package.extras]
-docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"]
-testing = ["build[virtualenv]", "filelock (>=3.4.0)", "importlib-metadata", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "mypy (==1.9)", "packaging (>=23.2)", "pip (>=19.1)", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-home (>=0.5)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff (>=0.2.1)", "pytest-timeout", "pytest-xdist (>=3)", "tomli", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"]
+docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"]
+testing = ["build[virtualenv]", "filelock (>=3.4.0)", "importlib-metadata", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "mypy (==1.9)", "packaging (>=23.2)", "pip (>=19.1)", "pytest (>=6,!=8.1.1)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-home (>=0.5)", "pytest-mypy", "pytest-perf", "pytest-ruff (>=0.2.1)", "pytest-timeout", "pytest-xdist (>=3)", "tomli", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"]
 testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.2)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"]
 
+[[package]]
+name = "shapely"
+version = "2.0.3"
+description = "Manipulation and analysis of geometric objects"
+optional = true
+python-versions = ">=3.7"
+files = [
+    {file = "shapely-2.0.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:af7e9abe180b189431b0f490638281b43b84a33a960620e6b2e8d3e3458b61a1"},
+    {file = "shapely-2.0.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:98040462b36ced9671e266b95c326b97f41290d9d17504a1ee4dc313a7667b9c"},
+    {file = "shapely-2.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:71eb736ef2843f23473c6e37f6180f90f0a35d740ab284321548edf4e55d9a52"},
+    {file = "shapely-2.0.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:881eb9dbbb4a6419667e91fcb20313bfc1e67f53dbb392c6840ff04793571ed1"},
+    {file = "shapely-2.0.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f10d2ccf0554fc0e39fad5886c839e47e207f99fdf09547bc687a2330efda35b"},
+    {file = "shapely-2.0.3-cp310-cp310-win32.whl", hash = "sha256:6dfdc077a6fcaf74d3eab23a1ace5abc50c8bce56ac7747d25eab582c5a2990e"},
+    {file = "shapely-2.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:64c5013dacd2d81b3bb12672098a0b2795c1bf8190cfc2980e380f5ef9d9e4d9"},
+    {file = "shapely-2.0.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:56cee3e4e8159d6f2ce32e421445b8e23154fd02a0ac271d6a6c0b266a8e3cce"},
+    {file = "shapely-2.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:619232c8276fded09527d2a9fd91a7885ff95c0ff9ecd5e3cb1e34fbb676e2ae"},
+    {file = "shapely-2.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b2a7d256db6f5b4b407dc0c98dd1b2fcf1c9c5814af9416e5498d0a2e4307a4b"},
+    {file = "shapely-2.0.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e45f0c8cd4583647db3216d965d49363e6548c300c23fd7e57ce17a03f824034"},
+    {file = "shapely-2.0.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:13cb37d3826972a82748a450328fe02a931dcaed10e69a4d83cc20ba021bc85f"},
+    {file = "shapely-2.0.3-cp311-cp311-win32.whl", hash = "sha256:9302d7011e3e376d25acd30d2d9e70d315d93f03cc748784af19b00988fc30b1"},
+    {file = "shapely-2.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:6b464f2666b13902835f201f50e835f2f153f37741db88f68c7f3b932d3505fa"},
+    {file = "shapely-2.0.3-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:e86e7cb8e331a4850e0c2a8b2d66dc08d7a7b301b8d1d34a13060e3a5b4b3b55"},
+    {file = "shapely-2.0.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c91981c99ade980fc49e41a544629751a0ccd769f39794ae913e53b07b2f78b9"},
+    {file = "shapely-2.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:bd45d456983dc60a42c4db437496d3f08a4201fbf662b69779f535eb969660af"},
+    {file = "shapely-2.0.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:882fb1ffc7577e88c1194f4f1757e277dc484ba096a3b94844319873d14b0f2d"},
+    {file = "shapely-2.0.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b9f2d93bff2ea52fa93245798cddb479766a18510ea9b93a4fb9755c79474889"},
+    {file = "shapely-2.0.3-cp312-cp312-win32.whl", hash = "sha256:99abad1fd1303b35d991703432c9481e3242b7b3a393c186cfb02373bf604004"},
+    {file = "shapely-2.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:6f555fe3304a1f40398977789bc4fe3c28a11173196df9ece1e15c5bc75a48db"},
+    {file = "shapely-2.0.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a983cc418c1fa160b7d797cfef0e0c9f8c6d5871e83eae2c5793fce6a837fad9"},
+    {file = "shapely-2.0.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18bddb8c327f392189a8d5d6b9a858945722d0bb95ccbd6a077b8e8fc4c7890d"},
+    {file = "shapely-2.0.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:442f4dcf1eb58c5a4e3428d88e988ae153f97ab69a9f24e07bf4af8038536325"},
+    {file = "shapely-2.0.3-cp37-cp37m-win32.whl", hash = "sha256:31a40b6e3ab00a4fd3a1d44efb2482278642572b8e0451abdc8e0634b787173e"},
+    {file = "shapely-2.0.3-cp37-cp37m-win_amd64.whl", hash = "sha256:59b16976c2473fec85ce65cc9239bef97d4205ab3acead4e6cdcc72aee535679"},
+    {file = "shapely-2.0.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:705efbce1950a31a55b1daa9c6ae1c34f1296de71ca8427974ec2f27d57554e3"},
+    {file = "shapely-2.0.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:601c5c0058a6192df704cb889439f64994708563f57f99574798721e9777a44b"},
+    {file = "shapely-2.0.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f24ecbb90a45c962b3b60d8d9a387272ed50dc010bfe605f1d16dfc94772d8a1"},
+    {file = "shapely-2.0.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8c2a2989222c6062f7a0656e16276c01bb308bc7e5d999e54bf4e294ce62e76"},
+    {file = "shapely-2.0.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42bceb9bceb3710a774ce04908fda0f28b291323da2688f928b3f213373b5aee"},
+    {file = "shapely-2.0.3-cp38-cp38-win32.whl", hash = "sha256:54d925c9a311e4d109ec25f6a54a8bd92cc03481a34ae1a6a92c1fe6729b7e01"},
+    {file = "shapely-2.0.3-cp38-cp38-win_amd64.whl", hash = "sha256:300d203b480a4589adefff4c4af0b13919cd6d760ba3cbb1e56275210f96f654"},
+    {file = "shapely-2.0.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:083d026e97b6c1f4a9bd2a9171c7692461092ed5375218170d91705550eecfd5"},
+    {file = "shapely-2.0.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:27b6e1910094d93e9627f2664121e0e35613262fc037051680a08270f6058daf"},
+    {file = "shapely-2.0.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:71b2de56a9e8c0e5920ae5ddb23b923490557ac50cb0b7fa752761bf4851acde"},
+    {file = "shapely-2.0.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4d279e56bbb68d218d63f3efc80c819cedcceef0e64efbf058a1df89dc57201b"},
+    {file = "shapely-2.0.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:88566d01a30f0453f7d038db46bc83ce125e38e47c5f6bfd4c9c287010e9bf74"},
+    {file = "shapely-2.0.3-cp39-cp39-win32.whl", hash = "sha256:58afbba12c42c6ed44c4270bc0e22f3dadff5656d711b0ad335c315e02d04707"},
+    {file = "shapely-2.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:5026b30433a70911979d390009261b8c4021ff87c7c3cbd825e62bb2ffa181bc"},
+    {file = "shapely-2.0.3.tar.gz", hash = "sha256:4d65d0aa7910af71efa72fd6447e02a8e5dd44da81a983de9d736d6e6ccbe674"},
+]
+
+[package.dependencies]
+numpy = ">=1.14,<2"
+
+[package.extras]
+docs = ["matplotlib", "numpydoc (==1.1.*)", "sphinx", "sphinx-book-theme", "sphinx-remove-toctrees"]
+test = ["pytest", "pytest-cov"]
+
 [[package]]
 name = "six"
 version = "1.16.0"
@@ -3973,13 +4460,13 @@ test = ["argcomplete (>=3.0.3)", "mypy (>=1.7.0)", "pre-commit", "pytest (>=7.0,
 
 [[package]]
 name = "transformers"
-version = "4.39.2"
+version = "4.39.3"
 description = "State-of-the-art Machine Learning for JAX, PyTorch and TensorFlow"
 optional = true
 python-versions = ">=3.8.0"
 files = [
-    {file = "transformers-4.39.2-py3-none-any.whl", hash = "sha256:8388a4ae1d91ade935f5c5b36dc47aa1a352b092c30595e3337b49a5f7e71b4e"},
-    {file = "transformers-4.39.2.tar.gz", hash = "sha256:be0c7392cb92ab48efab2656f1cfd1cbda33b2b8a2917a18bd1196707dbebe14"},
+    {file = "transformers-4.39.3-py3-none-any.whl", hash = "sha256:7838034a12cca3168247f9d2d1dba6724c9de3ae0f73a108258c6b8fc5912601"},
+    {file = "transformers-4.39.3.tar.gz", hash = "sha256:2586e5ff4150f122716fc40f5530e92871befc051848fbe82600969c535b762d"},
 ]
 
 [package.dependencies]
@@ -4075,13 +4562,13 @@ files = [
 
 [[package]]
 name = "types-requests"
-version = "2.31.0.20240402"
+version = "2.31.0.20240406"
 description = "Typing stubs for requests"
 optional = false
 python-versions = ">=3.8"
 files = [
-    {file = "types-requests-2.31.0.20240402.tar.gz", hash = "sha256:e5c09a202f8ae79cd6ffbbba2203b6c3775a83126283bb2a6abbc129abc02a12"},
-    {file = "types_requests-2.31.0.20240402-py3-none-any.whl", hash = "sha256:bd7eb7102168d4b5b489f15cdd9842b63ab7fe56aa82a0589fa595b94195acf4"},
+    {file = "types-requests-2.31.0.20240406.tar.gz", hash = "sha256:4428df33c5503945c74b3f42e82b181e86ec7b724620419a2966e2de604ce1a1"},
+    {file = "types_requests-2.31.0.20240406-py3-none-any.whl", hash = "sha256:6216cdac377c6b9a040ac1c0404f7284bd13199c0e1bb235f4324627e8898cf5"},
 ]
 
 [package.dependencies]
@@ -4089,13 +4576,13 @@ urllib3 = ">=2"
 
 [[package]]
 name = "typing-extensions"
-version = "4.10.0"
+version = "4.11.0"
 description = "Backported and Experimental Type Hints for Python 3.8+"
 optional = false
 python-versions = ">=3.8"
 files = [
-    {file = "typing_extensions-4.10.0-py3-none-any.whl", hash = "sha256:69b1a937c3a517342112fb4c6df7e72fc39a38e7891a5730ed4985b5214b5475"},
-    {file = "typing_extensions-4.10.0.tar.gz", hash = "sha256:b0abd7c89e8fb96f98db18d86106ff1d90ab692004eb746cf6eda2682f91b3cb"},
+    {file = "typing_extensions-4.11.0-py3-none-any.whl", hash = "sha256:c1f94d72897edaf4ce775bb7558d5b79d8126906a14ea5ed1635921406c0387a"},
+    {file = "typing_extensions-4.11.0.tar.gz", hash = "sha256:83f085bd5ca59c80295fc2a82ab5dac679cbe02b9f33f7d83af68e241bea51b0"},
 ]
 
 [[package]]
@@ -4270,6 +4757,7 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p
 
 [extras]
 fastembed = ["fastembed"]
+google = ["google-cloud-aiplatform"]
 hybrid = ["pinecone-text"]
 local = ["llama-cpp-python", "torch", "transformers"]
 mistralai = ["mistralai"]
@@ -4281,4 +4769,4 @@ vision = ["pillow", "torch", "torchvision", "transformers"]
 [metadata]
 lock-version = "2.0"
 python-versions = ">=3.9,<3.13"
-content-hash = "a233cd0df597c010d9bef5703977730c752e53d5854d942f630f53a186198afe"
+content-hash = "9f308d2dd1c067185f9d84721b25d81e7d1e72a239059863bad1f4439a7a26cc"
diff --git a/pyproject.toml b/pyproject.toml
index 9ba63362e5bfdd63916f346beb8275ca2f63ade1..06d314d5a89d4100879001080af4cdc2e9fd634e 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,6 +1,6 @@
 [tool.poetry]
 name = "semantic-router"
-version = "0.0.29"
+version = "0.0.34"
 description = "Super fast semantic router for AI decision making"
 authors = [
     "James Briggs <james@aurelio.ai>",
@@ -32,10 +32,12 @@ colorama = "^0.4.6"
 pinecone-client = {version="^3.0.0", optional = true}
 regex = "^2023.12.25"
 torchvision = { version = "^0.17.0", optional = true}
-pillow = { version= "^10.2.0", optional = true}
+pillow = { version = "^10.2.0", optional = true}
 tiktoken = "^0.6.0"
-matplotlib = { version="^3.8.3", optional = true}
-qdrant-client = {version="^1.8.0", optional = true}
+matplotlib = { version = "^3.8.3", optional = true}
+qdrant-client = {version = "^1.8.0", optional = true}
+google-cloud-aiplatform = {version = "^1.45.0", optional = true}
+requests-mock = "^1.12.1"
 
 [tool.poetry.extras]
 hybrid = ["pinecone-text"]
@@ -46,6 +48,7 @@ vision = ["torch", "torchvision", "transformers", "pillow"]
 processing = ["matplotlib"]
 mistralai = ["mistralai"]
 qdrant = ["qdrant-client"]
+google = ["google-cloud-aiplatform"]
 
 [tool.poetry.group.dev.dependencies]
 ipykernel = "^6.25.0"
diff --git a/semantic_router/__init__.py b/semantic_router/__init__.py
index 6693edc54bec428d0d375f9160599be2e93a3075..23b3df7e052899b6d9ed77126318a7efccfa77cd 100644
--- a/semantic_router/__init__.py
+++ b/semantic_router/__init__.py
@@ -4,4 +4,4 @@ from semantic_router.route import Route
 
 __all__ = ["RouteLayer", "HybridRouteLayer", "Route", "LayerConfig"]
 
-__version__ = "0.0.29"
+__version__ = "0.0.34"
diff --git a/semantic_router/encoders/__init__.py b/semantic_router/encoders/__init__.py
index d351028e1a35b141beca18189f28fdb272444643..a79fa60595315943591ad5ec4eb2a34e39a8c50c 100644
--- a/semantic_router/encoders/__init__.py
+++ b/semantic_router/encoders/__init__.py
@@ -3,7 +3,9 @@ from semantic_router.encoders.bm25 import BM25Encoder
 from semantic_router.encoders.clip import CLIPEncoder
 from semantic_router.encoders.cohere import CohereEncoder
 from semantic_router.encoders.fastembed import FastEmbedEncoder
+from semantic_router.encoders.google import GoogleEncoder
 from semantic_router.encoders.huggingface import HuggingFaceEncoder
+from semantic_router.encoders.huggingface import HFEndpointEncoder
 from semantic_router.encoders.mistral import MistralEncoder
 from semantic_router.encoders.openai import OpenAIEncoder
 from semantic_router.encoders.tfidf import TfidfEncoder
@@ -19,7 +21,9 @@ __all__ = [
     "TfidfEncoder",
     "FastEmbedEncoder",
     "HuggingFaceEncoder",
+    "HFEndpointEncoder",
     "MistralEncoder",
     "VitEncoder",
     "CLIPEncoder",
+    "GoogleEncoder",
 ]
diff --git a/semantic_router/encoders/google.py b/semantic_router/encoders/google.py
new file mode 100644
index 0000000000000000000000000000000000000000..088d4bba943360202c455a1bb4fbf1b6dc51b927
--- /dev/null
+++ b/semantic_router/encoders/google.py
@@ -0,0 +1,139 @@
+"""
+This module provides the GoogleEncoder class for generating embeddings using Google's AI Platform.
+
+The GoogleEncoder class is a subclass of BaseEncoder and utilizes the TextEmbeddingModel from the
+Google AI Platform to generate embeddings for given documents. It requires a Google Cloud project ID
+and supports customization of the pre-trained model, score threshold, location, and API endpoint.
+
+Example usage:
+
+    from semantic_router.encoders.google_encoder import GoogleEncoder
+
+    encoder = GoogleEncoder(project_id="your-project-id")
+    embeddings = encoder(["document1", "document2"])
+
+Classes:
+    GoogleEncoder: A class for generating embeddings using Google's AI Platform.
+"""
+
+import os
+from typing import Any, List, Optional
+
+from semantic_router.encoders import BaseEncoder
+from semantic_router.utils.defaults import EncoderDefault
+
+
+class GoogleEncoder(BaseEncoder):
+    """GoogleEncoder class for generating embeddings using Google's AI Platform.
+
+    Attributes:
+        client: An instance of the TextEmbeddingModel client.
+        type: The type of the encoder, which is "google".
+    """
+
+    client: Optional[Any] = None
+    type: str = "google"
+
+    def __init__(
+        self,
+        name: Optional[str] = None,
+        score_threshold: float = 0.75,
+        project_id: Optional[str] = None,
+        location: Optional[str] = None,
+        api_endpoint: Optional[str] = None,
+    ):
+        """Initializes the GoogleEncoder.
+
+        Args:
+            model_name: The name of the pre-trained model to use for embedding.
+                If not provided, the default model specified in EncoderDefault will
+                be used.
+            score_threshold: The threshold for similarity scores.
+            project_id: The Google Cloud project ID.
+                If not provided, it will be retrieved from the GOOGLE_PROJECT_ID
+                environment variable.
+            location: The location of the AI Platform resources.
+                If not provided, it will be retrieved from the GOOGLE_LOCATION
+                environment variable, defaulting to "us-central1".
+            api_endpoint: The API endpoint for the AI Platform.
+                If not provided, it will be retrieved from the GOOGLE_API_ENDPOINT
+                environment variable.
+
+        Raises:
+            ValueError: If the Google Project ID is not provided or if the AI Platform
+            client fails to initialize.
+        """
+        if name is None:
+            name = EncoderDefault.GOOGLE.value["embedding_model"]
+
+        super().__init__(name=name, score_threshold=score_threshold)
+
+        self.client = self._initialize_client(project_id, location, api_endpoint)
+
+    def _initialize_client(self, project_id, location, api_endpoint):
+        """Initializes the Google AI Platform client.
+
+        Args:
+            project_id: The Google Cloud project ID.
+            location: The location of the AI Platform resources.
+            api_endpoint: The API endpoint for the AI Platform.
+
+        Returns:
+            An instance of the TextEmbeddingModel client.
+
+        Raises:
+            ImportError: If the required Google Cloud or Vertex AI libraries are not
+            installed.
+            ValueError: If the Google Project ID is not provided or if the AI Platform
+            client fails to initialize.
+        """
+        try:
+            from google.cloud import aiplatform
+            from vertexai.language_models import TextEmbeddingModel
+        except ImportError:
+            raise ImportError(
+                "Please install Google Cloud and Vertex AI libraries to use GoogleEncoder. "
+                "You can install them with: "
+                "`pip install google-cloud-aiplatform vertexai-language-models`"
+            )
+
+        project_id = project_id or os.getenv("GOOGLE_PROJECT_ID")
+        location = location or os.getenv("GOOGLE_LOCATION", "us-central1")
+        api_endpoint = api_endpoint or os.getenv("GOOGLE_API_ENDPOINT")
+
+        if project_id is None:
+            raise ValueError("Google Project ID cannot be 'None'.")
+
+        try:
+            aiplatform.init(
+                project=project_id, location=location, api_endpoint=api_endpoint
+            )
+            client = TextEmbeddingModel.from_pretrained(self.name)
+        except Exception as err:
+            raise ValueError(
+                f"Google AI Platform client failed to initialize. Error: {err}"
+            ) from err
+
+        return client
+
+    def __call__(self, docs: List[str]) -> List[List[float]]:
+        """Generates embeddings for the given documents.
+
+        Args:
+            docs: A list of strings representing the documents to embed.
+
+        Returns:
+            A list of lists, where each inner list contains the embedding values for a
+            document.
+
+        Raises:
+            ValueError: If the Google AI Platform client is not initialized or if the
+            API call fails.
+        """
+        if self.client is None:
+            raise ValueError("Google AI Platform client is not initialized.")
+        try:
+            embeddings = self.client.get_embeddings(docs)
+            return [embedding.values for embedding in embeddings]
+        except Exception as e:
+            raise ValueError(f"Google AI Platform API call failed. Error: {e}") from e
diff --git a/semantic_router/encoders/huggingface.py b/semantic_router/encoders/huggingface.py
index 64b183ff13506d3f21abff147a487c581edbc88f..24bd5cd044c09bd8c2de2c5836ad8d79fc6204f8 100644
--- a/semantic_router/encoders/huggingface.py
+++ b/semantic_router/encoders/huggingface.py
@@ -1,8 +1,34 @@
+"""
+This module provides the HFEndpointEncoder class to embeddings models using Huggingface's endpoint.
+
+The HFEndpointEncoder class is a subclass of BaseEncoder and utilizes a specified Huggingface 
+endpoint to generate embeddings for given documents. It requires the URL of the Huggingface 
+API endpoint and an API key for authentication. The class supports customization of the score 
+threshold for filtering or processing the embeddings.
+
+Example usage:
+
+    from semantic_router.encoders.hfendpointencoder import HFEndpointEncoder
+
+    encoder = HFEndpointEncoder(
+        huggingface_url="https://api-inference.huggingface.co/models/BAAI/bge-large-en-v1.5",
+        huggingface_api_key="your-hugging-face-api-key"
+    )
+    embeddings = encoder(["document1", "document2"])
+
+Classes:
+    HFEndpointEncoder: A class for generating embeddings using a Huggingface endpoint.
+"""
+
+import requests
+import time
+import os
 from typing import Any, List, Optional
 
 from pydantic.v1 import PrivateAttr
 
 from semantic_router.encoders import BaseEncoder
+from semantic_router.utils.logger import logger
 
 
 class HuggingFaceEncoder(BaseEncoder):
@@ -112,3 +138,138 @@ class HuggingFaceEncoder(BaseEncoder):
         )
         token_embeddings[input_mask_expanded == 0] = -1e9
         return self._torch.max(token_embeddings, 1)[0]
+
+
+class HFEndpointEncoder(BaseEncoder):
+    """
+    A class to encode documents using a Hugging Face transformer model endpoint.
+
+    Attributes:
+        huggingface_url (str): The URL of the Hugging Face API endpoint.
+        huggingface_api_key (str): The API key for authenticating with the Hugging Face API.
+        score_threshold (float): A threshold value used for filtering or processing the embeddings.
+    """
+
+    name: str = "hugging_face_custom_endpoint"
+    huggingface_url: Optional[str] = None
+    huggingface_api_key: Optional[str] = None
+    score_threshold: float = 0.8
+
+    def __init__(
+        self,
+        name: Optional[str] = "hugging_face_custom_endpoint",
+        huggingface_url: Optional[str] = None,
+        huggingface_api_key: Optional[str] = None,
+        score_threshold: float = 0.8,
+    ):
+        """
+        Initializes the HFEndpointEncoder with the specified parameters.
+
+        Args:
+            name (str, optional): The name of the encoder. Defaults to
+                "hugging_face_custom_endpoint".
+            huggingface_url (str, optional): The URL of the Hugging Face API endpoint.
+                Cannot be None.
+            huggingface_api_key (str, optional): The API key for the Hugging Face API.
+                Cannot be None.
+            score_threshold (float, optional): A threshold for processing the embeddings.
+                Defaults to 0.8.
+
+        Raises:
+            ValueError: If either `huggingface_url` or `huggingface_api_key` is None.
+        """
+        huggingface_url = huggingface_url or os.getenv("HF_API_URL")
+        huggingface_api_key = huggingface_api_key or os.getenv("HF_API_KEY")
+
+        super().__init__(name=name, score_threshold=score_threshold)  # type: ignore
+
+        if huggingface_url is None:
+            raise ValueError("HuggingFace endpoint url cannot be 'None'.")
+        if huggingface_api_key is None:
+            raise ValueError("HuggingFace API key cannot be 'None'.")
+
+        self.huggingface_url = huggingface_url or os.getenv("HF_API_URL")
+        self.huggingface_api_key = huggingface_api_key or os.getenv("HF_API_KEY")
+
+        try:
+            self.query({"inputs": "Hello World!", "parameters": {}})
+        except Exception as e:
+            raise ValueError(
+                f"HuggingFace endpoint client failed to initialize. Error: {e}"
+            ) from e
+
+    def __call__(self, docs: List[str]) -> List[List[float]]:
+        """
+        Encodes a list of documents into embeddings using the Hugging Face API.
+
+        Args:
+            docs (List[str]): A list of documents to encode.
+
+        Returns:
+            List[List[float]]: A list of embeddings for the given documents.
+
+        Raises:
+            ValueError: If no embeddings are returned for a document.
+        """
+        embeddings = []
+        for d in docs:
+            try:
+                output = self.query({"inputs": d, "parameters": {}})
+                if not output or len(output) == 0:
+                    raise ValueError("No embeddings returned from the query.")
+                embeddings.append(output)
+
+            except Exception as e:
+                raise ValueError(
+                    f"No embeddings returned for document. Error: {e}"
+                ) from e
+        return embeddings
+
+    def query(self, payload, max_retries=3, retry_interval=5):
+        """
+        Sends a query to the Hugging Face API and returns the response.
+
+        Args:
+            payload (dict): The payload to send in the request.
+
+        Returns:
+            dict: The response from the Hugging Face API.
+
+        Raises:
+            ValueError: If the query fails or the response status is not 200.
+        """
+        headers = {
+            "Accept": "application/json",
+            "Authorization": f"Bearer {self.huggingface_api_key}",
+            "Content-Type": "application/json",
+        }
+        for attempt in range(1, max_retries + 1):
+            try:
+                response = requests.post(
+                    self.huggingface_url,
+                    headers=headers,
+                    json=payload,
+                    # timeout=timeout_seconds,
+                )
+                if response.status_code == 503:
+                    estimated_time = response.json().get("estimated_time", "")
+                    if estimated_time:
+                        logger.info(
+                            f"Model Initializing wait for - {estimated_time:.2f}s "
+                        )
+                        time.sleep(estimated_time)
+                        continue
+                else:
+                    response.raise_for_status()
+
+            except requests.exceptions.RequestException:
+                if attempt < max_retries - 1:
+                    logger.info(f"Retrying attempt: {attempt} for payload: {payload} ")
+                    time.sleep(retry_interval)
+                    retry_interval += attempt
+                else:
+                    raise ValueError(
+                        f"Query failed with status {response.status_code}: {response.text}"
+                    )
+
+        return response.json()
diff --git a/semantic_router/encoders/mistral.py b/semantic_router/encoders/mistral.py
index 544c629f81dcd2199b0b5b10e704c177c7c144d3..974f11284a162979420ac897474413c266fff1a5 100644
--- a/semantic_router/encoders/mistral.py
+++ b/semantic_router/encoders/mistral.py
@@ -2,12 +2,12 @@
 
 import os
 from time import sleep
-from typing import List, Optional, Any
+from typing import Any, List, Optional
 
+from pydantic.v1 import PrivateAttr
 
 from semantic_router.encoders import BaseEncoder
 from semantic_router.utils.defaults import EncoderDefault
-from pydantic.v1 import PrivateAttr
 
 
 class MistralEncoder(BaseEncoder):
diff --git a/semantic_router/encoders/openai.py b/semantic_router/encoders/openai.py
index de6c0599710b59a14124ae269eee3b047eb33063..7712b19b7298b5d5a3070b79b131775ad3466349 100644
--- a/semantic_router/encoders/openai.py
+++ b/semantic_router/encoders/openai.py
@@ -52,7 +52,7 @@ class OpenAIEncoder(BaseEncoder):
         error_message = ""
 
         # Exponential backoff
-        for j in range(3):
+        for j in range(1, 7):
             try:
                 embeds = self.client.embeddings.create(
                     input=docs,
diff --git a/semantic_router/encoders/tfidf.py b/semantic_router/encoders/tfidf.py
index 0809b5ad467fabac693aae234eb28cb51b0991a0..77069da2b89dafbbd05a9a95bc4d10bbee15a449 100644
--- a/semantic_router/encoders/tfidf.py
+++ b/semantic_router/encoders/tfidf.py
@@ -35,7 +35,7 @@ class TfidfEncoder(BaseEncoder):
         docs = []
         for route in routes:
             for doc in route.utterances:
-                docs.append(self._preprocess(doc))
+                docs.append(self._preprocess(doc))  # type: ignore
         self.word_index = self._build_word_index(docs)
         self.idf = self._compute_idf(docs)
 
diff --git a/semantic_router/index/pinecone.py b/semantic_router/index/pinecone.py
index a14bad59033658e289c7dc4c94bb3c66d9b78ecf..e240ed316d203dbc3f1e4e0cb6039c7f2f349e5e 100644
--- a/semantic_router/index/pinecone.py
+++ b/semantic_router/index/pinecone.py
@@ -47,12 +47,14 @@ class PineconeIndex(BaseIndex):
     client: Any = Field(default=None, exclude=True)
     index: Optional[Any] = Field(default=None, exclude=True)
     ServerlessSpec: Any = Field(default=None, exclude=True)
+    namespace: Optional[str] = ""
 
     def __init__(self, **data):
         super().__init__(**data)
         self._initialize_client()
         self.type = "pinecone"
         self.client = self._initialize_client()
+        self.index = self._init_index(force_create=True)
 
     def _initialize_client(self, api_key: Optional[str] = None):
         try:
@@ -68,7 +70,11 @@ class PineconeIndex(BaseIndex):
         api_key = api_key or os.getenv("PINECONE_API_KEY")
         if api_key is None:
             raise ValueError("Pinecone API key is required.")
-        return Pinecone(api_key=api_key, source_tag="semantic-router")
+        pinecone_args = {"api_key": api_key, "source_tag": "semantic-router"}
+        if self.namespace:
+            pinecone_args["namespace"] = self.namespace
+
+        return Pinecone(**pinecone_args)
 
     def _init_index(self, force_create: bool = False) -> Union[Any, None]:
         index_exists = self.index_name in self.client.list_indexes().names()
@@ -89,7 +95,7 @@ class PineconeIndex(BaseIndex):
             time.sleep(0.5)
         elif index_exists:
             # if the index exists we just return it
-            index = self.client.Index(self.index_name)
+            index = self.client.Index(self.index_name, namespace=self.namespace)
             # grab the dimensions from the index
             self.dimensions = index.describe_index_stats()["dimension"]
         elif force_create and not dimensions_given:
@@ -108,7 +114,7 @@ class PineconeIndex(BaseIndex):
     def _batch_upsert(self, batch: List[dict]):
         """Helper method for upserting a single batch of records."""
         if self.index is not None:
-            self.index.upsert(vectors=batch)
+            self.index.upsert(vectors=batch, namespace=self.namespace)
         else:
             raise ValueError("Index is None, could not upsert.")
 
@@ -175,7 +181,7 @@ class PineconeIndex(BaseIndex):
 
             # if we need metadata, we fetch it
             if include_metadata:
-                res_meta = self.index.fetch(ids=vector_ids)
+                res_meta = self.index.fetch(ids=vector_ids, namespace=self.namespace)
                 # extract metadata only
                 metadata.extend([x["metadata"] for x in res_meta["vectors"].values()])
 
@@ -206,7 +212,7 @@ class PineconeIndex(BaseIndex):
             raise ValueError("Index is None, could not delete.")
 
     def delete_all(self):
-        self.index.delete(delete_all=True)
+        self.index.delete(delete_all=True, namespace=self.namespace)
 
     def describe(self) -> dict:
         if self.index is not None:
@@ -237,6 +243,7 @@ class PineconeIndex(BaseIndex):
             top_k=top_k,
             filter=filter_query,
             include_metadata=True,
+            namespace=self.namespace,
         )
         scores = [result["score"] for result in results["matches"]]
         route_names = [result["metadata"]["sr_route"] for result in results["matches"]]
diff --git a/semantic_router/layer.py b/semantic_router/layer.py
index 8c01e5b62ae936431ae600d3b19b0ae2f170f3e0..a138893a88427fc7d7791f085d3508ee67bd6879 100644
--- a/semantic_router/layer.py
+++ b/semantic_router/layer.py
@@ -5,7 +5,7 @@ import random
 from typing import Any, Dict, List, Optional, Tuple, Union
 
 import numpy as np
-import yaml
+import yaml  # type: ignore
 from tqdm.auto import tqdm
 
 from semantic_router.encoders import BaseEncoder, OpenAIEncoder
@@ -354,7 +354,7 @@ class RouteLayer:
     def add(self, route: Route):
         logger.info(f"Adding `{route.name}` route")
         # create embeddings
-        embeds = self.encoder(route.utterances)
+        embeds = self.encoder(route.utterances)  # type: ignore
         # if route has no score_threshold, use default
         if route.score_threshold is None:
             route.score_threshold = self.score_threshold
@@ -363,7 +363,7 @@ class RouteLayer:
         self.index.add(
             embeddings=embeds,
             routes=[route.name] * len(route.utterances),
-            utterances=route.utterances,
+            utterances=route.utterances,  # type: ignore
         )
         self.routes.append(route)
 
@@ -409,14 +409,14 @@ class RouteLayer:
         all_utterances = [
             utterance for route in routes for utterance in route.utterances
         ]
-        embedded_utterances = self.encoder(all_utterances)
+        embedded_utterances = self.encoder(all_utterances)  # type: ignore
         # create route array
         route_names = [route.name for route in routes for _ in route.utterances]
         # add everything to the index
         self.index.add(
             embeddings=embedded_utterances,
             routes=route_names,
-            utterances=all_utterances,
+            utterances=all_utterances,  # type: ignore
         )
 
     def _encode(self, text: str) -> Any:
diff --git a/semantic_router/llms/llamacpp.py b/semantic_router/llms/llamacpp.py
index bcf01b6d602fbb6b5be1e743eca75e1b4154da20..5a737b869b229fd36b8bf623e0ef6920423dbbd3 100644
--- a/semantic_router/llms/llamacpp.py
+++ b/semantic_router/llms/llamacpp.py
@@ -2,12 +2,12 @@ from contextlib import contextmanager
 from pathlib import Path
 from typing import Any, Optional
 
+from pydantic.v1 import PrivateAttr
+
 from semantic_router.llms.base import BaseLLM
 from semantic_router.schema import Message
 from semantic_router.utils.logger import logger
 
-from pydantic.v1 import PrivateAttr
-
 
 class LlamaCppLLM(BaseLLM):
     llm: Any
diff --git a/semantic_router/llms/mistral.py b/semantic_router/llms/mistral.py
index 647d4073e5c7b50591dd7cd686536c0bebba0714..8ddd1482975f4cb091816bcd197c416ac3e39da7 100644
--- a/semantic_router/llms/mistral.py
+++ b/semantic_router/llms/mistral.py
@@ -1,14 +1,13 @@
 import os
-from typing import List, Optional, Any
+from typing import Any, List, Optional
 
+from pydantic.v1 import PrivateAttr
 
 from semantic_router.llms import BaseLLM
 from semantic_router.schema import Message
 from semantic_router.utils.defaults import EncoderDefault
 from semantic_router.utils.logger import logger
 
-from pydantic.v1 import PrivateAttr
-
 
 class MistralAILLM(BaseLLM):
     _client: Any = PrivateAttr()
diff --git a/semantic_router/schema.py b/semantic_router/schema.py
index 85d428ef0494a882cd84b8c9ea8caf7c914de517..6b7485ac26255358a0834a763c3df90f27798cca 100644
--- a/semantic_router/schema.py
+++ b/semantic_router/schema.py
@@ -8,6 +8,7 @@ from semantic_router.encoders import (
     BaseEncoder,
     CohereEncoder,
     FastEmbedEncoder,
+    GoogleEncoder,
     MistralEncoder,
     OpenAIEncoder,
 )
@@ -19,6 +20,7 @@ class EncoderType(Enum):
     OPENAI = "openai"
     COHERE = "cohere"
     MISTRAL = "mistral"
+    GOOGLE = "google"
 
 
 class RouteChoice(BaseModel):
@@ -46,6 +48,8 @@ class Encoder:
             self.model = CohereEncoder(name=name)
         elif self.type == EncoderType.MISTRAL:
             self.model = MistralEncoder(name=name)
+        elif self.type == EncoderType.GOOGLE:
+            self.model = GoogleEncoder(name=name)
         else:
             raise ValueError
 
diff --git a/semantic_router/splitters/rolling_window.py b/semantic_router/splitters/rolling_window.py
index 2f80ff3b7782ed4247f6624d00262715d6140e60..a2809ff53cf15d4a00a87307da6027491d1008ab 100644
--- a/semantic_router/splitters/rolling_window.py
+++ b/semantic_router/splitters/rolling_window.py
@@ -76,7 +76,7 @@ class RollingWindowSplitter(BaseSplitter):
         if len(docs) == 1:
             token_count = tiktoken_length(docs[0])
             if token_count > self.max_split_tokens:
-                logger.warning(
+                logger.info(
                     f"Single document exceeds the maximum token limit "
                     f"of {self.max_split_tokens}. "
                     "Splitting to sentences before semantically splitting."
@@ -215,7 +215,11 @@ class RollingWindowSplitter(BaseSplitter):
             logger.debug(f"Document token count: {doc_token_count} tokens")
             # Check if current index is a split point based on similarity
             if doc_idx + 1 in split_indices:
-                if current_tokens_count + doc_token_count >= self.min_split_tokens:
+                if (
+                    self.min_split_tokens
+                    <= current_tokens_count + doc_token_count
+                    < self.max_split_tokens
+                ):
                     # Include the current document before splitting
                     # if it doesn't exceed the max limit
                     current_split.append(doc)
diff --git a/semantic_router/utils/defaults.py b/semantic_router/utils/defaults.py
index 7b5a3b5f9485ab5fe4b1f31d9fd391e944da09b6..3c9cbb2dd1010f5b861c49fcafad389c591fe9cb 100644
--- a/semantic_router/utils/defaults.py
+++ b/semantic_router/utils/defaults.py
@@ -26,3 +26,8 @@ class EncoderDefault(Enum):
             "AZURE_OPENAI_DEPLOYMENT_NAME", "text-embedding-ada-002"
         ),
     }
+    GOOGLE = {
+        "embedding_model": os.getenv(
+            "GOOGLE_EMBEDDING_MODEL", "textembedding-gecko@003"
+        ),
+    }
diff --git a/tests/unit/encoders/test_google.py b/tests/unit/encoders/test_google.py
new file mode 100644
index 0000000000000000000000000000000000000000..42d52b5805ee27fed96d3df83535781ef25b9649
--- /dev/null
+++ b/tests/unit/encoders/test_google.py
@@ -0,0 +1,120 @@
+import pytest
+from google.api_core.exceptions import GoogleAPICallError
+from vertexai.language_models import TextEmbedding
+from vertexai.language_models._language_models import TextEmbeddingStatistics
+
+from semantic_router.encoders import GoogleEncoder
+
+
+@pytest.fixture
+def google_encoder(mocker):
+    mocker.patch("google.cloud.aiplatform.init")
+    mocker.patch("vertexai.language_models.TextEmbeddingModel.from_pretrained")
+    return GoogleEncoder(project_id="test_project_id")
+
+
+class TestGoogleEncoder:
+    def test_initialization_with_project_id(self, google_encoder):
+        assert google_encoder.client is not None, "Client should be initialized"
+        assert (
+            google_encoder.name == "textembedding-gecko@003"
+        ), "Default name not set correctly"
+
+    def test_initialization_without_project_id(self, mocker, monkeypatch):
+        monkeypatch.delenv("GOOGLE_PROJECT_ID", raising=False)
+        mocker.patch("google.cloud.aiplatform.init")
+        mocker.patch("vertexai.language_models.TextEmbeddingModel.from_pretrained")
+        with pytest.raises(ValueError):
+            GoogleEncoder()
+
+    def test_call_method(self, google_encoder, mocker):
+        mock_embeddings = [
+            TextEmbedding(
+                values=[0.1, 0.2, 0.3],
+                statistics=TextEmbeddingStatistics(token_count=5, truncated=False),
+            )
+        ]
+        mocker.patch.object(
+            google_encoder.client, "get_embeddings", return_value=mock_embeddings
+        )
+
+        result = google_encoder(["test"])
+        assert isinstance(result, list), "Result should be a list"
+        assert all(
+            isinstance(sublist, list) for sublist in result
+        ), "Each item in result should be a list"
+        google_encoder.client.get_embeddings.assert_called_once()
+
+    def test_returns_list_of_embeddings_for_valid_input(self, google_encoder, mocker):
+        mock_embeddings = [
+            TextEmbedding(
+                values=[0.1, 0.2, 0.3],
+                statistics=TextEmbeddingStatistics(token_count=5, truncated=False),
+            )
+        ]
+        mocker.patch.object(
+            google_encoder.client, "get_embeddings", return_value=mock_embeddings
+        )
+
+        result = google_encoder(["test"])
+        assert isinstance(result, list), "Result should be a list"
+        assert all(
+            isinstance(sublist, list) for sublist in result
+        ), "Each item in result should be a list"
+        google_encoder.client.get_embeddings.assert_called_once()
+
+    def test_handles_multiple_inputs_correctly(self, google_encoder, mocker):
+        mock_embeddings = [
+            TextEmbedding(
+                values=[0.1, 0.2, 0.3],
+                statistics=TextEmbeddingStatistics(token_count=5, truncated=False),
+            ),
+            TextEmbedding(
+                values=[0.4, 0.5, 0.6],
+                statistics=TextEmbeddingStatistics(token_count=6, truncated=False),
+            ),
+        ]
+        mocker.patch.object(
+            google_encoder.client, "get_embeddings", return_value=mock_embeddings
+        )
+
+        result = google_encoder(["test1", "test2"])
+        assert isinstance(result, list), "Result should be a list"
+        assert all(
+            isinstance(sublist, list) for sublist in result
+        ), "Each item in result should be a list"
+        google_encoder.client.get_embeddings.assert_called_once()
+
+    def test_raises_value_error_if_project_id_is_none(self, mocker, monkeypatch):
+        monkeypatch.delenv("GOOGLE_PROJECT_ID", raising=False)
+        mocker.patch("google.cloud.aiplatform.init")
+        mocker.patch("vertexai.language_models.TextEmbeddingModel.from_pretrained")
+        with pytest.raises(ValueError):
+            GoogleEncoder()
+
+    def test_raises_value_error_if_google_client_fails_to_initialize(self, mocker):
+        mocker.patch(
+            "google.cloud.aiplatform.init",
+            side_effect=Exception("Failed to initialize client"),
+        )
+        with pytest.raises(ValueError):
+            GoogleEncoder(project_id="test_project_id")
+
+    def test_raises_value_error_if_google_client_is_not_initialized(self, mocker):
+        mocker.patch("google.cloud.aiplatform.init")
+        mocker.patch(
+            "vertexai.language_models.TextEmbeddingModel.from_pretrained",
+            return_value=None,
+        )
+        encoder = GoogleEncoder(project_id="test_project_id")
+        with pytest.raises(ValueError):
+            encoder(["test"])
+
+    def test_call_method_raises_error_on_api_failure(self, google_encoder, mocker):
+        mocker.patch.object(
+            google_encoder.client,
+            "get_embeddings",
+            side_effect=GoogleAPICallError("API call failed"),
+        )
+        with pytest.raises(ValueError):
+            google_encoder(["test"])
diff --git a/tests/unit/encoders/test_hfendpointencoder.py b/tests/unit/encoders/test_hfendpointencoder.py
new file mode 100644
index 0000000000000000000000000000000000000000..cb8dd16a661c4194a76935d51390ed4f5b3d3fcc
--- /dev/null
+++ b/tests/unit/encoders/test_hfendpointencoder.py
@@ -0,0 +1,68 @@
+import pytest
+from semantic_router.encoders.huggingface import HFEndpointEncoder
+
+
+@pytest.fixture
+def encoder(requests_mock):
+    # Mock the HTTP request made during HFEndpointEncoder initialization
+    requests_mock.post(
+        "https://api-inference.huggingface.co/models/bert-base-uncased",
+        json=[0.1, 0.2, 0.3],
+        status_code=200,
+    )
+    # Now, when HFEndpointEncoder is initialized, it will use the mocked response above
+    return HFEndpointEncoder(
+        huggingface_url="https://api-inference.huggingface.co/models/bert-base-uncased",
+        huggingface_api_key="test-api-key",
+        score_threshold=0.8,
+    )
+
+
+class TestHFEndpointEncoder:
+    def test_initialization(self, encoder):
+        assert (
+            encoder.huggingface_url
+            == "https://api-inference.huggingface.co/models/bert-base-uncased"
+        )
+        assert encoder.huggingface_api_key == "test-api-key"
+        assert encoder.score_threshold == 0.8
+
+    def test_initialization_failure_no_api_key(self):
+        with pytest.raises(ValueError) as exc_info:
+            HFEndpointEncoder(
+                huggingface_url="https://api-inference.huggingface.co/models/bert-base-uncased"
+            )
+        assert "HuggingFace API key cannot be 'None'" in str(exc_info.value)
+
+    def test_initialization_failure_no_url(self):
+        with pytest.raises(ValueError) as exc_info:
+            HFEndpointEncoder(huggingface_api_key="test-api-key")
+        assert "HuggingFace endpoint url cannot be 'None'" in str(exc_info.value)
+
+    def test_query_success(self, encoder, requests_mock):
+        requests_mock.post(
+            "https://api-inference.huggingface.co/models/bert-base-uncased",
+            json=[0.1, 0.2, 0.3],
+            status_code=200,
+        )
+        response = encoder.query({"inputs": "Hello World!", "parameters": {}})
+        assert response == [0.1, 0.2, 0.3]
+
+    def test_query_failure(self, encoder, requests_mock):
+        requests_mock.post(
+            "https://api-inference.huggingface.co/models/bert-base-uncased",
+            text="Error",
+            status_code=400,
+        )
+        with pytest.raises(ValueError) as exc_info:
+            encoder.query({"inputs": "Hello World!", "parameters": {}})
+        assert "Query failed with status 400: Error" in str(exc_info.value)
+
+    def test_encode_documents_success(self, encoder, requests_mock):
+        requests_mock.post(
+            "https://api-inference.huggingface.co/models/bert-base-uncased",
+            json=[0.1, 0.2, 0.3],
+            status_code=200,
+        )
+        embeddings = encoder(["Hello World!"])
+        assert embeddings == [[0.1, 0.2, 0.3]]
diff --git a/tests/unit/encoders/test_mistral.py b/tests/unit/encoders/test_mistral.py
index f36f5037abaab256b03ab912714831b33a23fe2a..25dba6b759bc2a033c64ae0055e0b1b45d626f48 100644
--- a/tests/unit/encoders/test_mistral.py
+++ b/tests/unit/encoders/test_mistral.py
@@ -1,11 +1,11 @@
+from unittest.mock import patch
+
 import pytest
 from mistralai.exceptions import MistralException
 from mistralai.models.embeddings import EmbeddingObject, EmbeddingResponse, UsageInfo
 
 from semantic_router.encoders import MistralEncoder
 
-from unittest.mock import patch
-
 
 @pytest.fixture
 def mistralai_encoder(mocker):
diff --git a/tests/unit/llms/test_llm_llamacpp.py b/tests/unit/llms/test_llm_llamacpp.py
index 63d92ee8dd0ff4dad8b0c60846433e7197ee1699..9f579cdf44713c6eff6dd0c3a5ef8fbcba0e10b5 100644
--- a/tests/unit/llms/test_llm_llamacpp.py
+++ b/tests/unit/llms/test_llm_llamacpp.py
@@ -1,11 +1,11 @@
+from unittest.mock import patch
+
 import pytest
 from llama_cpp import Llama
 
 from semantic_router.llms.llamacpp import LlamaCppLLM
 from semantic_router.schema import Message
 
-from unittest.mock import patch
-
 
 @pytest.fixture
 def llamacpp_llm(mocker):
diff --git a/tests/unit/llms/test_llm_mistral.py b/tests/unit/llms/test_llm_mistral.py
index d73406e726c721242743f36e9de062b7460daaf0..3b318e2acb4feb0c9ac723b3c5ea96e0abe40097 100644
--- a/tests/unit/llms/test_llm_mistral.py
+++ b/tests/unit/llms/test_llm_mistral.py
@@ -1,10 +1,10 @@
+from unittest.mock import patch
+
 import pytest
 
 from semantic_router.llms import MistralAILLM
 from semantic_router.schema import Message
 
-from unittest.mock import patch
-
 
 @pytest.fixture
 def mistralai_llm(mocker):