From 9020a934be35b0798c972eb77a22fb62ce654ca5 Mon Sep 17 00:00:00 2001 From: Farzad Sunavala <40604067+farzad528@users.noreply.github.com> Date: Fri, 24 Jan 2025 06:56:26 -0600 Subject: [PATCH 01/12] docs: add Azure RAG example (#675) Signed-off-by: Panos Vagenas <35837085+vagenas@users.noreply.github.com> Co-authored-by: Farzad Sunavala --- docs/examples/rag_azuresearch.ipynb | 893 ++++++++++++++++++++++++++++ mkdocs.yml | 10 +- 2 files changed, 899 insertions(+), 4 deletions(-) create mode 100644 docs/examples/rag_azuresearch.ipynb diff --git a/docs/examples/rag_azuresearch.ipynb b/docs/examples/rag_azuresearch.ipynb new file mode 100644 index 00000000..abbe3774 --- /dev/null +++ b/docs/examples/rag_azuresearch.ipynb @@ -0,0 +1,893 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "Ag9kcX2B_atc" + }, + "source": [ + "\"Open" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# RAG with Azure AI Search" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "| Step | Tech | Execution |\n", + "| ------------------ | ------------------ | --------- |\n", + "| Embedding | Azure OpenAI | ๐ŸŒ Remote |\n", + "| Vector Store | Azure AI Search | ๐ŸŒ Remote |\n", + "| Gen AI | Azure OpenAI | ๐ŸŒ Remote |" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "\n", + "This notebook demonstrates how to build a Retrieval-Augmented Generation (RAG) system using:\n", + "- [Docling](https://ds4sd.github.io/docling/) for document parsing and chunking\n", + "- [Azure AI Search](https://azure.microsoft.com/products/ai-services/ai-search/?msockid=0109678bea39665431e37323ebff6723) for vector indexing and retrieval\n", + "- [Azure OpenAI](https://azure.microsoft.com/products/ai-services/openai-service?msockid=0109678bea39665431e37323ebff6723) for embeddings and chat completion\n", + "\n", + "This sample demonstrates how to:\n", + "1. Parse a PDF with Docling.\n", + "2. Chunk the parsed text.\n", + "3. Use Azure OpenAI for embeddings.\n", + "4. Index and search in Azure AI Search.\n", + "5. Run a retrieval-augmented generation (RAG) query with Azure OpenAI GPT-4o.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# If running in a fresh environment (like Google Colab), uncomment and run this single command:\n", + "%pip install \"docling~=2.12\" azure-search-documents==11.5.2 azure-identity openai rich torch python-dotenv" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Part 0: Prerequisites\n", + " - **Azure AI Search** resource\n", + " - **Azure OpenAI** resource with a deployed embedding & chat completion model (e.g. `text-embedding-3-small` & `gpt-4o`) \n", + " - **Docling 2.12+** (installs `docling_core` automatically) Docling installed (Python 3.8+ environment)\n", + "\n", + "- A **GPU-enabled environment** is preferred for faster parsing. Docling 2.12 automatically detects GPU if present.\n", + " - If you only have CPU, parsing large PDFs can be slower. " + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "\n", + "from dotenv import load_dotenv\n", + "\n", + "load_dotenv()\n", + "\n", + "\n", + "def _get_env(key, default=None):\n", + " try:\n", + " from google.colab import userdata\n", + "\n", + " try:\n", + " return userdata.get(key)\n", + " except userdata.SecretNotFoundError:\n", + " pass\n", + " except ImportError:\n", + " pass\n", + " return os.getenv(key, default)\n", + "\n", + "\n", + "AZURE_SEARCH_ENDPOINT = _get_env(\"AZURE_SEARCH_ENDPOINT\")\n", + "AZURE_SEARCH_KEY = _get_env(\"AZURE_SEARCH_KEY\") # Ensure this your Admin Key\n", + "AZURE_SEARCH_INDEX_NAME = _get_env(\"AZURE_SEARCH_INDEX_NAME\", \"docling-rag-sample\")\n", + "AZURE_OPENAI_ENDPOINT = _get_env(\"AZURE_OPENAI_ENDPOINT\")\n", + "AZURE_OPENAI_API_KEY = _get_env(\"AZURE_OPENAI_API_KEY\")\n", + "AZURE_OPENAI_API_VERSION = _get_env(\"AZURE_OPENAI_API_VERSION\", \"2024-10-21\")\n", + "AZURE_OPENAI_CHAT_MODEL = _get_env(\n", + " \"AZURE_OPENAI_CHAT_MODEL\"\n", + ") # Using a deployed model named \"gpt-4o\"\n", + "AZURE_OPENAI_EMBEDDINGS = _get_env(\n", + " \"AZURE_OPENAI_EMBEDDINGS\", \"text-embedding-3-small\"\n", + ") # Using a deployed model named \"text-embeddings-3-small\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Part 1: Parse the PDF with Docling\n", + "\n", + "Weโ€™ll parse the **Microsoft GraphRAG Research Paper** (~15 pages). Parsing should be relatively quick, even on CPU, but it will be faster on a GPU or MPS device if available.\n", + "\n", + "*(If you prefer a different document, simply provide a different URL or local file path.)*" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
Parsing a ~15-page PDF. The process should be relatively quick, even on CPU...\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[1;33mParsing a ~\u001b[0m\u001b[1;33m15\u001b[0m\u001b[1;33m-page PDF. The process should be relatively quick, even on CPU\u001b[0m\u001b[1;33m...\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ Docling Markdown Preview โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ\n",
+       "โ”‚ ## From Local to Global: A Graph RAG Approach to Query-Focused Summarization                                    โ”‚\n",
+       "โ”‚                                                                                                                 โ”‚\n",
+       "โ”‚ Darren Edge 1โ€                                                                                                   โ”‚\n",
+       "โ”‚                                                                                                                 โ”‚\n",
+       "โ”‚ Ha Trinh 1โ€                                                                                                      โ”‚\n",
+       "โ”‚                                                                                                                 โ”‚\n",
+       "โ”‚ Newman Cheng 2                                                                                                  โ”‚\n",
+       "โ”‚                                                                                                                 โ”‚\n",
+       "โ”‚ Joshua Bradley 2                                                                                                โ”‚\n",
+       "โ”‚                                                                                                                 โ”‚\n",
+       "โ”‚ Alex Chao 3                                                                                                     โ”‚\n",
+       "โ”‚                                                                                                                 โ”‚\n",
+       "โ”‚ Apurva Mody 3                                                                                                   โ”‚\n",
+       "โ”‚                                                                                                                 โ”‚\n",
+       "โ”‚ Steven Truitt 2                                                                                                 โ”‚\n",
+       "โ”‚                                                                                                                 โ”‚\n",
+       "โ”‚ ## Jonathan Larson 1                                                                                            โ”‚\n",
+       "โ”‚                                                                                                                 โ”‚\n",
+       "โ”‚ 1 Microsoft Research 2 Microsoft Strategic Missions and Technologies 3 Microsoft Office of the CTO              โ”‚\n",
+       "โ”‚                                                                                                                 โ”‚\n",
+       "โ”‚ { daedge,trinhha,newmancheng,joshbradley,achao,moapurva,steventruitt,jolarso } @microsoft.com                   โ”‚\n",
+       "โ”‚                                                                                                                 โ”‚\n",
+       "โ”‚ โ€  These authors contributed equally to this work                                                                โ”‚\n",
+       "โ”‚                                                                                                                 โ”‚\n",
+       "โ”‚ ## Abstract                                                                                                     โ”‚\n",
+       "โ”‚                                                                                                                 โ”‚\n",
+       "โ”‚ The use of retrieval-augmented gen...                                                                           โ”‚\n",
+       "โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ\n",
+       "
\n" + ], + "text/plain": [ + "โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ Docling Markdown Preview โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ\n", + "โ”‚ ## From Local to Global: A Graph RAG Approach to Query-Focused Summarization โ”‚\n", + "โ”‚ โ”‚\n", + "โ”‚ Darren Edge 1โ€  โ”‚\n", + "โ”‚ โ”‚\n", + "โ”‚ Ha Trinh 1โ€  โ”‚\n", + "โ”‚ โ”‚\n", + "โ”‚ Newman Cheng 2 โ”‚\n", + "โ”‚ โ”‚\n", + "โ”‚ Joshua Bradley 2 โ”‚\n", + "โ”‚ โ”‚\n", + "โ”‚ Alex Chao 3 โ”‚\n", + "โ”‚ โ”‚\n", + "โ”‚ Apurva Mody 3 โ”‚\n", + "โ”‚ โ”‚\n", + "โ”‚ Steven Truitt 2 โ”‚\n", + "โ”‚ โ”‚\n", + "โ”‚ ## Jonathan Larson 1 โ”‚\n", + "โ”‚ โ”‚\n", + "โ”‚ 1 Microsoft Research 2 Microsoft Strategic Missions and Technologies 3 Microsoft Office of the CTO โ”‚\n", + "โ”‚ โ”‚\n", + "โ”‚ { daedge,trinhha,newmancheng,joshbradley,achao,moapurva,steventruitt,jolarso } @microsoft.com โ”‚\n", + "โ”‚ โ”‚\n", + "โ”‚ โ€  These authors contributed equally to this work โ”‚\n", + "โ”‚ โ”‚\n", + "โ”‚ ## Abstract โ”‚\n", + "โ”‚ โ”‚\n", + "โ”‚ The use of retrieval-augmented gen... โ”‚\n", + "โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from rich.console import Console\n", + "from rich.panel import Panel\n", + "\n", + "from docling.document_converter import DocumentConverter\n", + "\n", + "console = Console()\n", + "\n", + "# This URL points to the Microsoft GraphRAG Research Paper (arXiv: 2404.16130), ~15 pages\n", + "source_url = \"https://arxiv.org/pdf/2404.16130\"\n", + "\n", + "console.print(\n", + " \"[bold yellow]Parsing a ~15-page PDF. The process should be relatively quick, even on CPU...[/bold yellow]\"\n", + ")\n", + "converter = DocumentConverter()\n", + "result = converter.convert(source_url)\n", + "\n", + "# Optional: preview the parsed Markdown\n", + "md_preview = result.document.export_to_markdown()\n", + "console.print(Panel(md_preview[:500] + \"...\", title=\"Docling Markdown Preview\"))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Part 3: Hierarchical Chunking\n", + "We convert the `Document` into smaller chunks for embedding & indexing. The built-in `HierarchicalChunker` preserves structure. " + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
Total chunks from PDF: 106\n",
+       "
\n" + ], + "text/plain": [ + "Total chunks from PDF: \u001b[1;36m106\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from docling.chunking import HierarchicalChunker\n", + "\n", + "chunker = HierarchicalChunker()\n", + "doc_chunks = list(chunker.chunk(result.document))\n", + "\n", + "all_chunks = []\n", + "for idx, c in enumerate(doc_chunks):\n", + " chunk_text = c.text\n", + " all_chunks.append((f\"chunk_{idx}\", chunk_text))\n", + "\n", + "console.print(f\"Total chunks from PDF: {len(all_chunks)}\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Part 3: Create Azure Search Index and Push Chunk Embeddings\n", + "Weโ€™ll define a vector index in Azure AI Search, then embed each chunk using Azure OpenAI and upload in batches." + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
Index 'docling-rag-sample-2' created.\n",
+       "
\n" + ], + "text/plain": [ + "Index \u001b[32m'docling-rag-sample-2'\u001b[0m created.\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from azure.core.credentials import AzureKeyCredential\n", + "from azure.search.documents.indexes import SearchIndexClient\n", + "from azure.search.documents.indexes.models import (\n", + " AzureOpenAIVectorizer,\n", + " AzureOpenAIVectorizerParameters,\n", + " HnswAlgorithmConfiguration,\n", + " SearchableField,\n", + " SearchField,\n", + " SearchFieldDataType,\n", + " SearchIndex,\n", + " SimpleField,\n", + " VectorSearch,\n", + " VectorSearchProfile,\n", + ")\n", + "from rich.console import Console\n", + "\n", + "console = Console()\n", + "\n", + "VECTOR_DIM = 1536 # Adjust based on your chosen embeddings model\n", + "\n", + "index_client = SearchIndexClient(\n", + " AZURE_SEARCH_ENDPOINT, AzureKeyCredential(AZURE_SEARCH_KEY)\n", + ")\n", + "\n", + "\n", + "def create_search_index(index_name: str):\n", + " # Define fields\n", + " fields = [\n", + " SimpleField(name=\"chunk_id\", type=SearchFieldDataType.String, key=True),\n", + " SearchableField(name=\"content\", type=SearchFieldDataType.String),\n", + " SearchField(\n", + " name=\"content_vector\",\n", + " type=SearchFieldDataType.Collection(SearchFieldDataType.Single),\n", + " searchable=True,\n", + " filterable=False,\n", + " sortable=False,\n", + " facetable=False,\n", + " vector_search_dimensions=VECTOR_DIM,\n", + " vector_search_profile_name=\"default\",\n", + " ),\n", + " ]\n", + " # Vector search config with an AzureOpenAIVectorizer\n", + " vector_search = VectorSearch(\n", + " algorithms=[HnswAlgorithmConfiguration(name=\"default\")],\n", + " profiles=[\n", + " VectorSearchProfile(\n", + " name=\"default\",\n", + " algorithm_configuration_name=\"default\",\n", + " vectorizer_name=\"default\",\n", + " )\n", + " ],\n", + " vectorizers=[\n", + " AzureOpenAIVectorizer(\n", + " vectorizer_name=\"default\",\n", + " parameters=AzureOpenAIVectorizerParameters(\n", + " resource_url=AZURE_OPENAI_ENDPOINT,\n", + " deployment_name=AZURE_OPENAI_EMBEDDINGS,\n", + " model_name=\"text-embedding-3-small\",\n", + " api_key=AZURE_OPENAI_API_KEY,\n", + " ),\n", + " )\n", + " ],\n", + " )\n", + "\n", + " # Create or update the index\n", + " new_index = SearchIndex(name=index_name, fields=fields, vector_search=vector_search)\n", + " try:\n", + " index_client.delete_index(index_name)\n", + " except:\n", + " pass\n", + "\n", + " index_client.create_or_update_index(new_index)\n", + " console.print(f\"Index '{index_name}' created.\")\n", + "\n", + "\n", + "create_search_index(AZURE_SEARCH_INDEX_NAME)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Embed and Upsert to Azure AI Search\n" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
Uploaded batch 0 -> 50; all_succeeded: True, first_doc_status_code: 201\n",
+       "
\n" + ], + "text/plain": [ + "Uploaded batch \u001b[1;36m0\u001b[0m -> \u001b[1;36m50\u001b[0m; all_succeeded: \u001b[3;92mTrue\u001b[0m, first_doc_status_code: \u001b[1;36m201\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
Uploaded batch 50 -> 100; all_succeeded: True, first_doc_status_code: 201\n",
+       "
\n" + ], + "text/plain": [ + "Uploaded batch \u001b[1;36m50\u001b[0m -> \u001b[1;36m100\u001b[0m; all_succeeded: \u001b[3;92mTrue\u001b[0m, first_doc_status_code: \u001b[1;36m201\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
Uploaded batch 100 -> 106; all_succeeded: True, first_doc_status_code: 201\n",
+       "
\n" + ], + "text/plain": [ + "Uploaded batch \u001b[1;36m100\u001b[0m -> \u001b[1;36m106\u001b[0m; all_succeeded: \u001b[3;92mTrue\u001b[0m, first_doc_status_code: \u001b[1;36m201\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
All chunks uploaded to Azure Search.\n",
+       "
\n" + ], + "text/plain": [ + "All chunks uploaded to Azure Search.\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from azure.search.documents import SearchClient\n", + "from openai import AzureOpenAI\n", + "\n", + "search_client = SearchClient(\n", + " AZURE_SEARCH_ENDPOINT, AZURE_SEARCH_INDEX_NAME, AzureKeyCredential(AZURE_SEARCH_KEY)\n", + ")\n", + "openai_client = AzureOpenAI(\n", + " api_key=AZURE_OPENAI_API_KEY,\n", + " api_version=AZURE_OPENAI_API_VERSION,\n", + " azure_endpoint=AZURE_OPENAI_ENDPOINT,\n", + ")\n", + "\n", + "\n", + "def embed_text(text: str):\n", + " \"\"\"\n", + " Helper to generate embeddings with Azure OpenAI.\n", + " \"\"\"\n", + " response = openai_client.embeddings.create(\n", + " input=text, model=AZURE_OPENAI_EMBEDDINGS\n", + " )\n", + " return response.data[0].embedding\n", + "\n", + "\n", + "upload_docs = []\n", + "for chunk_id, chunk_text in all_chunks:\n", + " embedding_vector = embed_text(chunk_text)\n", + " upload_docs.append(\n", + " {\n", + " \"chunk_id\": chunk_id,\n", + " \"content\": chunk_text,\n", + " \"content_vector\": embedding_vector,\n", + " }\n", + " )\n", + "\n", + "\n", + "BATCH_SIZE = 50\n", + "for i in range(0, len(upload_docs), BATCH_SIZE):\n", + " subset = upload_docs[i : i + BATCH_SIZE]\n", + " resp = search_client.upload_documents(documents=subset)\n", + "\n", + " all_succeeded = all(r.succeeded for r in resp)\n", + " console.print(\n", + " f\"Uploaded batch {i} -> {i+len(subset)}; all_succeeded: {all_succeeded}, \"\n", + " f\"first_doc_status_code: {resp[0].status_code}\"\n", + " )\n", + "\n", + "console.print(\"All chunks uploaded to Azure Search.\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Part 4: RAG Query with Azure OpenAI\n", + "Combine retrieval from Azure Search with Chat Completions (aka. grounding your LLM)" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ RAG Prompt โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ\n",
+       "โ”‚                                                                                                                 โ”‚\n",
+       "โ”‚ You are an AI assistant helping answering questions about Microsoft GraphRAG.                                   โ”‚\n",
+       "โ”‚ Use ONLY the text below to answer the user's question.                                                          โ”‚\n",
+       "โ”‚ If the answer isn't in the text, say you don't know.                                                            โ”‚\n",
+       "โ”‚                                                                                                                 โ”‚\n",
+       "โ”‚ Context:                                                                                                        โ”‚\n",
+       "โ”‚ Community summaries vs. source texts. When comparing community summaries to source texts using Graph RAG,       โ”‚\n",
+       "โ”‚ community summaries generally provided a small but consistent improvement in answer comprehensiveness and       โ”‚\n",
+       "โ”‚ diversity, except for root-level summaries. Intermediate-level summaries in the Podcast dataset and low-level   โ”‚\n",
+       "โ”‚ community summaries in the News dataset achieved comprehensiveness win rates of 57% and 64%, respectively.      โ”‚\n",
+       "โ”‚ Diversity win rates were 57% for Podcast intermediate-level summaries and 60% for News low-level community      โ”‚\n",
+       "โ”‚ summaries. Table 3 also illustrates the scalability advantages of Graph RAG compared to source text             โ”‚\n",
+       "โ”‚ summarization: for low-level community summaries ( C3 ), Graph RAG required 26-33% fewer context tokens, while  โ”‚\n",
+       "โ”‚ for root-level community summaries ( C0 ), it required over 97% fewer tokens. For a modest drop in performance  โ”‚\n",
+       "โ”‚ compared with other global methods, root-level Graph RAG offers a highly efficient method for the iterative     โ”‚\n",
+       "โ”‚ question answering that characterizes sensemaking activity, while retaining advantages in comprehensiveness     โ”‚\n",
+       "โ”‚ (72% win rate) and diversity (62% win rate) over naยจฤฑve RAG.                                                    โ”‚\n",
+       "โ”‚ ---                                                                                                             โ”‚\n",
+       "โ”‚ We have presented a global approach to Graph RAG, combining knowledge graph generation, retrieval-augmented     โ”‚\n",
+       "โ”‚ generation (RAG), and query-focused summarization (QFS) to support human sensemaking over entire text corpora.  โ”‚\n",
+       "โ”‚ Initial evaluations show substantial improvements over a naยจฤฑve RAG baseline for both the comprehensiveness and โ”‚\n",
+       "โ”‚ diversity of answers, as well as favorable comparisons to a global but graph-free approach using map-reduce     โ”‚\n",
+       "โ”‚ source text summarization. For situations requiring many global queries over the same dataset, summaries of     โ”‚\n",
+       "โ”‚ root-level communities in the entity-based graph index provide a data index that is both superior to naยจฤฑve RAG โ”‚\n",
+       "โ”‚ and achieves competitive performance to other global methods at a fraction of the token cost.                   โ”‚\n",
+       "โ”‚ ---                                                                                                             โ”‚\n",
+       "โ”‚ Trade-offs of building a graph index . We consistently observed Graph RAG achieve the best headto-head results  โ”‚\n",
+       "โ”‚ against other methods, but in many cases the graph-free approach to global summarization of source texts        โ”‚\n",
+       "โ”‚ performed competitively. The real-world decision about whether to invest in building a graph index depends on   โ”‚\n",
+       "โ”‚ multiple factors, including the compute budget, expected number of lifetime queries per dataset, and value      โ”‚\n",
+       "โ”‚ obtained from other aspects of the graph index (including the generic community summaries and the use of other  โ”‚\n",
+       "โ”‚ graph-related RAG approaches).                                                                                  โ”‚\n",
+       "โ”‚ ---                                                                                                             โ”‚\n",
+       "โ”‚ Future work . The graph index, rich text annotations, and hierarchical community structure supporting the       โ”‚\n",
+       "โ”‚ current Graph RAG approach offer many possibilities for refinement and adaptation. This includes RAG approaches โ”‚\n",
+       "โ”‚ that operate in a more local manner, via embedding-based matching of user queries and graph annotations, as     โ”‚\n",
+       "โ”‚ well as the possibility of hybrid RAG schemes that combine embedding-based matching against community reports   โ”‚\n",
+       "โ”‚ before employing our map-reduce summarization mechanisms. This 'roll-up' operation could also be extended       โ”‚\n",
+       "โ”‚ across more levels of the community hierarchy, as well as implemented as a more exploratory 'drill down'        โ”‚\n",
+       "โ”‚ mechanism that follows the information scent contained in higher-level community summaries.                     โ”‚\n",
+       "โ”‚ ---                                                                                                             โ”‚\n",
+       "โ”‚ Advanced RAG systems include pre-retrieval, retrieval, post-retrieval strategies designed to overcome the       โ”‚\n",
+       "โ”‚ drawbacks of Naยจฤฑve RAG, while Modular RAG systems include patterns for iterative and dynamic cycles of         โ”‚\n",
+       "โ”‚ interleaved retrieval and generation (Gao et al., 2023). Our implementation of Graph RAG incorporates multiple  โ”‚\n",
+       "โ”‚ concepts related to other systems. For example, our community summaries are a kind of self-memory (Selfmem,     โ”‚\n",
+       "โ”‚ Cheng et al., 2024) for generation-augmented retrieval (GAR, Mao et al., 2020) that facilitates future          โ”‚\n",
+       "โ”‚ generation cycles, while our parallel generation of community answers from these summaries is a kind of         โ”‚\n",
+       "โ”‚ iterative (Iter-RetGen, Shao et al., 2023) or federated (FeB4RAG, Wang et al., 2024) retrieval-generation       โ”‚\n",
+       "โ”‚ strategy. Other systems have also combined these concepts for multi-document summarization (CAiRE-COVID, Su et  โ”‚\n",
+       "โ”‚ al., 2020) and multi-hop question answering (ITRG, Feng et al., 2023; IR-CoT, Trivedi et al., 2022; DSP,        โ”‚\n",
+       "โ”‚ Khattab et al., 2022). Our use of a hierarchical index and summarization also bears resemblance to further      โ”‚\n",
+       "โ”‚ approaches, such as generating a hierarchical index of text chunks by clustering the vectors of text embeddings โ”‚\n",
+       "โ”‚ (RAPTOR, Sarthi et al., 2024) or generating a 'tree of clarifications' to answer multiple interpretations of    โ”‚\n",
+       "โ”‚ ambiguous questions (Kim et al., 2023). However, none of these iterative or hierarchical approaches use the     โ”‚\n",
+       "โ”‚ kind of self-generated graph index that enables Graph RAG.                                                      โ”‚\n",
+       "โ”‚ ---                                                                                                             โ”‚\n",
+       "โ”‚ The use of retrieval-augmented generation (RAG) to retrieve relevant information from an external knowledge     โ”‚\n",
+       "โ”‚ source enables large language models (LLMs) to answer questions over private and/or previously unseen document  โ”‚\n",
+       "โ”‚ collections. However, RAG fails on global questions directed at an entire text corpus, such as 'What are the    โ”‚\n",
+       "โ”‚ main themes in the dataset?', since this is inherently a queryfocused summarization (QFS) task, rather than an  โ”‚\n",
+       "โ”‚ explicit retrieval task. Prior QFS methods, meanwhile, fail to scale to the quantities of text indexed by       โ”‚\n",
+       "โ”‚ typical RAGsystems. To combine the strengths of these contrasting methods, we propose a Graph RAG approach to   โ”‚\n",
+       "โ”‚ question answering over private text corpora that scales with both the generality of user questions and the     โ”‚\n",
+       "โ”‚ quantity of source text to be indexed. Our approach uses an LLM to build a graph-based text index in two        โ”‚\n",
+       "โ”‚ stages: first to derive an entity knowledge graph from the source documents, then to pregenerate community      โ”‚\n",
+       "โ”‚ summaries for all groups of closely-related entities. Given a question, each community summary is used to       โ”‚\n",
+       "โ”‚ generate a partial response, before all partial responses are again summarized in a final response to the user. โ”‚\n",
+       "โ”‚ For a class of global sensemaking questions over datasets in the 1 million token range, we show that Graph RAG  โ”‚\n",
+       "โ”‚ leads to substantial improvements over a naยจฤฑve RAG baseline for both the comprehensiveness and diversity of    โ”‚\n",
+       "โ”‚ generated answers. An open-source, Python-based implementation of both global and local Graph RAG approaches is โ”‚\n",
+       "โ”‚ forthcoming at https://aka . ms/graphrag .                                                                      โ”‚\n",
+       "โ”‚ ---                                                                                                             โ”‚\n",
+       "โ”‚ Given the multi-stage nature of our Graph RAG mechanism, the multiple conditions we wanted to compare, and the  โ”‚\n",
+       "โ”‚ lack of gold standard answers to our activity-based sensemaking questions, we decided to adopt a head-to-head   โ”‚\n",
+       "โ”‚ comparison approach using an LLM evaluator. We selected three target metrics capturing qualities that are       โ”‚\n",
+       "โ”‚ desirable for sensemaking activities, as well as a control metric (directness) used as a indicator of validity. โ”‚\n",
+       "โ”‚ Since directness is effectively in opposition to comprehensiveness and diversity, we would not expect any       โ”‚\n",
+       "โ”‚ method to win across all four metrics.                                                                          โ”‚\n",
+       "โ”‚ ---                                                                                                             โ”‚\n",
+       "โ”‚ Figure 1: Graph RAG pipeline using an LLM-derived graph index of source document text. This index spans nodes   โ”‚\n",
+       "โ”‚ (e.g., entities), edges (e.g., relationships), and covariates (e.g., claims) that have been detected,           โ”‚\n",
+       "โ”‚ extracted, and summarized by LLM prompts tailored to the domain of the dataset. Community detection (e.g.,      โ”‚\n",
+       "โ”‚ Leiden, Traag et al., 2019) is used to partition the graph index into groups of elements (nodes, edges,         โ”‚\n",
+       "โ”‚ covariates) that the LLM can summarize in parallel at both indexing time and query time. The 'global answer' to โ”‚\n",
+       "โ”‚ a given query is produced using a final round of query-focused summarization over all community summaries       โ”‚\n",
+       "โ”‚ reporting relevance to that query.                                                                              โ”‚\n",
+       "โ”‚ ---                                                                                                             โ”‚\n",
+       "โ”‚ Retrieval-augmented generation (RAG, Lewis et al., 2020) is an established approach to answering user questions โ”‚\n",
+       "โ”‚ over entire datasets, but it is designed for situations where these answers are contained locally within        โ”‚\n",
+       "โ”‚ regions of text whose retrieval provides sufficient grounding for the generation task. Instead, a more          โ”‚\n",
+       "โ”‚ appropriate task framing is query-focused summarization (QFS, Dang, 2006), and in particular, query-focused     โ”‚\n",
+       "โ”‚ abstractive summarization that generates natural language summaries and not just concatenated excerpts (Baumel  โ”‚\n",
+       "โ”‚ et al., 2018; Laskar et al., 2020; Yao et al., 2017) . In recent years, however, such distinctions between      โ”‚\n",
+       "โ”‚ summarization tasks that are abstractive versus extractive, generic versus query-focused, and single-document   โ”‚\n",
+       "โ”‚ versus multi-document, have become less relevant. While early applications of the transformer architecture      โ”‚\n",
+       "โ”‚ showed substantial improvements on the state-of-the-art for all such summarization tasks (Goodwin et al., 2020; โ”‚\n",
+       "โ”‚ Laskar et al., 2022; Liu and Lapata, 2019), these tasks are now trivialized by modern LLMs, including the GPT   โ”‚\n",
+       "โ”‚ (Achiam et al., 2023; Brown et al., 2020), Llama (Touvron et al., 2023), and Gemini (Anil et al., 2023) series, โ”‚\n",
+       "โ”‚ all of which can use in-context learning to summarize any content provided in their context window.             โ”‚\n",
+       "โ”‚ ---                                                                                                             โ”‚\n",
+       "โ”‚ community descriptions provide complete coverage of the underlying graph index and the input documents it       โ”‚\n",
+       "โ”‚ represents. Query-focused summarization of an entire corpus is then made possible using a map-reduce approach:  โ”‚\n",
+       "โ”‚ first using each community summary to answer the query independently and in parallel, then summarizing all      โ”‚\n",
+       "โ”‚ relevant partial answers into a final global answer.                                                            โ”‚\n",
+       "โ”‚                                                                                                                 โ”‚\n",
+       "โ”‚ Question: What are the main advantages of using the Graph RAG approach for query-focused summarization compared โ”‚\n",
+       "โ”‚ to traditional RAG methods?                                                                                     โ”‚\n",
+       "โ”‚ Answer:                                                                                                         โ”‚\n",
+       "โ”‚                                                                                                                 โ”‚\n",
+       "โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[1;31mโ•ญโ”€\u001b[0m\u001b[1;31mโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\u001b[0m RAG Prompt \u001b[1;31mโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\u001b[0m\u001b[1;31mโ”€โ•ฎ\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mYou are an AI assistant helping answering questions about Microsoft GraphRAG.\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mUse ONLY the text below to answer the user's question.\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mIf the answer isn't in the text, say you don't know.\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mContext:\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mCommunity summaries vs. source texts. When comparing community summaries to source texts using Graph RAG, \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mcommunity summaries generally provided a small but consistent improvement in answer comprehensiveness and \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mdiversity, except for root-level summaries. Intermediate-level summaries in the Podcast dataset and low-level \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mcommunity summaries in the News dataset achieved comprehensiveness win rates of 57% and 64%, respectively. \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mDiversity win rates were 57% for Podcast intermediate-level summaries and 60% for News low-level community \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31msummaries. Table 3 also illustrates the scalability advantages of Graph RAG compared to source text \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31msummarization: for low-level community summaries ( C3 ), Graph RAG required 26-33% fewer context tokens, while \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mfor root-level community summaries ( C0 ), it required over 97% fewer tokens. For a modest drop in performance \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mcompared with other global methods, root-level Graph RAG offers a highly efficient method for the iterative \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mquestion answering that characterizes sensemaking activity, while retaining advantages in comprehensiveness \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m(72% win rate) and diversity (62% win rate) over naยจฤฑve RAG.\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m---\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mWe have presented a global approach to Graph RAG, combining knowledge graph generation, retrieval-augmented \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mgeneration (RAG), and query-focused summarization (QFS) to support human sensemaking over entire text corpora. \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mInitial evaluations show substantial improvements over a naยจฤฑve RAG baseline for both the comprehensiveness and\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mdiversity of answers, as well as favorable comparisons to a global but graph-free approach using map-reduce \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31msource text summarization. For situations requiring many global queries over the same dataset, summaries of \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mroot-level communities in the entity-based graph index provide a data index that is both superior to naยจฤฑve RAG\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mand achieves competitive performance to other global methods at a fraction of the token cost.\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m---\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mTrade-offs of building a graph index . We consistently observed Graph RAG achieve the best headto-head results \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31magainst other methods, but in many cases the graph-free approach to global summarization of source texts \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mperformed competitively. The real-world decision about whether to invest in building a graph index depends on \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mmultiple factors, including the compute budget, expected number of lifetime queries per dataset, and value \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mobtained from other aspects of the graph index (including the generic community summaries and the use of other \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mgraph-related RAG approaches).\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m---\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mFuture work . The graph index, rich text annotations, and hierarchical community structure supporting the \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mcurrent Graph RAG approach offer many possibilities for refinement and adaptation. This includes RAG approaches\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mthat operate in a more local manner, via embedding-based matching of user queries and graph annotations, as \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mwell as the possibility of hybrid RAG schemes that combine embedding-based matching against community reports \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mbefore employing our map-reduce summarization mechanisms. This 'roll-up' operation could also be extended \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31macross more levels of the community hierarchy, as well as implemented as a more exploratory 'drill down' \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mmechanism that follows the information scent contained in higher-level community summaries.\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m---\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mAdvanced RAG systems include pre-retrieval, retrieval, post-retrieval strategies designed to overcome the \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mdrawbacks of Naยจฤฑve RAG, while Modular RAG systems include patterns for iterative and dynamic cycles of \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31minterleaved retrieval and generation (Gao et al., 2023). Our implementation of Graph RAG incorporates multiple \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mconcepts related to other systems. For example, our community summaries are a kind of self-memory (Selfmem, \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mCheng et al., 2024) for generation-augmented retrieval (GAR, Mao et al., 2020) that facilitates future \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mgeneration cycles, while our parallel generation of community answers from these summaries is a kind of \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31miterative (Iter-RetGen, Shao et al., 2023) or federated (FeB4RAG, Wang et al., 2024) retrieval-generation \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mstrategy. Other systems have also combined these concepts for multi-document summarization (CAiRE-COVID, Su et \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mal., 2020) and multi-hop question answering (ITRG, Feng et al., 2023; IR-CoT, Trivedi et al., 2022; DSP, \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mKhattab et al., 2022). Our use of a hierarchical index and summarization also bears resemblance to further \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mapproaches, such as generating a hierarchical index of text chunks by clustering the vectors of text embeddings\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m(RAPTOR, Sarthi et al., 2024) or generating a 'tree of clarifications' to answer multiple interpretations of \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mambiguous questions (Kim et al., 2023). However, none of these iterative or hierarchical approaches use the \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mkind of self-generated graph index that enables Graph RAG.\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m---\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mThe use of retrieval-augmented generation (RAG) to retrieve relevant information from an external knowledge \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31msource enables large language models (LLMs) to answer questions over private and/or previously unseen document \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mcollections. However, RAG fails on global questions directed at an entire text corpus, such as 'What are the \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mmain themes in the dataset?', since this is inherently a queryfocused summarization (QFS) task, rather than an \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mexplicit retrieval task. Prior QFS methods, meanwhile, fail to scale to the quantities of text indexed by \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mtypical RAGsystems. To combine the strengths of these contrasting methods, we propose a Graph RAG approach to \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mquestion answering over private text corpora that scales with both the generality of user questions and the \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mquantity of source text to be indexed. Our approach uses an LLM to build a graph-based text index in two \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mstages: first to derive an entity knowledge graph from the source documents, then to pregenerate community \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31msummaries for all groups of closely-related entities. Given a question, each community summary is used to \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mgenerate a partial response, before all partial responses are again summarized in a final response to the user.\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mFor a class of global sensemaking questions over datasets in the 1 million token range, we show that Graph RAG \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mleads to substantial improvements over a naยจฤฑve RAG baseline for both the comprehensiveness and diversity of \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mgenerated answers. An open-source, Python-based implementation of both global and local Graph RAG approaches is\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mforthcoming at https://aka . ms/graphrag .\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m---\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mGiven the multi-stage nature of our Graph RAG mechanism, the multiple conditions we wanted to compare, and the \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mlack of gold standard answers to our activity-based sensemaking questions, we decided to adopt a head-to-head \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mcomparison approach using an LLM evaluator. We selected three target metrics capturing qualities that are \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mdesirable for sensemaking activities, as well as a control metric (directness) used as a indicator of validity.\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mSince directness is effectively in opposition to comprehensiveness and diversity, we would not expect any \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mmethod to win across all four metrics.\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m---\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mFigure 1: Graph RAG pipeline using an LLM-derived graph index of source document text. This index spans nodes \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m(e.g., entities), edges (e.g., relationships), and covariates (e.g., claims) that have been detected, \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mextracted, and summarized by LLM prompts tailored to the domain of the dataset. Community detection (e.g., \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mLeiden, Traag et al., 2019) is used to partition the graph index into groups of elements (nodes, edges, \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mcovariates) that the LLM can summarize in parallel at both indexing time and query time. The 'global answer' to\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31ma given query is produced using a final round of query-focused summarization over all community summaries \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mreporting relevance to that query.\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m---\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mRetrieval-augmented generation (RAG, Lewis et al., 2020) is an established approach to answering user questions\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mover entire datasets, but it is designed for situations where these answers are contained locally within \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mregions of text whose retrieval provides sufficient grounding for the generation task. Instead, a more \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mappropriate task framing is query-focused summarization (QFS, Dang, 2006), and in particular, query-focused \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mabstractive summarization that generates natural language summaries and not just concatenated excerpts (Baumel \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31met al., 2018; Laskar et al., 2020; Yao et al., 2017) . In recent years, however, such distinctions between \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31msummarization tasks that are abstractive versus extractive, generic versus query-focused, and single-document \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mversus multi-document, have become less relevant. While early applications of the transformer architecture \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mshowed substantial improvements on the state-of-the-art for all such summarization tasks (Goodwin et al., 2020;\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mLaskar et al., 2022; Liu and Lapata, 2019), these tasks are now trivialized by modern LLMs, including the GPT \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m(Achiam et al., 2023; Brown et al., 2020), Llama (Touvron et al., 2023), and Gemini (Anil et al., 2023) series,\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mall of which can use in-context learning to summarize any content provided in their context window.\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m---\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mcommunity descriptions provide complete coverage of the underlying graph index and the input documents it \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mrepresents. Query-focused summarization of an entire corpus is then made possible using a map-reduce approach: \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mfirst using each community summary to answer the query independently and in parallel, then summarizing all \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mrelevant partial answers into a final global answer.\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mQuestion: What are the main advantages of using the Graph RAG approach for query-focused summarization compared\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mto traditional RAG methods?\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mAnswer:\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31m \u001b[0m\u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ RAG Response โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ\n",
+       "โ”‚ The main advantages of using the Graph RAG approach for query-focused summarization compared to traditional RAG โ”‚\n",
+       "โ”‚ methods include:                                                                                                โ”‚\n",
+       "โ”‚                                                                                                                 โ”‚\n",
+       "โ”‚ 1. **Improved Comprehensiveness and Diversity**: Graph RAG shows substantial improvements over a naรฏve RAG      โ”‚\n",
+       "โ”‚ baseline in terms of the comprehensiveness and diversity of answers. This is particularly beneficial for global โ”‚\n",
+       "โ”‚ sensemaking questions over large datasets.                                                                      โ”‚\n",
+       "โ”‚                                                                                                                 โ”‚\n",
+       "โ”‚ 2. **Scalability**: Graph RAG provides scalability advantages, achieving efficient summarization with           โ”‚\n",
+       "โ”‚ significantly fewer context tokens required. For instance, it requires 26-33% fewer tokens for low-level        โ”‚\n",
+       "โ”‚ community summaries and over 97% fewer tokens for root-level summaries compared to source text summarization.   โ”‚\n",
+       "โ”‚                                                                                                                 โ”‚\n",
+       "โ”‚ 3. **Efficiency in Iterative Question Answering**: Root-level Graph RAG offers a highly efficient method for    โ”‚\n",
+       "โ”‚ iterative question answering, which is crucial for sensemaking activities, with only a modest drop in           โ”‚\n",
+       "โ”‚ performance compared to other global methods.                                                                   โ”‚\n",
+       "โ”‚                                                                                                                 โ”‚\n",
+       "โ”‚ 4. **Global Query Handling**: It supports handling global queries effectively, as it combines knowledge graph   โ”‚\n",
+       "โ”‚ generation, retrieval-augmented generation, and query-focused summarization, making it suitable for sensemaking โ”‚\n",
+       "โ”‚ over entire text corpora.                                                                                       โ”‚\n",
+       "โ”‚                                                                                                                 โ”‚\n",
+       "โ”‚ 5. **Hierarchical Indexing and Summarization**: The use of a hierarchical index and summarization allows for    โ”‚\n",
+       "โ”‚ efficient processing and summarizing of community summaries into a final global answer, facilitating a          โ”‚\n",
+       "โ”‚ comprehensive coverage of the underlying graph index and input documents.                                       โ”‚\n",
+       "โ”‚                                                                                                                 โ”‚\n",
+       "โ”‚ 6. **Reduced Token Cost**: For situations requiring many global queries over the same dataset, Graph RAG        โ”‚\n",
+       "โ”‚ achieves competitive performance to other global methods at a fraction of the token cost.                       โ”‚\n",
+       "โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[1;32mโ•ญโ”€\u001b[0m\u001b[1;32mโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\u001b[0m RAG Response \u001b[1;32mโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\u001b[0m\u001b[1;32mโ”€โ•ฎ\u001b[0m\n", + "\u001b[1;32mโ”‚\u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32mThe main advantages of using the Graph RAG approach for query-focused summarization compared to traditional RAG\u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32mโ”‚\u001b[0m\n", + "\u001b[1;32mโ”‚\u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32mmethods include:\u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32mโ”‚\u001b[0m\n", + "\u001b[1;32mโ”‚\u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32mโ”‚\u001b[0m\n", + "\u001b[1;32mโ”‚\u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32m1. **Improved Comprehensiveness and Diversity**: Graph RAG shows substantial improvements over a naรฏve RAG \u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32mโ”‚\u001b[0m\n", + "\u001b[1;32mโ”‚\u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32mbaseline in terms of the comprehensiveness and diversity of answers. This is particularly beneficial for global\u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32mโ”‚\u001b[0m\n", + "\u001b[1;32mโ”‚\u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32msensemaking questions over large datasets.\u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32mโ”‚\u001b[0m\n", + "\u001b[1;32mโ”‚\u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32mโ”‚\u001b[0m\n", + "\u001b[1;32mโ”‚\u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32m2. **Scalability**: Graph RAG provides scalability advantages, achieving efficient summarization with \u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32mโ”‚\u001b[0m\n", + "\u001b[1;32mโ”‚\u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32msignificantly fewer context tokens required. For instance, it requires 26-33% fewer tokens for low-level \u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32mโ”‚\u001b[0m\n", + "\u001b[1;32mโ”‚\u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32mcommunity summaries and over 97% fewer tokens for root-level summaries compared to source text summarization.\u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32mโ”‚\u001b[0m\n", + "\u001b[1;32mโ”‚\u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32mโ”‚\u001b[0m\n", + "\u001b[1;32mโ”‚\u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32m3. **Efficiency in Iterative Question Answering**: Root-level Graph RAG offers a highly efficient method for \u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32mโ”‚\u001b[0m\n", + "\u001b[1;32mโ”‚\u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32miterative question answering, which is crucial for sensemaking activities, with only a modest drop in \u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32mโ”‚\u001b[0m\n", + "\u001b[1;32mโ”‚\u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32mperformance compared to other global methods.\u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32mโ”‚\u001b[0m\n", + "\u001b[1;32mโ”‚\u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32mโ”‚\u001b[0m\n", + "\u001b[1;32mโ”‚\u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32m4. **Global Query Handling**: It supports handling global queries effectively, as it combines knowledge graph \u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32mโ”‚\u001b[0m\n", + "\u001b[1;32mโ”‚\u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32mgeneration, retrieval-augmented generation, and query-focused summarization, making it suitable for sensemaking\u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32mโ”‚\u001b[0m\n", + "\u001b[1;32mโ”‚\u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32mover entire text corpora.\u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32mโ”‚\u001b[0m\n", + "\u001b[1;32mโ”‚\u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32mโ”‚\u001b[0m\n", + "\u001b[1;32mโ”‚\u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32m5. **Hierarchical Indexing and Summarization**: The use of a hierarchical index and summarization allows for \u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32mโ”‚\u001b[0m\n", + "\u001b[1;32mโ”‚\u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32mefficient processing and summarizing of community summaries into a final global answer, facilitating a \u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32mโ”‚\u001b[0m\n", + "\u001b[1;32mโ”‚\u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32mcomprehensive coverage of the underlying graph index and input documents.\u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32mโ”‚\u001b[0m\n", + "\u001b[1;32mโ”‚\u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32mโ”‚\u001b[0m\n", + "\u001b[1;32mโ”‚\u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32m6. **Reduced Token Cost**: For situations requiring many global queries over the same dataset, Graph RAG \u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32mโ”‚\u001b[0m\n", + "\u001b[1;32mโ”‚\u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32machieves competitive performance to other global methods at a fraction of the token cost.\u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32m \u001b[0m\u001b[1;32mโ”‚\u001b[0m\n", + "\u001b[1;32mโ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from azure.search.documents.models import VectorizableTextQuery\n", + "\n", + "\n", + "def generate_chat_response(prompt: str, system_message: str = None):\n", + " \"\"\"\n", + " Generates a single-turn chat response using Azure OpenAI Chat.\n", + " If you need multi-turn conversation or follow-up queries, you'll have to\n", + " maintain the messages list externally.\n", + " \"\"\"\n", + " messages = []\n", + " if system_message:\n", + " messages.append({\"role\": \"system\", \"content\": system_message})\n", + " messages.append({\"role\": \"user\", \"content\": prompt})\n", + "\n", + " completion = openai_client.chat.completions.create(\n", + " model=AZURE_OPENAI_CHAT_MODEL, messages=messages, temperature=0.7\n", + " )\n", + " return completion.choices[0].message.content\n", + "\n", + "\n", + "user_query = \"What are the main advantages of using the Graph RAG approach for query-focused summarization compared to traditional RAG methods?\"\n", + "user_embed = embed_text(user_query)\n", + "\n", + "vector_query = VectorizableTextQuery(\n", + " text=user_query, # passing in text for a hybrid search\n", + " k_nearest_neighbors=5,\n", + " fields=\"content_vector\",\n", + ")\n", + "\n", + "search_results = search_client.search(\n", + " search_text=user_query, vector_queries=[vector_query], select=[\"content\"], top=10\n", + ")\n", + "\n", + "retrieved_chunks = []\n", + "for result in search_results:\n", + " snippet = result[\"content\"]\n", + " retrieved_chunks.append(snippet)\n", + "\n", + "context_str = \"\\n---\\n\".join(retrieved_chunks)\n", + "rag_prompt = f\"\"\"\n", + "You are an AI assistant helping answering questions about Microsoft GraphRAG.\n", + "Use ONLY the text below to answer the user's question.\n", + "If the answer isn't in the text, say you don't know.\n", + "\n", + "Context:\n", + "{context_str}\n", + "\n", + "Question: {user_query}\n", + "Answer:\n", + "\"\"\"\n", + "\n", + "final_answer = generate_chat_response(rag_prompt)\n", + "\n", + "console.print(Panel(rag_prompt, title=\"RAG Prompt\", style=\"bold red\"))\n", + "console.print(Panel(final_answer, title=\"RAG Response\", style=\"bold green\"))" + ] + } + ], + "metadata": { + "accelerator": "GPU", + "colab": { + "gpuType": "T4", + "provenance": [] + }, + "kernelspec": { + "display_name": ".venv", + "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.8" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/mkdocs.yml b/mkdocs.yml index 8f8d86d9..0f3e9dd0 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -76,15 +76,17 @@ nav: - "Multimodal export": examples/export_multimodal.py - "Force full page OCR": examples/full_page_ocr.py - "Accelerator options": examples/run_with_accelerator.py - - "Simple translation": examples/translate.py + - "Simple translation": examples/translate.py - โœ‚๏ธ Chunking: - - "Hybrid chunking": examples/hybrid_chunking.ipynb - - ๐Ÿ’ฌ RAG / QA: + - examples/hybrid_chunking.ipynb + - ๐Ÿค– RAG with AI dev frameworks: - examples/rag_haystack.ipynb - - examples/rag_llamaindex.ipynb - examples/rag_langchain.ipynb + - examples/rag_llamaindex.ipynb + - ๐Ÿ—‚๏ธ More examples: - examples/rag_weaviate.ipynb - RAG with Granite [โ†—]: https://github.com/ibm-granite-community/granite-snack-cookbook/blob/main/recipes/RAG/Granite_Docling_RAG.ipynb + - examples/rag_azuresearch.ipynb - examples/retrieval_qdrant.ipynb - Integrations: - Integrations: integrations/index.md From c58f75d0f75040e32820cc2915ec00755211c02f Mon Sep 17 00:00:00 2001 From: Farzad Sunavala <40604067+farzad528@users.noreply.github.com> Date: Fri, 24 Jan 2025 09:27:05 -0600 Subject: [PATCH 02/12] docs: fix minor typos (#801) Signed-off-by: Farzad Sunavala <40604067+farzad528@users.noreply.github.com> --- docs/examples/rag_azuresearch.ipynb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/examples/rag_azuresearch.ipynb b/docs/examples/rag_azuresearch.ipynb index abbe3774..4350ec2b 100644 --- a/docs/examples/rag_azuresearch.ipynb +++ b/docs/examples/rag_azuresearch.ipynb @@ -63,7 +63,7 @@ "source": [ "# Part 0: Prerequisites\n", " - **Azure AI Search** resource\n", - " - **Azure OpenAI** resource with a deployed embedding & chat completion model (e.g. `text-embedding-3-small` & `gpt-4o`) \n", + " - **Azure OpenAI** resource with a deployed embedding and chat completion model (e.g. `text-embedding-3-small` and `gpt-4o`) \n", " - **Docling 2.12+** (installs `docling_core` automatically) Docling installed (Python 3.8+ environment)\n", "\n", "- A **GPU-enabled environment** is preferred for faster parsing. Docling 2.12 automatically detects GPU if present.\n", @@ -97,7 +97,7 @@ "\n", "\n", "AZURE_SEARCH_ENDPOINT = _get_env(\"AZURE_SEARCH_ENDPOINT\")\n", - "AZURE_SEARCH_KEY = _get_env(\"AZURE_SEARCH_KEY\") # Ensure this your Admin Key\n", + "AZURE_SEARCH_KEY = _get_env(\"AZURE_SEARCH_KEY\") # Ensure this is your Admin Key\n", "AZURE_SEARCH_INDEX_NAME = _get_env(\"AZURE_SEARCH_INDEX_NAME\", \"docling-rag-sample\")\n", "AZURE_OPENAI_ENDPOINT = _get_env(\"AZURE_OPENAI_ENDPOINT\")\n", "AZURE_OPENAI_API_KEY = _get_env(\"AZURE_OPENAI_API_KEY\")\n", @@ -235,8 +235,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Part 3: Hierarchical Chunking\n", - "We convert the `Document` into smaller chunks for embedding & indexing. The built-in `HierarchicalChunker` preserves structure. " + "# Part 2: Hierarchical Chunking\n", + "We convert the `Document` into smaller chunks for embedding and indexing. The built-in `HierarchicalChunker` preserves structure. " ] }, { From 3213b247ad6870ff984271f09f7720be68d9479b Mon Sep 17 00:00:00 2001 From: Matteo <43417658+Matteo-Omenetti@users.noreply.github.com> Date: Fri, 24 Jan 2025 16:54:22 +0100 Subject: [PATCH 03/12] feat: Code and equation model for PDF and code blocks in markdown (#752) * propagated changes for new CodeItem class Signed-off-by: Matteo Omenetti * Rebased branch on latest main. changes for CodeItem Signed-off-by: Matteo Omenetti * removed unused files Signed-off-by: Matteo Omenetti * chore: update lockfile Signed-off-by: Christoph Auer * pin latest docling-core Signed-off-by: Michele Dolfi * update docling-core pinning Signed-off-by: Michele Dolfi * pin docling-core Signed-off-by: Michele Dolfi * use new add_code in backends and update typing in MD backend Signed-off-by: Michele Dolfi * added if statement for backend Signed-off-by: Matteo Omenetti * removed unused import Signed-off-by: Matteo Omenetti * removed print statements Signed-off-by: Matteo Omenetti * gt for new pdf Signed-off-by: Matteo Omenetti * Update docling/pipeline/standard_pdf_pipeline.py Co-authored-by: Michele Dolfi <97102151+dolfim-ibm@users.noreply.github.com> Signed-off-by: Matteo <43417658+Matteo-Omenetti@users.noreply.github.com> * fixed doc comment of __call__ function of code_formula_model Signed-off-by: Matteo Omenetti * fix artifacts_path type Signed-off-by: Michele Dolfi * move imports Signed-off-by: Michele Dolfi * move expansion_factor to base class Signed-off-by: Michele Dolfi --------- Signed-off-by: Matteo Omenetti Signed-off-by: Christoph Auer Signed-off-by: Michele Dolfi Signed-off-by: Matteo <43417658+Matteo-Omenetti@users.noreply.github.com> Co-authored-by: Christoph Auer Co-authored-by: Michele Dolfi Co-authored-by: Michele Dolfi <97102151+dolfim-ibm@users.noreply.github.com> --- docling/backend/asciidoc_backend.py | 1 - docling/backend/html_backend.py | 2 +- docling/backend/md_backend.py | 71 ++- docling/backend/msexcel_backend.py | 1 - docling/backend/msword_backend.py | 1 - docling/backend/pdf_backend.py | 2 - docling/datamodel/pipeline_options.py | 14 +- docling/models/base_model.py | 19 +- docling/models/code_formula_model.py | 245 ++++++++++ docling/models/layout_model.py | 2 +- docling/models/page_assemble_model.py | 25 - docling/models/tesseract_ocr_cli_model.py | 1 - docling/pipeline/base_pipeline.py | 8 +- docling/pipeline/standard_pdf_pipeline.py | 21 +- docling/utils/glm_utils.py | 5 +- docs/examples/develop_picture_enrichment.py | 2 - poetry.lock | 460 +++++++++--------- pyproject.toml | 4 +- tests/data/code_and_formula.pdf | Bin 0 -> 94301 bytes .../docling_v1/code_and_formula.doctags.txt | 13 + .../docling_v1/code_and_formula.json | 1 + .../docling_v1/code_and_formula.md | 19 + .../docling_v1/code_and_formula.pages.json | 1 + .../docling_v2/code_and_formula.doctags.txt | 14 + .../docling_v2/code_and_formula.json | 1 + .../docling_v2/code_and_formula.md | 25 + .../docling_v2/code_and_formula.pages.json | 1 + tests/test_code_formula.py | 66 +++ 28 files changed, 707 insertions(+), 318 deletions(-) create mode 100644 docling/models/code_formula_model.py create mode 100644 tests/data/code_and_formula.pdf create mode 100644 tests/data/groundtruth/docling_v1/code_and_formula.doctags.txt create mode 100644 tests/data/groundtruth/docling_v1/code_and_formula.json create mode 100644 tests/data/groundtruth/docling_v1/code_and_formula.md create mode 100644 tests/data/groundtruth/docling_v1/code_and_formula.pages.json create mode 100644 tests/data/groundtruth/docling_v2/code_and_formula.doctags.txt create mode 100644 tests/data/groundtruth/docling_v2/code_and_formula.json create mode 100644 tests/data/groundtruth/docling_v2/code_and_formula.md create mode 100644 tests/data/groundtruth/docling_v2/code_and_formula.pages.json create mode 100644 tests/test_code_formula.py diff --git a/docling/backend/asciidoc_backend.py b/docling/backend/asciidoc_backend.py index 829419af..397bfc44 100644 --- a/docling/backend/asciidoc_backend.py +++ b/docling/backend/asciidoc_backend.py @@ -24,7 +24,6 @@ class AsciiDocBackend(DeclarativeDocumentBackend): - def __init__(self, in_doc: InputDocument, path_or_stream: Union[BytesIO, Path]): super().__init__(in_doc, path_or_stream) diff --git a/docling/backend/html_backend.py b/docling/backend/html_backend.py index ae478885..66dd4a2c 100644 --- a/docling/backend/html_backend.py +++ b/docling/backend/html_backend.py @@ -215,7 +215,7 @@ def handle_code(self, element, idx, doc): label = DocItemLabel.CODE if len(text) == 0: return - doc.add_text(parent=self.parents[self.level], label=label, text=text) + doc.add_code(parent=self.parents[self.level], label=label, text=text) def handle_paragraph(self, element, idx, doc): """Handles paragraph tags (p).""" diff --git a/docling/backend/md_backend.py b/docling/backend/md_backend.py index 2bcc6d7d..8171085c 100644 --- a/docling/backend/md_backend.py +++ b/docling/backend/md_backend.py @@ -3,19 +3,22 @@ import warnings from io import BytesIO from pathlib import Path -from typing import Set, Union +from typing import List, Optional, Set, Union import marko import marko.ext import marko.ext.gfm import marko.inline from docling_core.types.doc import ( + DocItem, DocItemLabel, DoclingDocument, DocumentOrigin, GroupLabel, + NodeItem, TableCell, TableData, + TextItem, ) from marko import Markdown @@ -27,8 +30,7 @@ class MarkdownDocumentBackend(DeclarativeDocumentBackend): - - def shorten_underscore_sequences(self, markdown_text, max_length=10): + def shorten_underscore_sequences(self, markdown_text: str, max_length: int = 10): # This regex will match any sequence of underscores pattern = r"_+" @@ -90,13 +92,13 @@ def __init__(self, in_doc: "InputDocument", path_or_stream: Union[BytesIO, Path] ) from e return - def close_table(self, doc=None): + def close_table(self, doc: DoclingDocument): if self.in_table: _log.debug("=== TABLE START ===") for md_table_row in self.md_table_buffer: _log.debug(md_table_row) _log.debug("=== TABLE END ===") - tcells = [] + tcells: List[TableCell] = [] result_table = [] for n, md_table_row in enumerate(self.md_table_buffer): data = [] @@ -137,15 +139,19 @@ def close_table(self, doc=None): self.in_table = False self.md_table_buffer = [] # clean table markdown buffer # Initialize Docling TableData - data = TableData(num_rows=num_rows, num_cols=num_cols, table_cells=tcells) + table_data = TableData( + num_rows=num_rows, num_cols=num_cols, table_cells=tcells + ) # Populate for tcell in tcells: - data.table_cells.append(tcell) + table_data.table_cells.append(tcell) if len(tcells) > 0: - doc.add_table(data=data) + doc.add_table(data=table_data) return - def process_inline_text(self, parent_element, doc=None): + def process_inline_text( + self, parent_element: Optional[NodeItem], doc: DoclingDocument + ): # self.inline_text_buffer += str(text_in) txt = self.inline_text_buffer.strip() if len(txt) > 0: @@ -156,14 +162,20 @@ def process_inline_text(self, parent_element, doc=None): ) self.inline_text_buffer = "" - def iterate_elements(self, element, depth=0, doc=None, parent_element=None): + def iterate_elements( + self, + element: marko.block.Element, + depth: int, + doc: DoclingDocument, + parent_element: Optional[NodeItem] = None, + ): # Iterates over all elements in the AST # Check for different element types and process relevant details if isinstance(element, marko.block.Heading): self.close_table(doc) self.process_inline_text(parent_element, doc) _log.debug( - f" - Heading level {element.level}, content: {element.children[0].children}" + f" - Heading level {element.level}, content: {element.children[0].children}" # type: ignore ) if element.level == 1: doc_label = DocItemLabel.TITLE @@ -172,10 +184,10 @@ def iterate_elements(self, element, depth=0, doc=None, parent_element=None): # Header could have arbitrary inclusion of bold, italic or emphasis, # hence we need to traverse the tree to get full text of a header - strings = [] + strings: List[str] = [] # Define a recursive function to traverse the tree - def traverse(node): + def traverse(node: marko.block.BlockElement): # Check if the node has a "children" attribute if hasattr(node, "children"): # If "children" is a list, continue traversal @@ -209,9 +221,13 @@ def traverse(node): self.process_inline_text(parent_element, doc) _log.debug(" - List item") - snippet_text = str(element.children[0].children[0].children) + snippet_text = str(element.children[0].children[0].children) # type: ignore is_numbered = False - if parent_element.label == GroupLabel.ORDERED_LIST: + if ( + parent_element is not None + and isinstance(parent_element, DocItem) + and parent_element.label == GroupLabel.ORDERED_LIST + ): is_numbered = True doc.add_list_item( enumerated=is_numbered, parent=parent_element, text=snippet_text @@ -221,7 +237,14 @@ def traverse(node): self.close_table(doc) self.process_inline_text(parent_element, doc) _log.debug(f" - Image with alt: {element.title}, url: {element.dest}") - doc.add_picture(parent=parent_element, caption=element.title) + + fig_caption: Optional[TextItem] = None + if element.title is not None and element.title != "": + fig_caption = doc.add_text( + label=DocItemLabel.CAPTION, text=element.title + ) + + doc.add_picture(parent=parent_element, caption=fig_caption) elif isinstance(element, marko.block.Paragraph): self.process_inline_text(parent_element, doc) @@ -252,27 +275,21 @@ def traverse(node): self.process_inline_text(parent_element, doc) _log.debug(f" - Code Span: {element.children}") snippet_text = str(element.children).strip() - doc.add_text( - label=DocItemLabel.CODE, parent=parent_element, text=snippet_text - ) + doc.add_code(parent=parent_element, text=snippet_text) elif isinstance(element, marko.block.CodeBlock): self.close_table(doc) self.process_inline_text(parent_element, doc) _log.debug(f" - Code Block: {element.children}") - snippet_text = str(element.children[0].children).strip() - doc.add_text( - label=DocItemLabel.CODE, parent=parent_element, text=snippet_text - ) + snippet_text = str(element.children[0].children).strip() # type: ignore + doc.add_code(parent=parent_element, text=snippet_text) elif isinstance(element, marko.block.FencedCode): self.close_table(doc) self.process_inline_text(parent_element, doc) _log.debug(f" - Code Block: {element.children}") - snippet_text = str(element.children[0].children).strip() - doc.add_text( - label=DocItemLabel.CODE, parent=parent_element, text=snippet_text - ) + snippet_text = str(element.children[0].children).strip() # type: ignore + doc.add_code(parent=parent_element, text=snippet_text) elif isinstance(element, marko.inline.LineBreak): self.process_inline_text(parent_element, doc) diff --git a/docling/backend/msexcel_backend.py b/docling/backend/msexcel_backend.py index 508b0e8d..2d200d75 100644 --- a/docling/backend/msexcel_backend.py +++ b/docling/backend/msexcel_backend.py @@ -44,7 +44,6 @@ class ExcelTable(BaseModel): class MsExcelDocumentBackend(DeclarativeDocumentBackend): - def __init__(self, in_doc: "InputDocument", path_or_stream: Union[BytesIO, Path]): super().__init__(in_doc, path_or_stream) diff --git a/docling/backend/msword_backend.py b/docling/backend/msword_backend.py index f59356e2..f8148d52 100644 --- a/docling/backend/msword_backend.py +++ b/docling/backend/msword_backend.py @@ -26,7 +26,6 @@ class MsWordDocumentBackend(DeclarativeDocumentBackend): - def __init__(self, in_doc: "InputDocument", path_or_stream: Union[BytesIO, Path]): super().__init__(in_doc, path_or_stream) self.XML_KEY = ( diff --git a/docling/backend/pdf_backend.py b/docling/backend/pdf_backend.py index cd7a0815..35c83b8c 100644 --- a/docling/backend/pdf_backend.py +++ b/docling/backend/pdf_backend.py @@ -12,7 +12,6 @@ class PdfPageBackend(ABC): - @abstractmethod def get_text_in_rect(self, bbox: BoundingBox) -> str: pass @@ -45,7 +44,6 @@ def unload(self): class PdfDocumentBackend(PaginatedDocumentBackend): - def __init__(self, in_doc: InputDocument, path_or_stream: Union[BytesIO, Path]): super().__init__(in_doc, path_or_stream) diff --git a/docling/datamodel/pipeline_options.py b/docling/datamodel/pipeline_options.py index eeec6bab..efdf3b1c 100644 --- a/docling/datamodel/pipeline_options.py +++ b/docling/datamodel/pipeline_options.py @@ -1,17 +1,11 @@ import logging import os -import warnings from enum import Enum from pathlib import Path -from typing import Annotated, Any, Dict, List, Literal, Optional, Tuple, Type, Union +from typing import Any, List, Literal, Optional, Union -from pydantic import BaseModel, ConfigDict, Field, field_validator, model_validator -from pydantic_settings import ( - BaseSettings, - PydanticBaseSettingsSource, - SettingsConfigDict, -) -from typing_extensions import deprecated +from pydantic import BaseModel, ConfigDict, Field, model_validator +from pydantic_settings import BaseSettings, SettingsConfigDict _log = logging.getLogger(__name__) @@ -225,6 +219,8 @@ class PdfPipelineOptions(PipelineOptions): artifacts_path: Optional[Union[Path, str]] = None do_table_structure: bool = True # True: perform table structure extraction do_ocr: bool = True # True: perform OCR, replace programmatic PDF text + do_code_enrichment: bool = False # True: perform code OCR + do_formula_enrichment: bool = False # True: perform formula OCR, return Latex code table_structure_options: TableStructureOptions = TableStructureOptions() ocr_options: Union[ diff --git a/docling/models/base_model.py b/docling/models/base_model.py index 5a98382a..08d728cc 100644 --- a/docling/models/base_model.py +++ b/docling/models/base_model.py @@ -1,7 +1,7 @@ from abc import ABC, abstractmethod from typing import Any, Generic, Iterable, Optional -from docling_core.types.doc import DoclingDocument, NodeItem, TextItem +from docling_core.types.doc import BoundingBox, DoclingDocument, NodeItem, TextItem from typing_extensions import TypeVar from docling.datamodel.base_models import ItemAndImageEnrichmentElement, Page @@ -53,6 +53,7 @@ class BaseItemAndImageEnrichmentModel( ): images_scale: float + expansion_factor: float = 0.0 def prepare_element( self, conv_res: ConversionResult, element: NodeItem @@ -62,8 +63,22 @@ def prepare_element( assert isinstance(element, TextItem) element_prov = element.prov[0] + + bbox = element_prov.bbox + width = bbox.r - bbox.l + height = bbox.t - bbox.b + + # TODO: move to a utility in the BoundingBox class + expanded_bbox = BoundingBox( + l=bbox.l - width * self.expansion_factor, + t=bbox.t + height * self.expansion_factor, + r=bbox.r + width * self.expansion_factor, + b=bbox.b - height * self.expansion_factor, + coord_origin=bbox.coord_origin, + ) + page_ix = element_prov.page_no - 1 cropped_image = conv_res.pages[page_ix].get_image( - scale=self.images_scale, cropbox=element_prov.bbox + scale=self.images_scale, cropbox=expanded_bbox ) return ItemAndImageEnrichmentElement(item=element, image=cropped_image) diff --git a/docling/models/code_formula_model.py b/docling/models/code_formula_model.py new file mode 100644 index 00000000..e4d56945 --- /dev/null +++ b/docling/models/code_formula_model.py @@ -0,0 +1,245 @@ +import re +from pathlib import Path +from typing import Iterable, List, Literal, Optional, Tuple, Union + +from docling_core.types.doc import ( + CodeItem, + DocItemLabel, + DoclingDocument, + NodeItem, + TextItem, +) +from docling_core.types.doc.labels import CodeLanguageLabel +from PIL import Image +from pydantic import BaseModel + +from docling.datamodel.base_models import ItemAndImageEnrichmentElement +from docling.datamodel.pipeline_options import AcceleratorOptions +from docling.models.base_model import BaseItemAndImageEnrichmentModel +from docling.utils.accelerator_utils import decide_device + + +class CodeFormulaModelOptions(BaseModel): + """ + Configuration options for the CodeFormulaModel. + + Attributes + ---------- + kind : str + Type of the model. Fixed value "code_formula". + do_code_enrichment : bool + True if code enrichment is enabled, False otherwise. + do_formula_enrichment : bool + True if formula enrichment is enabled, False otherwise. + """ + + kind: Literal["code_formula"] = "code_formula" + do_code_enrichment: bool = True + do_formula_enrichment: bool = True + + +class CodeFormulaModel(BaseItemAndImageEnrichmentModel): + """ + Model for processing and enriching documents with code and formula predictions. + + Attributes + ---------- + enabled : bool + True if the model is enabled, False otherwise. + options : CodeFormulaModelOptions + Configuration options for the CodeFormulaModel. + code_formula_model : CodeFormulaPredictor + The predictor model for code and formula processing. + + Methods + ------- + __init__(self, enabled, artifacts_path, accelerator_options, code_formula_options) + Initializes the CodeFormulaModel with the given configuration options. + is_processable(self, doc, element) + Determines if a given element in a document can be processed by the model. + __call__(self, doc, element_batch) + Processes the given batch of elements and enriches them with predictions. + """ + + images_scale = 1.66 # = 120 dpi, aligned with training data resolution + expansion_factor = 0.03 + + def __init__( + self, + enabled: bool, + artifacts_path: Optional[Union[Path, str]], + options: CodeFormulaModelOptions, + accelerator_options: AcceleratorOptions, + ): + """ + Initializes the CodeFormulaModel with the given configuration. + + Parameters + ---------- + enabled : bool + True if the model is enabled, False otherwise. + artifacts_path : Path + Path to the directory containing the model artifacts. + options : CodeFormulaModelOptions + Configuration options for the model. + accelerator_options : AcceleratorOptions + Options specifying the device and number of threads for acceleration. + """ + self.enabled = enabled + self.options = options + + if self.enabled: + device = decide_device(accelerator_options.device) + + from docling_ibm_models.code_formula_model.code_formula_predictor import ( + CodeFormulaPredictor, + ) + + if artifacts_path is None: + artifacts_path = self.download_models_hf() + else: + artifacts_path = Path(artifacts_path) + + self.code_formula_model = CodeFormulaPredictor( + artifacts_path=artifacts_path, + device=device, + num_threads=accelerator_options.num_threads, + ) + + @staticmethod + def download_models_hf( + local_dir: Optional[Path] = None, force: bool = False + ) -> Path: + from huggingface_hub import snapshot_download + from huggingface_hub.utils import disable_progress_bars + + disable_progress_bars() + download_path = snapshot_download( + repo_id="ds4sd/CodeFormula", + force_download=force, + local_dir=local_dir, + revision="v1.0.0", + ) + + return Path(download_path) + + def is_processable(self, doc: DoclingDocument, element: NodeItem) -> bool: + """ + Determines if a given element in a document can be processed by the model. + + Parameters + ---------- + doc : DoclingDocument + The document being processed. + element : NodeItem + The element within the document to check. + + Returns + ------- + bool + True if the element can be processed, False otherwise. + """ + return self.enabled and ( + (isinstance(element, CodeItem) and self.options.do_code_enrichment) + or ( + isinstance(element, TextItem) + and element.label == DocItemLabel.FORMULA + and self.options.do_formula_enrichment + ) + ) + + def _extract_code_language(self, input_string: str) -> Tuple[str, Optional[str]]: + """Extracts a programming language from the beginning of a string. + + This function checks if the input string starts with a pattern of the form + ``<_some_language_>``. If it does, it extracts the language string and returns + a tuple of (remainder, language). Otherwise, it returns the original string + and `None`. + + Args: + input_string (str): The input string, which may start with ``<_language_>``. + + Returns: + Tuple[str, Optional[str]]: + A tuple where: + - The first element is either: + - The remainder of the string (everything after ``<_language_>``), + if a match is found; or + - The original string, if no match is found. + - The second element is the extracted language if a match is found; + otherwise, `None`. + """ + pattern = r"^<_([^>]+)_>\s*(.*)" + match = re.match(pattern, input_string, flags=re.DOTALL) + if match: + language = str(match.group(1)) # the captured programming language + remainder = str(match.group(2)) # everything after the <_language_> + return remainder, language + else: + return input_string, None + + def _get_code_language_enum(self, value: Optional[str]) -> CodeLanguageLabel: + """ + Converts a string to a corresponding `CodeLanguageLabel` enum member. + + If the provided string does not match any value in `CodeLanguageLabel`, + it defaults to `CodeLanguageLabel.UNKNOWN`. + + Args: + value (Optional[str]): The string representation of the code language or None. + + Returns: + CodeLanguageLabel: The corresponding enum member if the value is valid, + otherwise `CodeLanguageLabel.UNKNOWN`. + """ + if not isinstance(value, str): + return CodeLanguageLabel.UNKNOWN + + try: + return CodeLanguageLabel(value) + except ValueError: + return CodeLanguageLabel.UNKNOWN + + def __call__( + self, + doc: DoclingDocument, + element_batch: Iterable[ItemAndImageEnrichmentElement], + ) -> Iterable[NodeItem]: + """ + Processes the given batch of elements and enriches them with predictions. + + Parameters + ---------- + doc : DoclingDocument + The document being processed. + element_batch : Iterable[ItemAndImageEnrichmentElement] + A batch of elements to be processed. + + Returns + ------- + Iterable[Any] + An iterable of enriched elements. + """ + if not self.enabled: + for element in element_batch: + yield element.item + return + + labels: List[str] = [] + images: List[Image.Image] = [] + elements: List[TextItem] = [] + for el in element_batch: + assert isinstance(el.item, TextItem) + elements.append(el.item) + labels.append(el.item.label) + images.append(el.image) + + outputs = self.code_formula_model.predict(images, labels) + + for item, output in zip(elements, outputs): + if isinstance(item, CodeItem): + output, code_language = self._extract_code_language(output) + item.code_language = self._get_code_language_enum(code_language) + item.text = output + + yield item diff --git a/docling/models/layout_model.py b/docling/models/layout_model.py index c1b7dabe..9fa0ecb4 100644 --- a/docling/models/layout_model.py +++ b/docling/models/layout_model.py @@ -40,7 +40,7 @@ class LayoutModel(BasePageModel): DocItemLabel.PAGE_FOOTER, DocItemLabel.CODE, DocItemLabel.LIST_ITEM, - # "Formula", + DocItemLabel.FORMULA, ] PAGE_HEADER_LABELS = [DocItemLabel.PAGE_HEADER, DocItemLabel.PAGE_FOOTER] diff --git a/docling/models/page_assemble_model.py b/docling/models/page_assemble_model.py index 6239dbfa..4acf8c95 100644 --- a/docling/models/page_assemble_model.py +++ b/docling/models/page_assemble_model.py @@ -135,31 +135,6 @@ def __call__( ) elements.append(fig) body.append(fig) - elif cluster.label == LayoutModel.FORMULA_LABEL: - equation = None - if page.predictions.equations_prediction: - equation = page.predictions.equations_prediction.equation_map.get( - cluster.id, None - ) - if ( - not equation - ): # fallback: add empty formula, if it isn't present - text = self.sanitize_text( - [ - cell.text.replace("\x02", "-").strip() - for cell in cluster.cells - if len(cell.text.strip()) > 0 - ] - ) - equation = TextElement( - label=cluster.label, - id=cluster.id, - cluster=cluster, - page_no=page.page_no, - text=text, - ) - elements.append(equation) - body.append(equation) elif cluster.label in LayoutModel.CONTAINER_LABELS: container_el = ContainerElement( label=cluster.label, diff --git a/docling/models/tesseract_ocr_cli_model.py b/docling/models/tesseract_ocr_cli_model.py index 16e1629d..3d5c8006 100644 --- a/docling/models/tesseract_ocr_cli_model.py +++ b/docling/models/tesseract_ocr_cli_model.py @@ -20,7 +20,6 @@ class TesseractOcrCliModel(BaseOcrModel): - def __init__(self, enabled: bool, options: TesseractCliOcrOptions): super().__init__(enabled=enabled, options=options) self.options: TesseractCliOcrOptions diff --git a/docling/pipeline/base_pipeline.py b/docling/pipeline/base_pipeline.py index 034e6d42..75a08e76 100644 --- a/docling/pipeline/base_pipeline.py +++ b/docling/pipeline/base_pipeline.py @@ -3,7 +3,7 @@ import time import traceback from abc import ABC, abstractmethod -from typing import Callable, Iterable, List +from typing import Any, Callable, Iterable, List from docling_core.types.doc import DoclingDocument, NodeItem @@ -18,7 +18,7 @@ from docling.datamodel.document import ConversionResult, InputDocument from docling.datamodel.pipeline_options import PipelineOptions from docling.datamodel.settings import settings -from docling.models.base_model import BaseEnrichmentModel +from docling.models.base_model import GenericEnrichmentModel from docling.utils.profiling import ProfilingScope, TimeRecorder from docling.utils.utils import chunkify @@ -30,7 +30,7 @@ def __init__(self, pipeline_options: PipelineOptions): self.pipeline_options = pipeline_options self.keep_images = False self.build_pipe: List[Callable] = [] - self.enrichment_pipe: List[BaseEnrichmentModel] = [] + self.enrichment_pipe: List[GenericEnrichmentModel[Any]] = [] def execute(self, in_doc: InputDocument, raises_on_error: bool) -> ConversionResult: conv_res = ConversionResult(input=in_doc) @@ -66,7 +66,7 @@ def _assemble_document(self, conv_res: ConversionResult) -> ConversionResult: def _enrich_document(self, conv_res: ConversionResult) -> ConversionResult: def _prepare_elements( - conv_res: ConversionResult, model: BaseEnrichmentModel + conv_res: ConversionResult, model: GenericEnrichmentModel[Any] ) -> Iterable[NodeItem]: for doc_element, _level in conv_res.document.iterate_items(): prepared_element = model.prepare_element( diff --git a/docling/pipeline/standard_pdf_pipeline.py b/docling/pipeline/standard_pdf_pipeline.py index 758f4e94..97bcc6b6 100644 --- a/docling/pipeline/standard_pdf_pipeline.py +++ b/docling/pipeline/standard_pdf_pipeline.py @@ -1,7 +1,7 @@ import logging import sys from pathlib import Path -from typing import Iterable, Optional +from typing import Optional from docling_core.types.doc import DocItem, ImageRef, PictureItem, TableItem @@ -17,8 +17,8 @@ TesseractCliOcrOptions, TesseractOcrOptions, ) -from docling.models.base_model import BasePageModel from docling.models.base_ocr_model import BaseOcrModel +from docling.models.code_formula_model import CodeFormulaModel, CodeFormulaModelOptions from docling.models.ds_glm_model import GlmModel, GlmOptions from docling.models.easyocr_model import EasyOcrModel from docling.models.layout_model import LayoutModel @@ -93,8 +93,25 @@ def __init__(self, pipeline_options: PdfPipelineOptions): self.enrichment_pipe = [ # Other models working on `NodeItem` elements in the DoclingDocument + # Code Formula Enrichment Model + CodeFormulaModel( + enabled=pipeline_options.do_code_enrichment + or pipeline_options.do_formula_enrichment, + artifacts_path=pipeline_options.artifacts_path, + options=CodeFormulaModelOptions( + do_code_enrichment=pipeline_options.do_code_enrichment, + do_formula_enrichment=pipeline_options.do_formula_enrichment, + ), + accelerator_options=pipeline_options.accelerator_options, + ), ] + if ( + self.pipeline_options.do_formula_enrichment + or self.pipeline_options.do_code_enrichment + ): + self.keep_backend = True + @staticmethod def download_models_hf( local_dir: Optional[Path] = None, force: bool = False diff --git a/docling/utils/glm_utils.py b/docling/utils/glm_utils.py index 1c3b3f67..da29cdd1 100644 --- a/docling/utils/glm_utils.py +++ b/docling/utils/glm_utils.py @@ -270,7 +270,6 @@ def to_docling_document(doc_glm, update_name_label=False) -> DoclingDocument: container_el = doc.add_group(label=group_label) _add_child_elements(container_el, doc, obj, pelem) - elif "text" in obj: text = obj["text"][span_i:span_j] @@ -304,6 +303,10 @@ def to_docling_document(doc_glm, update_name_label=False) -> DoclingDocument: current_list = None doc.add_heading(text=text, prov=prov) + elif label == DocItemLabel.CODE: + current_list = None + + doc.add_code(text=text, prov=prov) else: current_list = None diff --git a/docs/examples/develop_picture_enrichment.py b/docs/examples/develop_picture_enrichment.py index 7ad06e4a..81009fe8 100644 --- a/docs/examples/develop_picture_enrichment.py +++ b/docs/examples/develop_picture_enrichment.py @@ -22,7 +22,6 @@ class ExamplePictureClassifierPipelineOptions(PdfPipelineOptions): class ExamplePictureClassifierEnrichmentModel(BaseEnrichmentModel): - def __init__(self, enabled: bool): self.enabled = enabled @@ -54,7 +53,6 @@ def __call__( class ExamplePictureClassifierPipeline(StandardPdfPipeline): - def __init__(self, pipeline_options: ExamplePictureClassifierPipelineOptions): super().__init__(pipeline_options) self.pipeline_options: ExamplePictureClassifierPipeline diff --git a/poetry.lock b/poetry.lock index 64226c33..73fc85db 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.8.4 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand. [[package]] name = "aiohappyeyeballs" @@ -231,21 +231,6 @@ docs = ["cogapp", "furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphi tests = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] tests-mypy = ["mypy (>=1.11.1)", "pytest-mypy-plugins"] -[[package]] -name = "autoflake" -version = "2.3.1" -description = "Removes unused imports and unused variables" -optional = false -python-versions = ">=3.8" -files = [ - {file = "autoflake-2.3.1-py3-none-any.whl", hash = "sha256:3ae7495db9084b7b32818b4140e6dc4fc280b712fb414f5b8fe57b0a8e85a840"}, - {file = "autoflake-2.3.1.tar.gz", hash = "sha256:c98b75dc5b0a86459c4f01a1d32ac7eb4338ec4317a4469515ff1e687ecd909e"}, -] - -[package.dependencies] -pyflakes = ">=3.0.0" -tomli = {version = ">=2.0.1", markers = "python_version < \"3.11\""} - [[package]] name = "autopep8" version = "2.2.0" @@ -876,13 +861,13 @@ files = [ [[package]] name = "docling-core" -version = "2.14.0" +version = "2.15.1" description = "A python library to define and validate data types in Docling." optional = false python-versions = "<4.0,>=3.9" files = [ - {file = "docling_core-2.14.0-py3-none-any.whl", hash = "sha256:05a7b89872260dcdba2b0fbcc3a4619aed4846f58f155d33a10b41b23eea5188"}, - {file = "docling_core-2.14.0.tar.gz", hash = "sha256:0eb6a52e05f2a06e1777b0533d655a87b54a1a5d374b957beb244c8940aed7da"}, + {file = "docling_core-2.15.1-py3-none-any.whl", hash = "sha256:33152604e1f14d5caccbef099c73163c3f211d0b4d92403d262c308633cc0451"}, + {file = "docling_core-2.15.1.tar.gz", hash = "sha256:588d941b5bfc393a79e779ab64819c60763e7f182ec5221ee37da4be91dd802f"}, ] [package.dependencies] @@ -903,13 +888,13 @@ chunking = ["semchunk (>=2.2.0,<3.0.0)", "transformers (>=4.34.0,<5.0.0)"] [[package]] name = "docling-ibm-models" -version = "3.1.2" +version = "3.2.1" description = "This package contains the AI models used by the Docling PDF conversion package" optional = false python-versions = "<4.0,>=3.9" files = [ - {file = "docling_ibm_models-3.1.2-py3-none-any.whl", hash = "sha256:c5d2fa83db08ec538bb77e3d5d79c9ccef7b6873aab19ddcf5bb5e9801bf4a03"}, - {file = "docling_ibm_models-3.1.2.tar.gz", hash = "sha256:68c8b8f1cb87a8d8c5c6d6fe2c86679d65a09d354ec413ed13e9493ee0cd3794"}, + {file = "docling_ibm_models-3.2.1-py3-none-any.whl", hash = "sha256:55bca5673381cc5862f4de584345020d071414c46bc1b9f6436d674e3610ec97"}, + {file = "docling_ibm_models-3.2.1.tar.gz", hash = "sha256:abd1bdc58f00600065eedbfbd34876704d5004cd20884a2c0a61ca2ee5a927dd"}, ] [package.dependencies] @@ -932,43 +917,42 @@ transformers = [ [[package]] name = "docling-parse" -version = "3.1.0" +version = "3.1.1" description = "Simple package to extract text with coordinates from programmatic PDFs" optional = false python-versions = "<4.0,>=3.9" files = [ - {file = "docling_parse-3.1.0-cp310-cp310-macosx_13_0_x86_64.whl", hash = "sha256:0bfd425f2a66a23e7dce51aa461984b69cbb6cf2d7e948c1388314b5a6089045"}, - {file = "docling_parse-3.1.0-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:d1c8c689915f8d768fc850fd3e98d9e6e3d50fb070cab84fddac2465c3bc78bc"}, - {file = "docling_parse-3.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42c24570fcc9e820b86de4996e8c8fa76d490ae8b16c9dc264a2d60f4aaf5801"}, - {file = "docling_parse-3.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e9e05e744f6ffbfe6e65b53a0a6bdc440814b2581edf1dbab26aca38b44514a5"}, - {file = "docling_parse-3.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:f59507c9a9672032b3029df7318ab017bf66986f95e00edc5d2e4c5c6ec5fa7e"}, - {file = "docling_parse-3.1.0-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:428098cc5f8a449101099f77e53862a1e8db58e27a028a2a9ce397be26d4788f"}, - {file = "docling_parse-3.1.0-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:5f877b9d5ac46828327e5bd94da7b2f54da900d4a729c52533df904dd3463f85"}, - {file = "docling_parse-3.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c10e587ca2c55522f7cf35b8d9983f1b2eeef6f67b168da157ad4fc1e3ad5ba2"}, - {file = "docling_parse-3.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2da249c455758f422d47379202dc599a3f35fe811ed03dc019fd42548d8cd2b"}, - {file = "docling_parse-3.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:2aeaa1a34f92208ed63784ee04f69644f32974b520d957db753256c6d0ccf2b6"}, - {file = "docling_parse-3.1.0-cp312-cp312-macosx_13_0_x86_64.whl", hash = "sha256:6997eb40f7d04e4438e3a5218df23c07b260cbece3f150cdd428bf05f927a389"}, - {file = "docling_parse-3.1.0-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:1307169244cd145c59c2c8137bb9c0c132dc2bb0abf890875e8ca22f09fa4f99"}, - {file = "docling_parse-3.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dd1d4460303d1d7162c0f45f141bef6bfb39df235c7b7e9ba842a921c74e3176"}, - {file = "docling_parse-3.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:970a44d2d79a007957e91b2501c0572e2d0f4623c3f3685ba7a8b09bf39df1b1"}, - {file = "docling_parse-3.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:b9a80f4b4161c57797f061fa111ce797eeacf52bce9bebba7919a8ea7fcc26ac"}, - {file = "docling_parse-3.1.0-cp313-cp313-macosx_13_0_x86_64.whl", hash = "sha256:993e27c953bb0fa53100aea694442c0147f523044c02fd7c193b68ac9070d507"}, - {file = "docling_parse-3.1.0-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:0a19d828c466c653ffdaff1d7da2cd7f4aab212360c477629463da8f0e150c05"}, - {file = "docling_parse-3.1.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bd868b8ee626b9e74c8d2bb3ad8e7f036dd6839250bdebe7a4c0a1657aaa8dbd"}, - {file = "docling_parse-3.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:13c1627a7c16527bf2003d764a5f8aa23337d8c56085d3d4717e65d2c940b242"}, - {file = "docling_parse-3.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:67175719913fa3adb6476a0753383b4a0d156e286927ae641085ff99f85320c4"}, - {file = "docling_parse-3.1.0-cp39-cp39-macosx_13_0_x86_64.whl", hash = "sha256:ada2b7fc587fd31d1a0b565957596d9b057b32730e9cd0bd390b38cf1f5192bd"}, - {file = "docling_parse-3.1.0-cp39-cp39-macosx_14_0_arm64.whl", hash = "sha256:c70ef7cedf37a87fe26ef3df5870523c9471b2144170ee3d7756c2cd4c3eb687"}, - {file = "docling_parse-3.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:181ee70a617ec08dbdd1bbbf613993be86e0da8ea8c5024704eb294e70f8b253"}, - {file = "docling_parse-3.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2ed50ed868ac18b805fc7e8885d3f5504c0d28eec1c40e22691f7aac0edf6374"}, - {file = "docling_parse-3.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:55e02583f7214e4d0d46a5a687abaf5a080dc7c6a7015888e23d83549702434f"}, - {file = "docling_parse-3.1.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:d83d07744e52f1b4cfaf50f21c47b2d0df6d285a7e3d4297e09ba159b36b9277"}, - {file = "docling_parse-3.1.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:9f70d59e05c53b5c6538eb480dce5ba9c02f349a3ccc99d20df6303a56cd3ded"}, - {file = "docling_parse-3.1.0.tar.gz", hash = "sha256:4a159222c7c4b4b7932330168405ef2b887bc5e3d217c9dd25a9d9b51f9187d3"}, -] - -[package.dependencies] -autoflake = ">=2.3.1,<3.0.0" + {file = "docling_parse-3.1.1-cp310-cp310-macosx_13_0_x86_64.whl", hash = "sha256:cccf1b7912ece508f75bc004dff392298fc956f33c62f3a48db6c0a7976d808a"}, + {file = "docling_parse-3.1.1-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:3537f3bbd2152a3f2c25142ac93b9db08e68eca923863dca272a0f588739855d"}, + {file = "docling_parse-3.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0dffee503cf6be3343df2d9421067585a88543ed5c94e39662a3cfc5cd2b794a"}, + {file = "docling_parse-3.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c856f0dbe8f10296442f749109d5d5dc86f10151a0e51e8629b32d053d0e61c2"}, + {file = "docling_parse-3.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:5693ef8cba6096d8ed1039f61a663ea74bac711d06616b51254c495ebb3eb53d"}, + {file = "docling_parse-3.1.1-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:8e586bcd24d7e3ba26ebdace4cb15d70498fb4656fc9f6f20f24b007de0628d6"}, + {file = "docling_parse-3.1.1-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:1e8137020ed9bff26eb70dbbdb42c62f3e87c81001e3ecd41e39b3ec3631d7bf"}, + {file = "docling_parse-3.1.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bec98497626202a6fa7e2a715814414131b53b32cd2999e540edf87a60e45ef5"}, + {file = "docling_parse-3.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:537e0eec387a9cc3e35492752efc561982b3cf02b3d571ca46c4a0af3a884068"}, + {file = "docling_parse-3.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:ca3d45a0e9cd41c5e6e0002eaa1a3478bc065b58dc7d38a114eb5ad37f762934"}, + {file = "docling_parse-3.1.1-cp312-cp312-macosx_13_0_x86_64.whl", hash = "sha256:008d751f4fdd82a3cbe3e8d4abaa4d5cf0d0cb35d16334c5dfc22a62001c780b"}, + {file = "docling_parse-3.1.1-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:a06a0e4b403387e9c4e79d388aa63ace75d1aa855018238634ec8ce262369ffa"}, + {file = "docling_parse-3.1.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b802ae9c2464fc0354721d0ef3c73f573c202fa1995276afceaf5882bb894583"}, + {file = "docling_parse-3.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5dc796b738e4ba3663084ee9fa4fe749e8aa27154bf459a3531e5a5b9c774b6b"}, + {file = "docling_parse-3.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:dbad418bedc7706c230ae8212cd08a41400762104be3df512ffe05d0f468d6e2"}, + {file = "docling_parse-3.1.1-cp313-cp313-macosx_13_0_x86_64.whl", hash = "sha256:b32f46810f7c05de3e1fd13c2bbe58291710b90777baefefd8ed04118be319db"}, + {file = "docling_parse-3.1.1-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:10ffbfe70a0eda2cac42a8fb2ebbe0adafdcfeb173ecaa0e7e0e7769cc020449"}, + {file = "docling_parse-3.1.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d4389f552297c0798bfc9b4b0116461d7e154340311b143264e9e48808f19884"}, + {file = "docling_parse-3.1.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a716412318f5136fde397925a06b3d1cc3fce33f060175574d09576cbfc901f1"}, + {file = "docling_parse-3.1.1-cp313-cp313-win_amd64.whl", hash = "sha256:7ff36910971bc015270c4aaae5f01d783970a0af840ca84070a41564759048c5"}, + {file = "docling_parse-3.1.1-cp39-cp39-macosx_13_0_x86_64.whl", hash = "sha256:9711ed84828bfc35b8cd02aedbf3a9a264eaaf567c8168c8c1cca5eb239490eb"}, + {file = "docling_parse-3.1.1-cp39-cp39-macosx_14_0_arm64.whl", hash = "sha256:fae1a11fd48faaf2961332d75f507aab452d3fbe88085a46cdfbb1efbc3b5c0c"}, + {file = "docling_parse-3.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1ecfdcf69eb93dbe1e6798b1516e657aab6b3b3435d6d161078108ef6f2d8edb"}, + {file = "docling_parse-3.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba63a538e329f66666732a24d5ce4871eb19646833012e5b2c500ccdda29d959"}, + {file = "docling_parse-3.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:22229c00ae9a34d77840e9352fd02d05dbbd90cfe1fdac9319d7a653bd7ba060"}, + {file = "docling_parse-3.1.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:97bbd6b45681c643d1ca2917d4c6813735a3527ee2af2823ebdf3882545539bf"}, + {file = "docling_parse-3.1.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:9637c9676d6ba652362673f57d8f8af9ea35c844ca25116e61ecd5c138ceb1a7"}, + {file = "docling_parse-3.1.1.tar.gz", hash = "sha256:fb62c85132d35edd91cee5c093b9e45d981ca7fa8ba0c560f0c3ce56993e4f8e"}, +] + +[package.dependencies] docling-core = ">=2.14.0,<3.0.0" pillow = ">=10.4.0,<11.0.0" pydantic = ">=2.10.5,<3.0.0" @@ -1090,18 +1074,18 @@ devel = ["colorama", "json-spec", "jsonschema", "pylint", "pytest", "pytest-benc [[package]] name = "filelock" -version = "3.16.1" +version = "3.17.0" description = "A platform independent file lock." optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "filelock-3.16.1-py3-none-any.whl", hash = "sha256:2082e5703d51fbf98ea75855d9d5527e33d8ff23099bec374a134febee6946b0"}, - {file = "filelock-3.16.1.tar.gz", hash = "sha256:c249fbfcd5db47e5e2d6d62198e565475ee65e4831e2561c8e313fa7eb961435"}, + {file = "filelock-3.17.0-py3-none-any.whl", hash = "sha256:533dc2f7ba78dc2f0f531fc6c4940addf7b70a481e269a5a3b93be94ffbe8338"}, + {file = "filelock-3.17.0.tar.gz", hash = "sha256:ee4e77401ef576ebb38cd7f13b9b28893194acc20a8e68e18730ba9c0e54660e"}, ] [package.extras] -docs = ["furo (>=2024.8.6)", "sphinx (>=8.0.2)", "sphinx-autodoc-typehints (>=2.4.1)"] -testing = ["covdefaults (>=2.3)", "coverage (>=7.6.1)", "diff-cover (>=9.2)", "pytest (>=8.3.3)", "pytest-asyncio (>=0.24)", "pytest-cov (>=5)", "pytest-mock (>=3.14)", "pytest-timeout (>=2.3.1)", "virtualenv (>=20.26.4)"] +docs = ["furo (>=2024.8.6)", "sphinx (>=8.1.3)", "sphinx-autodoc-typehints (>=3)"] +testing = ["covdefaults (>=2.3)", "coverage (>=7.6.10)", "diff-cover (>=9.2.1)", "pytest (>=8.3.4)", "pytest-asyncio (>=0.25.2)", "pytest-cov (>=6)", "pytest-mock (>=3.14)", "pytest-timeout (>=2.3.1)", "virtualenv (>=20.28.1)"] typing = ["typing-extensions (>=4.12.2)"] [[package]] @@ -1150,13 +1134,13 @@ dev = ["pyTest", "pyTest-cov"] [[package]] name = "flatbuffers" -version = "24.12.23" +version = "25.1.21" description = "The FlatBuffers serialization format for Python" optional = true python-versions = "*" files = [ - {file = "flatbuffers-24.12.23-py2.py3-none-any.whl", hash = "sha256:c418e0d48890f4142b92fd3e343e73a48f194e1f80075ddcc5793779b3585444"}, - {file = "flatbuffers-24.12.23.tar.gz", hash = "sha256:2910b0bc6ae9b6db78dd2b18d0b7a0709ba240fb5585f286a3a2b30785c22dac"}, + {file = "flatbuffers-25.1.21-py2.py3-none-any.whl", hash = "sha256:0e9736098ba8f4e48246a0640390f4992c0b1a734e7322a9463d5c3eea00558b"}, + {file = "flatbuffers-25.1.21.tar.gz", hash = "sha256:e24a34dcd9fb4e0ea8cc0fc8ef9c5cd61c9d21527a6d536967587a37a4ff9676"}, ] [[package]] @@ -1552,13 +1536,13 @@ pyreadline3 = {version = "*", markers = "sys_platform == \"win32\" and python_ve [[package]] name = "identify" -version = "2.6.5" +version = "2.6.6" description = "File identification library for Python" optional = false python-versions = ">=3.9" files = [ - {file = "identify-2.6.5-py2.py3-none-any.whl", hash = "sha256:14181a47091eb75b337af4c23078c9d09225cd4c48929f521f3bf16b09d02566"}, - {file = "identify-2.6.5.tar.gz", hash = "sha256:c10b33f250e5bba374fae86fb57f3adcebf1161bce7cdf92031915fd480c13bc"}, + {file = "identify-2.6.6-py2.py3-none-any.whl", hash = "sha256:cbd1810bce79f8b671ecb20f53ee0ae8e86ae84b557de31d89709dc2a48ba881"}, + {file = "identify-2.6.6.tar.gz", hash = "sha256:7bec12768ed44ea4761efb47806f0a41f86e7c0a5fdf5950d4648c90eca7e251"}, ] [package.extras] @@ -1580,13 +1564,13 @@ all = ["flake8 (>=7.1.1)", "mypy (>=1.11.2)", "pytest (>=8.3.2)", "ruff (>=0.6.2 [[package]] name = "imageio" -version = "2.36.1" +version = "2.37.0" description = "Library for reading and writing a wide range of image, video, scientific, and volumetric data formats." optional = false python-versions = ">=3.9" files = [ - {file = "imageio-2.36.1-py3-none-any.whl", hash = "sha256:20abd2cae58e55ca1af8a8dcf43293336a59adf0391f1917bf8518633cfc2cdf"}, - {file = "imageio-2.36.1.tar.gz", hash = "sha256:e4e1d231f47f9a9e16100b0f7ce1a86e8856fb4d1c0fa2c4365a316f1746be62"}, + {file = "imageio-2.37.0-py3-none-any.whl", hash = "sha256:11efa15b87bc7871b61590326b2d635439acc321cf7f8ce996f812543ce10eed"}, + {file = "imageio-2.37.0.tar.gz", hash = "sha256:71b57b3669666272c818497aebba2b4c5f20d5b37c81720e5e1a56d59c492996"}, ] [package.dependencies] @@ -1613,13 +1597,13 @@ tifffile = ["tifffile"] [[package]] name = "importlib-metadata" -version = "8.5.0" +version = "8.6.1" description = "Read metadata from Python packages" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "importlib_metadata-8.5.0-py3-none-any.whl", hash = "sha256:45e54197d28b7a7f1559e60b95e7c567032b602131fbd588f1497f47880aa68b"}, - {file = "importlib_metadata-8.5.0.tar.gz", hash = "sha256:71522656f0abace1d072b9e5481a48f07c138e00f079c38c8f883823f9c26bd7"}, + {file = "importlib_metadata-8.6.1-py3-none-any.whl", hash = "sha256:02a89390c1e15fdfdc0d7c6b25cb3e62650d0494005c97d6f148bf5b9787525e"}, + {file = "importlib_metadata-8.6.1.tar.gz", hash = "sha256:310b41d755445d74569f993ccfc22838295d9fe005425094fad953d7f15c8580"}, ] [package.dependencies] @@ -1631,7 +1615,7 @@ cover = ["pytest-cov"] doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] enabler = ["pytest-enabler (>=2.2)"] perf = ["ipython"] -test = ["flufl.flake8", "importlib-resources (>=1.3)", "jaraco.test (>=5.4)", "packaging", "pyfakefs", "pytest (>=6,!=8.1.*)", "pytest-perf (>=0.9.2)"] +test = ["flufl.flake8", "importlib_resources (>=1.3)", "jaraco.test (>=5.4)", "packaging", "pyfakefs", "pytest (>=6,!=8.1.*)", "pytest-perf (>=0.9.2)"] type = ["pytest-mypy"] [[package]] @@ -2726,13 +2710,13 @@ pygments = ">2.12.0" [[package]] name = "mkdocs-material" -version = "9.5.49" +version = "9.5.50" description = "Documentation that simply works" optional = false python-versions = ">=3.8" files = [ - {file = "mkdocs_material-9.5.49-py3-none-any.whl", hash = "sha256:c3c2d8176b18198435d3a3e119011922f3e11424074645c24019c2dcf08a360e"}, - {file = "mkdocs_material-9.5.49.tar.gz", hash = "sha256:3671bb282b4f53a1c72e08adbe04d2481a98f85fed392530051f80ff94a9621d"}, + {file = "mkdocs_material-9.5.50-py3-none-any.whl", hash = "sha256:f24100f234741f4d423a9d672a909d859668a4f404796be3cf035f10d6050385"}, + {file = "mkdocs_material-9.5.50.tar.gz", hash = "sha256:ae5fe16f3d7c9ccd05bb6916a7da7420cf99a9ce5e33debd9d40403a090d5825"}, ] [package.dependencies] @@ -2749,7 +2733,7 @@ regex = ">=2022.4" requests = ">=2.26,<3.0" [package.extras] -git = ["mkdocs-git-committers-plugin-2 (>=1.1,<2.0)", "mkdocs-git-revision-date-localized-plugin (>=1.2.4,<2.0)"] +git = ["mkdocs-git-committers-plugin-2 (>=1.1,<3)", "mkdocs-git-revision-date-localized-plugin (>=1.2.4,<2.0)"] imaging = ["cairosvg (>=2.6,<3.0)", "pillow (>=10.2,<11.0)"] recommended = ["mkdocs-minify-plugin (>=0.7,<1.0)", "mkdocs-redirects (>=1.2,<2.0)", "mkdocs-rss-plugin (>=1.6,<2.0)"] @@ -3364,66 +3348,66 @@ files = [ [[package]] name = "numpy" -version = "2.2.1" +version = "2.2.2" description = "Fundamental package for array computing in Python" optional = false python-versions = ">=3.10" files = [ - {file = "numpy-2.2.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5edb4e4caf751c1518e6a26a83501fda79bff41cc59dac48d70e6d65d4ec4440"}, - {file = "numpy-2.2.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:aa3017c40d513ccac9621a2364f939d39e550c542eb2a894b4c8da92b38896ab"}, - {file = "numpy-2.2.1-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:61048b4a49b1c93fe13426e04e04fdf5a03f456616f6e98c7576144677598675"}, - {file = "numpy-2.2.1-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:7671dc19c7019103ca44e8d94917eba8534c76133523ca8406822efdd19c9308"}, - {file = "numpy-2.2.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4250888bcb96617e00bfa28ac24850a83c9f3a16db471eca2ee1f1714df0f957"}, - {file = "numpy-2.2.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a7746f235c47abc72b102d3bce9977714c2444bdfaea7888d241b4c4bb6a78bf"}, - {file = "numpy-2.2.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:059e6a747ae84fce488c3ee397cee7e5f905fd1bda5fb18c66bc41807ff119b2"}, - {file = "numpy-2.2.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f62aa6ee4eb43b024b0e5a01cf65a0bb078ef8c395e8713c6e8a12a697144528"}, - {file = "numpy-2.2.1-cp310-cp310-win32.whl", hash = "sha256:48fd472630715e1c1c89bf1feab55c29098cb403cc184b4859f9c86d4fcb6a95"}, - {file = "numpy-2.2.1-cp310-cp310-win_amd64.whl", hash = "sha256:b541032178a718c165a49638d28272b771053f628382d5e9d1c93df23ff58dbf"}, - {file = "numpy-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:40f9e544c1c56ba8f1cf7686a8c9b5bb249e665d40d626a23899ba6d5d9e1484"}, - {file = "numpy-2.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f9b57eaa3b0cd8db52049ed0330747b0364e899e8a606a624813452b8203d5f7"}, - {file = "numpy-2.2.1-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:bc8a37ad5b22c08e2dbd27df2b3ef7e5c0864235805b1e718a235bcb200cf1cb"}, - {file = "numpy-2.2.1-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:9036d6365d13b6cbe8f27a0eaf73ddcc070cae584e5ff94bb45e3e9d729feab5"}, - {file = "numpy-2.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:51faf345324db860b515d3f364eaa93d0e0551a88d6218a7d61286554d190d73"}, - {file = "numpy-2.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:38efc1e56b73cc9b182fe55e56e63b044dd26a72128fd2fbd502f75555d92591"}, - {file = "numpy-2.2.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:31b89fa67a8042e96715c68e071a1200c4e172f93b0fbe01a14c0ff3ff820fc8"}, - {file = "numpy-2.2.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4c86e2a209199ead7ee0af65e1d9992d1dce7e1f63c4b9a616500f93820658d0"}, - {file = "numpy-2.2.1-cp311-cp311-win32.whl", hash = "sha256:b34d87e8a3090ea626003f87f9392b3929a7bbf4104a05b6667348b6bd4bf1cd"}, - {file = "numpy-2.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:360137f8fb1b753c5cde3ac388597ad680eccbbbb3865ab65efea062c4a1fd16"}, - {file = "numpy-2.2.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:694f9e921a0c8f252980e85bce61ebbd07ed2b7d4fa72d0e4246f2f8aa6642ab"}, - {file = "numpy-2.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3683a8d166f2692664262fd4900f207791d005fb088d7fdb973cc8d663626faa"}, - {file = "numpy-2.2.1-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:780077d95eafc2ccc3ced969db22377b3864e5b9a0ea5eb347cc93b3ea900315"}, - {file = "numpy-2.2.1-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:55ba24ebe208344aa7a00e4482f65742969a039c2acfcb910bc6fcd776eb4355"}, - {file = "numpy-2.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9b1d07b53b78bf84a96898c1bc139ad7f10fda7423f5fd158fd0f47ec5e01ac7"}, - {file = "numpy-2.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5062dc1a4e32a10dc2b8b13cedd58988261416e811c1dc4dbdea4f57eea61b0d"}, - {file = "numpy-2.2.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:fce4f615f8ca31b2e61aa0eb5865a21e14f5629515c9151850aa936c02a1ee51"}, - {file = "numpy-2.2.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:67d4cda6fa6ffa073b08c8372aa5fa767ceb10c9a0587c707505a6d426f4e046"}, - {file = "numpy-2.2.1-cp312-cp312-win32.whl", hash = "sha256:32cb94448be47c500d2c7a95f93e2f21a01f1fd05dd2beea1ccd049bb6001cd2"}, - {file = "numpy-2.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:ba5511d8f31c033a5fcbda22dd5c813630af98c70b2661f2d2c654ae3cdfcfc8"}, - {file = "numpy-2.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f1d09e520217618e76396377c81fba6f290d5f926f50c35f3a5f72b01a0da780"}, - {file = "numpy-2.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3ecc47cd7f6ea0336042be87d9e7da378e5c7e9b3c8ad0f7c966f714fc10d821"}, - {file = "numpy-2.2.1-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:f419290bc8968a46c4933158c91a0012b7a99bb2e465d5ef5293879742f8797e"}, - {file = "numpy-2.2.1-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:5b6c390bfaef8c45a260554888966618328d30e72173697e5cabe6b285fb2348"}, - {file = "numpy-2.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:526fc406ab991a340744aad7e25251dd47a6720a685fa3331e5c59fef5282a59"}, - {file = "numpy-2.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f74e6fdeb9a265624ec3a3918430205dff1df7e95a230779746a6af78bc615af"}, - {file = "numpy-2.2.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:53c09385ff0b72ba79d8715683c1168c12e0b6e84fb0372e97553d1ea91efe51"}, - {file = "numpy-2.2.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f3eac17d9ec51be534685ba877b6ab5edc3ab7ec95c8f163e5d7b39859524716"}, - {file = "numpy-2.2.1-cp313-cp313-win32.whl", hash = "sha256:9ad014faa93dbb52c80d8f4d3dcf855865c876c9660cb9bd7553843dd03a4b1e"}, - {file = "numpy-2.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:164a829b6aacf79ca47ba4814b130c4020b202522a93d7bff2202bfb33b61c60"}, - {file = "numpy-2.2.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:4dfda918a13cc4f81e9118dea249e192ab167a0bb1966272d5503e39234d694e"}, - {file = "numpy-2.2.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:733585f9f4b62e9b3528dd1070ec4f52b8acf64215b60a845fa13ebd73cd0712"}, - {file = "numpy-2.2.1-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:89b16a18e7bba224ce5114db863e7029803c179979e1af6ad6a6b11f70545008"}, - {file = "numpy-2.2.1-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:676f4eebf6b2d430300f1f4f4c2461685f8269f94c89698d832cdf9277f30b84"}, - {file = "numpy-2.2.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:27f5cdf9f493b35f7e41e8368e7d7b4bbafaf9660cba53fb21d2cd174ec09631"}, - {file = "numpy-2.2.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c1ad395cf254c4fbb5b2132fee391f361a6e8c1adbd28f2cd8e79308a615fe9d"}, - {file = "numpy-2.2.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:08ef779aed40dbc52729d6ffe7dd51df85796a702afbf68a4f4e41fafdc8bda5"}, - {file = "numpy-2.2.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:26c9c4382b19fcfbbed3238a14abf7ff223890ea1936b8890f058e7ba35e8d71"}, - {file = "numpy-2.2.1-cp313-cp313t-win32.whl", hash = "sha256:93cf4e045bae74c90ca833cba583c14b62cb4ba2cba0abd2b141ab52548247e2"}, - {file = "numpy-2.2.1-cp313-cp313t-win_amd64.whl", hash = "sha256:bff7d8ec20f5f42607599f9994770fa65d76edca264a87b5e4ea5629bce12268"}, - {file = "numpy-2.2.1-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:7ba9cc93a91d86365a5d270dee221fdc04fb68d7478e6bf6af650de78a8339e3"}, - {file = "numpy-2.2.1-pp310-pypy310_pp73-macosx_14_0_x86_64.whl", hash = "sha256:3d03883435a19794e41f147612a77a8f56d4e52822337844fff3d4040a142964"}, - {file = "numpy-2.2.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4511d9e6071452b944207c8ce46ad2f897307910b402ea5fa975da32e0102800"}, - {file = "numpy-2.2.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:5c5cc0cbabe9452038ed984d05ac87910f89370b9242371bd9079cb4af61811e"}, - {file = "numpy-2.2.1.tar.gz", hash = "sha256:45681fd7128c8ad1c379f0ca0776a8b0c6583d2f69889ddac01559dfe4390918"}, + {file = "numpy-2.2.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7079129b64cb78bdc8d611d1fd7e8002c0a2565da6a47c4df8062349fee90e3e"}, + {file = "numpy-2.2.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2ec6c689c61df613b783aeb21f945c4cbe6c51c28cb70aae8430577ab39f163e"}, + {file = "numpy-2.2.2-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:40c7ff5da22cd391944a28c6a9c638a5eef77fcf71d6e3a79e1d9d9e82752715"}, + {file = "numpy-2.2.2-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:995f9e8181723852ca458e22de5d9b7d3ba4da3f11cc1cb113f093b271d7965a"}, + {file = "numpy-2.2.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b78ea78450fd96a498f50ee096f69c75379af5138f7881a51355ab0e11286c97"}, + {file = "numpy-2.2.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3fbe72d347fbc59f94124125e73fc4976a06927ebc503ec5afbfb35f193cd957"}, + {file = "numpy-2.2.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:8e6da5cffbbe571f93588f562ed130ea63ee206d12851b60819512dd3e1ba50d"}, + {file = "numpy-2.2.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:09d6a2032faf25e8d0cadde7fd6145118ac55d2740132c1d845f98721b5ebcfd"}, + {file = "numpy-2.2.2-cp310-cp310-win32.whl", hash = "sha256:159ff6ee4c4a36a23fe01b7c3d07bd8c14cc433d9720f977fcd52c13c0098160"}, + {file = "numpy-2.2.2-cp310-cp310-win_amd64.whl", hash = "sha256:64bd6e1762cd7f0986a740fee4dff927b9ec2c5e4d9a28d056eb17d332158014"}, + {file = "numpy-2.2.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:642199e98af1bd2b6aeb8ecf726972d238c9877b0f6e8221ee5ab945ec8a2189"}, + {file = "numpy-2.2.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6d9fc9d812c81e6168b6d405bf00b8d6739a7f72ef22a9214c4241e0dc70b323"}, + {file = "numpy-2.2.2-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:c7d1fd447e33ee20c1f33f2c8e6634211124a9aabde3c617687d8b739aa69eac"}, + {file = "numpy-2.2.2-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:451e854cfae0febe723077bd0cf0a4302a5d84ff25f0bfece8f29206c7bed02e"}, + {file = "numpy-2.2.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bd249bc894af67cbd8bad2c22e7cbcd46cf87ddfca1f1289d1e7e54868cc785c"}, + {file = "numpy-2.2.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:02935e2c3c0c6cbe9c7955a8efa8908dd4221d7755644c59d1bba28b94fd334f"}, + {file = "numpy-2.2.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:a972cec723e0563aa0823ee2ab1df0cb196ed0778f173b381c871a03719d4826"}, + {file = "numpy-2.2.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:d6d6a0910c3b4368d89dde073e630882cdb266755565155bc33520283b2d9df8"}, + {file = "numpy-2.2.2-cp311-cp311-win32.whl", hash = "sha256:860fd59990c37c3ef913c3ae390b3929d005243acca1a86facb0773e2d8d9e50"}, + {file = "numpy-2.2.2-cp311-cp311-win_amd64.whl", hash = "sha256:da1eeb460ecce8d5b8608826595c777728cdf28ce7b5a5a8c8ac8d949beadcf2"}, + {file = "numpy-2.2.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:ac9bea18d6d58a995fac1b2cb4488e17eceeac413af014b1dd26170b766d8467"}, + {file = "numpy-2.2.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:23ae9f0c2d889b7b2d88a3791f6c09e2ef827c2446f1c4a3e3e76328ee4afd9a"}, + {file = "numpy-2.2.2-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:3074634ea4d6df66be04f6728ee1d173cfded75d002c75fac79503a880bf3825"}, + {file = "numpy-2.2.2-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:8ec0636d3f7d68520afc6ac2dc4b8341ddb725039de042faf0e311599f54eb37"}, + {file = "numpy-2.2.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2ffbb1acd69fdf8e89dd60ef6182ca90a743620957afb7066385a7bbe88dc748"}, + {file = "numpy-2.2.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0349b025e15ea9d05c3d63f9657707a4e1d471128a3b1d876c095f328f8ff7f0"}, + {file = "numpy-2.2.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:463247edcee4a5537841d5350bc87fe8e92d7dd0e8c71c995d2c6eecb8208278"}, + {file = "numpy-2.2.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:9dd47ff0cb2a656ad69c38da850df3454da88ee9a6fde0ba79acceee0e79daba"}, + {file = "numpy-2.2.2-cp312-cp312-win32.whl", hash = "sha256:4525b88c11906d5ab1b0ec1f290996c0020dd318af8b49acaa46f198b1ffc283"}, + {file = "numpy-2.2.2-cp312-cp312-win_amd64.whl", hash = "sha256:5acea83b801e98541619af398cc0109ff48016955cc0818f478ee9ef1c5c3dcb"}, + {file = "numpy-2.2.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:b208cfd4f5fe34e1535c08983a1a6803fdbc7a1e86cf13dd0c61de0b51a0aadc"}, + {file = "numpy-2.2.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:d0bbe7dd86dca64854f4b6ce2ea5c60b51e36dfd597300057cf473d3615f2369"}, + {file = "numpy-2.2.2-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:22ea3bb552ade325530e72a0c557cdf2dea8914d3a5e1fecf58fa5dbcc6f43cd"}, + {file = "numpy-2.2.2-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:128c41c085cab8a85dc29e66ed88c05613dccf6bc28b3866cd16050a2f5448be"}, + {file = "numpy-2.2.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:250c16b277e3b809ac20d1f590716597481061b514223c7badb7a0f9993c7f84"}, + {file = "numpy-2.2.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e0c8854b09bc4de7b041148d8550d3bd712b5c21ff6a8ed308085f190235d7ff"}, + {file = "numpy-2.2.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:b6fb9c32a91ec32a689ec6410def76443e3c750e7cfc3fb2206b985ffb2b85f0"}, + {file = "numpy-2.2.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:57b4012e04cc12b78590a334907e01b3a85efb2107df2b8733ff1ed05fce71de"}, + {file = "numpy-2.2.2-cp313-cp313-win32.whl", hash = "sha256:4dbd80e453bd34bd003b16bd802fac70ad76bd463f81f0c518d1245b1c55e3d9"}, + {file = "numpy-2.2.2-cp313-cp313-win_amd64.whl", hash = "sha256:5a8c863ceacae696aff37d1fd636121f1a512117652e5dfb86031c8d84836369"}, + {file = "numpy-2.2.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:b3482cb7b3325faa5f6bc179649406058253d91ceda359c104dac0ad320e1391"}, + {file = "numpy-2.2.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:9491100aba630910489c1d0158034e1c9a6546f0b1340f716d522dc103788e39"}, + {file = "numpy-2.2.2-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:41184c416143defa34cc8eb9d070b0a5ba4f13a0fa96a709e20584638254b317"}, + {file = "numpy-2.2.2-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:7dca87ca328f5ea7dafc907c5ec100d187911f94825f8700caac0b3f4c384b49"}, + {file = "numpy-2.2.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0bc61b307655d1a7f9f4b043628b9f2b721e80839914ede634e3d485913e1fb2"}, + {file = "numpy-2.2.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9fad446ad0bc886855ddf5909cbf8cb5d0faa637aaa6277fb4b19ade134ab3c7"}, + {file = "numpy-2.2.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:149d1113ac15005652e8d0d3f6fd599360e1a708a4f98e43c9c77834a28238cb"}, + {file = "numpy-2.2.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:106397dbbb1896f99e044efc90360d098b3335060375c26aa89c0d8a97c5f648"}, + {file = "numpy-2.2.2-cp313-cp313t-win32.whl", hash = "sha256:0eec19f8af947a61e968d5429f0bd92fec46d92b0008d0a6685b40d6adf8a4f4"}, + {file = "numpy-2.2.2-cp313-cp313t-win_amd64.whl", hash = "sha256:97b974d3ba0fb4612b77ed35d7627490e8e3dff56ab41454d9e8b23448940576"}, + {file = "numpy-2.2.2-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:b0531f0b0e07643eb089df4c509d30d72c9ef40defa53e41363eca8a8cc61495"}, + {file = "numpy-2.2.2-pp310-pypy310_pp73-macosx_14_0_x86_64.whl", hash = "sha256:e9e82dcb3f2ebbc8cb5ce1102d5f1c5ed236bf8a11730fb45ba82e2841ec21df"}, + {file = "numpy-2.2.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e0d4142eb40ca6f94539e4db929410f2a46052a0fe7a2c1c59f6179c39938d2a"}, + {file = "numpy-2.2.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:356ca982c188acbfa6af0d694284d8cf20e95b1c3d0aefa8929376fea9146f60"}, + {file = "numpy-2.2.2.tar.gz", hash = "sha256:ed6906f61834d687738d25988ae117683705636936cc605be0bb208b23df4d8f"}, ] [[package]] @@ -3839,10 +3823,10 @@ files = [ numpy = [ {version = ">=1.21.0", markers = "python_version == \"3.9\" and platform_system == \"Darwin\" and platform_machine == \"arm64\""}, {version = ">=1.19.3", markers = "platform_system == \"Linux\" and platform_machine == \"aarch64\" and python_version >= \"3.8\" and python_version < \"3.10\" or python_version > \"3.9\" and python_version < \"3.10\" or python_version >= \"3.9\" and platform_system != \"Darwin\" and python_version < \"3.10\" or python_version >= \"3.9\" and platform_machine != \"arm64\" and python_version < \"3.10\""}, + {version = ">=1.26.0", markers = "python_version >= \"3.12\""}, + {version = ">=1.23.5", markers = "python_version >= \"3.11\" and python_version < \"3.12\""}, {version = ">=1.21.4", markers = "python_version >= \"3.10\" and platform_system == \"Darwin\" and python_version < \"3.11\""}, {version = ">=1.21.2", markers = "platform_system != \"Darwin\" and python_version >= \"3.10\" and python_version < \"3.11\""}, - {version = ">=1.23.5", markers = "python_version >= \"3.11\" and python_version < \"3.12\""}, - {version = ">=1.26.0", markers = "python_version >= \"3.12\""}, ] [[package]] @@ -3865,10 +3849,10 @@ files = [ numpy = [ {version = ">=1.21.0", markers = "python_version == \"3.9\" and platform_system == \"Darwin\" and platform_machine == \"arm64\""}, {version = ">=1.19.3", markers = "platform_system == \"Linux\" and platform_machine == \"aarch64\" and python_version >= \"3.8\" and python_version < \"3.10\" or python_version > \"3.9\" and python_version < \"3.10\" or python_version >= \"3.9\" and platform_system != \"Darwin\" and python_version < \"3.10\" or python_version >= \"3.9\" and platform_machine != \"arm64\" and python_version < \"3.10\""}, + {version = ">=1.26.0", markers = "python_version >= \"3.12\""}, + {version = ">=1.23.5", markers = "python_version >= \"3.11\" and python_version < \"3.12\""}, {version = ">=1.21.4", markers = "python_version >= \"3.10\" and platform_system == \"Darwin\" and python_version < \"3.11\""}, {version = ">=1.21.2", markers = "platform_system != \"Darwin\" and python_version >= \"3.10\" and python_version < \"3.11\""}, - {version = ">=1.23.5", markers = "python_version >= \"3.11\" and python_version < \"3.12\""}, - {version = ">=1.26.0", markers = "python_version >= \"3.12\""}, ] [[package]] @@ -3887,86 +3871,90 @@ et-xmlfile = "*" [[package]] name = "orjson" -version = "3.10.14" +version = "3.10.15" description = "Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy" optional = false python-versions = ">=3.8" files = [ - {file = "orjson-3.10.14-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:849ea7845a55f09965826e816cdc7689d6cf74fe9223d79d758c714af955bcb6"}, - {file = "orjson-3.10.14-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5947b139dfa33f72eecc63f17e45230a97e741942955a6c9e650069305eb73d"}, - {file = "orjson-3.10.14-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:cde6d76910d3179dae70f164466692f4ea36da124d6fb1a61399ca589e81d69a"}, - {file = "orjson-3.10.14-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c6dfbaeb7afa77ca608a50e2770a0461177b63a99520d4928e27591b142c74b1"}, - {file = "orjson-3.10.14-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fa45e489ef80f28ff0e5ba0a72812b8cfc7c1ef8b46a694723807d1b07c89ebb"}, - {file = "orjson-3.10.14-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f5007abfdbb1d866e2aa8990bd1c465f0f6da71d19e695fc278282be12cffa5"}, - {file = "orjson-3.10.14-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1b49e2af011c84c3f2d541bb5cd1e3c7c2df672223e7e3ea608f09cf295e5f8a"}, - {file = "orjson-3.10.14-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:164ac155109226b3a2606ee6dda899ccfbe6e7e18b5bdc3fbc00f79cc074157d"}, - {file = "orjson-3.10.14-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:6b1225024cf0ef5d15934b5ffe9baf860fe8bc68a796513f5ea4f5056de30bca"}, - {file = "orjson-3.10.14-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:d6546e8073dc382e60fcae4a001a5a1bc46da5eab4a4878acc2d12072d6166d5"}, - {file = "orjson-3.10.14-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:9f1d2942605c894162252d6259b0121bf1cb493071a1ea8cb35d79cb3e6ac5bc"}, - {file = "orjson-3.10.14-cp310-cp310-win32.whl", hash = "sha256:397083806abd51cf2b3bbbf6c347575374d160331a2d33c5823e22249ad3118b"}, - {file = "orjson-3.10.14-cp310-cp310-win_amd64.whl", hash = "sha256:fa18f949d3183a8d468367056be989666ac2bef3a72eece0bade9cdb733b3c28"}, - {file = "orjson-3.10.14-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:f506fd666dd1ecd15a832bebc66c4df45c1902fd47526292836c339f7ba665a9"}, - {file = "orjson-3.10.14-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:efe5fd254cfb0eeee13b8ef7ecb20f5d5a56ddda8a587f3852ab2cedfefdb5f6"}, - {file = "orjson-3.10.14-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4ddc8c866d7467f5ee2991397d2ea94bcf60d0048bdd8ca555740b56f9042725"}, - {file = "orjson-3.10.14-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3af8e42ae4363773658b8d578d56dedffb4f05ceeb4d1d4dd3fb504950b45526"}, - {file = "orjson-3.10.14-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:84dd83110503bc10e94322bf3ffab8bc49150176b49b4984dc1cce4c0a993bf9"}, - {file = "orjson-3.10.14-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:36f5bfc0399cd4811bf10ec7a759c7ab0cd18080956af8ee138097d5b5296a95"}, - {file = "orjson-3.10.14-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:868943660fb2a1e6b6b965b74430c16a79320b665b28dd4511d15ad5038d37d5"}, - {file = "orjson-3.10.14-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:33449c67195969b1a677533dee9d76e006001213a24501333624623e13c7cc8e"}, - {file = "orjson-3.10.14-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:e4c9f60f9fb0b5be66e416dcd8c9d94c3eabff3801d875bdb1f8ffc12cf86905"}, - {file = "orjson-3.10.14-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:0de4d6315cfdbd9ec803b945c23b3a68207fd47cbe43626036d97e8e9561a436"}, - {file = "orjson-3.10.14-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:83adda3db595cb1a7e2237029b3249c85afbe5c747d26b41b802e7482cb3933e"}, - {file = "orjson-3.10.14-cp311-cp311-win32.whl", hash = "sha256:998019ef74a4997a9d741b1473533cdb8faa31373afc9849b35129b4b8ec048d"}, - {file = "orjson-3.10.14-cp311-cp311-win_amd64.whl", hash = "sha256:9d034abdd36f0f0f2240f91492684e5043d46f290525d1117712d5b8137784eb"}, - {file = "orjson-3.10.14-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:2ad4b7e367efba6dc3f119c9a0fcd41908b7ec0399a696f3cdea7ec477441b09"}, - {file = "orjson-3.10.14-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f496286fc85e93ce0f71cc84fc1c42de2decf1bf494094e188e27a53694777a7"}, - {file = "orjson-3.10.14-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c7f189bbfcded40e41a6969c1068ba305850ba016665be71a217918931416fbf"}, - {file = "orjson-3.10.14-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8cc8204f0b75606869c707da331058ddf085de29558b516fc43c73ee5ee2aadb"}, - {file = "orjson-3.10.14-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:deaa2899dff7f03ab667e2ec25842d233e2a6a9e333efa484dfe666403f3501c"}, - {file = "orjson-3.10.14-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f1c3ea52642c9714dc6e56de8a451a066f6d2707d273e07fe8a9cc1ba073813d"}, - {file = "orjson-3.10.14-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9d3f9ed72e7458ded9a1fb1b4d4ed4c4fdbaf82030ce3f9274b4dc1bff7ace2b"}, - {file = "orjson-3.10.14-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:07520685d408a2aba514c17ccc16199ff2934f9f9e28501e676c557f454a37fe"}, - {file = "orjson-3.10.14-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:76344269b550ea01488d19a2a369ab572c1ac4449a72e9f6ac0d70eb1cbfb953"}, - {file = "orjson-3.10.14-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:e2979d0f2959990620f7e62da6cd954e4620ee815539bc57a8ae46e2dacf90e3"}, - {file = "orjson-3.10.14-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:03f61ca3674555adcb1aa717b9fc87ae936aa7a63f6aba90a474a88701278780"}, - {file = "orjson-3.10.14-cp312-cp312-win32.whl", hash = "sha256:d5075c54edf1d6ad81d4c6523ce54a748ba1208b542e54b97d8a882ecd810fd1"}, - {file = "orjson-3.10.14-cp312-cp312-win_amd64.whl", hash = "sha256:175cafd322e458603e8ce73510a068d16b6e6f389c13f69bf16de0e843d7d406"}, - {file = "orjson-3.10.14-cp313-cp313-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:0905ca08a10f7e0e0c97d11359609300eb1437490a7f32bbaa349de757e2e0c7"}, - {file = "orjson-3.10.14-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:92d13292249f9f2a3e418cbc307a9fbbef043c65f4bd8ba1eb620bc2aaba3d15"}, - {file = "orjson-3.10.14-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90937664e776ad316d64251e2fa2ad69265e4443067668e4727074fe39676414"}, - {file = "orjson-3.10.14-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:9ed3d26c4cb4f6babaf791aa46a029265850e80ec2a566581f5c2ee1a14df4f1"}, - {file = "orjson-3.10.14-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:56ee546c2bbe9599aba78169f99d1dc33301853e897dbaf642d654248280dc6e"}, - {file = "orjson-3.10.14-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:901e826cb2f1bdc1fcef3ef59adf0c451e8f7c0b5deb26c1a933fb66fb505eae"}, - {file = "orjson-3.10.14-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:26336c0d4b2d44636e1e1e6ed1002f03c6aae4a8a9329561c8883f135e9ff010"}, - {file = "orjson-3.10.14-cp313-cp313-win32.whl", hash = "sha256:e2bc525e335a8545c4e48f84dd0328bc46158c9aaeb8a1c2276546e94540ea3d"}, - {file = "orjson-3.10.14-cp313-cp313-win_amd64.whl", hash = "sha256:eca04dfd792cedad53dc9a917da1a522486255360cb4e77619343a20d9f35364"}, - {file = "orjson-3.10.14-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:9a0fba3b8a587a54c18585f077dcab6dd251c170d85cfa4d063d5746cd595a0f"}, - {file = "orjson-3.10.14-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:175abf3d20e737fec47261d278f95031736a49d7832a09ab684026528c4d96db"}, - {file = "orjson-3.10.14-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:29ca1a93e035d570e8b791b6c0feddd403c6a5388bfe870bf2aa6bba1b9d9b8e"}, - {file = "orjson-3.10.14-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f77202c80e8ab5a1d1e9faf642343bee5aaf332061e1ada4e9147dbd9eb00c46"}, - {file = "orjson-3.10.14-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6e2ec73b7099b6a29b40a62e08a23b936423bd35529f8f55c42e27acccde7954"}, - {file = "orjson-3.10.14-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a2d1679df9f9cd9504f8dff24555c1eaabba8aad7f5914f28dab99e3c2552c9d"}, - {file = "orjson-3.10.14-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:691ab9a13834310a263664313e4f747ceb93662d14a8bdf20eb97d27ed488f16"}, - {file = "orjson-3.10.14-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:b11ed82054fce82fb74cea33247d825d05ad6a4015ecfc02af5fbce442fbf361"}, - {file = "orjson-3.10.14-cp38-cp38-musllinux_1_2_armv7l.whl", hash = "sha256:e70a1d62b8288677d48f3bea66c21586a5f999c64ecd3878edb7393e8d1b548d"}, - {file = "orjson-3.10.14-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:16642f10c1ca5611251bd835de9914a4b03095e28a34c8ba6a5500b5074338bd"}, - {file = "orjson-3.10.14-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:3871bad546aa66c155e3f36f99c459780c2a392d502a64e23fb96d9abf338511"}, - {file = "orjson-3.10.14-cp38-cp38-win32.whl", hash = "sha256:0293a88815e9bb5c90af4045f81ed364d982f955d12052d989d844d6c4e50945"}, - {file = "orjson-3.10.14-cp38-cp38-win_amd64.whl", hash = "sha256:6169d3868b190d6b21adc8e61f64e3db30f50559dfbdef34a1cd6c738d409dfc"}, - {file = "orjson-3.10.14-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:06d4ec218b1ec1467d8d64da4e123b4794c781b536203c309ca0f52819a16c03"}, - {file = "orjson-3.10.14-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:962c2ec0dcaf22b76dee9831fdf0c4a33d4bf9a257a2bc5d4adc00d5c8ad9034"}, - {file = "orjson-3.10.14-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:21d3be4132f71ef1360385770474f29ea1538a242eef72ac4934fe142800e37f"}, - {file = "orjson-3.10.14-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c28ed60597c149a9e3f5ad6dd9cebaee6fb2f0e3f2d159a4a2b9b862d4748860"}, - {file = "orjson-3.10.14-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7e947f70167fe18469f2023644e91ab3d24f9aed69a5e1c78e2c81b9cea553fb"}, - {file = "orjson-3.10.14-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:64410696c97a35af2432dea7bdc4ce32416458159430ef1b4beb79fd30093ad6"}, - {file = "orjson-3.10.14-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8050a5d81c022561ee29cd2739de5b4445f3c72f39423fde80a63299c1892c52"}, - {file = "orjson-3.10.14-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:b49a28e30d3eca86db3fe6f9b7f4152fcacbb4a467953cd1b42b94b479b77956"}, - {file = "orjson-3.10.14-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:ca041ad20291a65d853a9523744eebc3f5a4b2f7634e99f8fe88320695ddf766"}, - {file = "orjson-3.10.14-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:d313a2998b74bb26e9e371851a173a9b9474764916f1fc7971095699b3c6e964"}, - {file = "orjson-3.10.14-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:7796692136a67b3e301ef9052bde6fe8e7bd5200da766811a3a608ffa62aaff0"}, - {file = "orjson-3.10.14-cp39-cp39-win32.whl", hash = "sha256:eee4bc767f348fba485ed9dc576ca58b0a9eac237f0e160f7a59bce628ed06b3"}, - {file = "orjson-3.10.14-cp39-cp39-win_amd64.whl", hash = "sha256:96a1c0ee30fb113b3ae3c748fd75ca74a157ff4c58476c47db4d61518962a011"}, - {file = "orjson-3.10.14.tar.gz", hash = "sha256:cf31f6f071a6b8e7aa1ead1fa27b935b48d00fbfa6a28ce856cfff2d5dd68eed"}, + {file = "orjson-3.10.15-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:552c883d03ad185f720d0c09583ebde257e41b9521b74ff40e08b7dec4559c04"}, + {file = "orjson-3.10.15-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:616e3e8d438d02e4854f70bfdc03a6bcdb697358dbaa6bcd19cbe24d24ece1f8"}, + {file = "orjson-3.10.15-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7c2c79fa308e6edb0ffab0a31fd75a7841bf2a79a20ef08a3c6e3b26814c8ca8"}, + {file = "orjson-3.10.15-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:73cb85490aa6bf98abd20607ab5c8324c0acb48d6da7863a51be48505646c814"}, + {file = "orjson-3.10.15-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:763dadac05e4e9d2bc14938a45a2d0560549561287d41c465d3c58aec818b164"}, + {file = "orjson-3.10.15-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a330b9b4734f09a623f74a7490db713695e13b67c959713b78369f26b3dee6bf"}, + {file = "orjson-3.10.15-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a61a4622b7ff861f019974f73d8165be1bd9a0855e1cad18ee167acacabeb061"}, + {file = "orjson-3.10.15-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:acd271247691574416b3228db667b84775c497b245fa275c6ab90dc1ffbbd2b3"}, + {file = "orjson-3.10.15-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:e4759b109c37f635aa5c5cc93a1b26927bfde24b254bcc0e1149a9fada253d2d"}, + {file = "orjson-3.10.15-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:9e992fd5cfb8b9f00bfad2fd7a05a4299db2bbe92e6440d9dd2fab27655b3182"}, + {file = "orjson-3.10.15-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f95fb363d79366af56c3f26b71df40b9a583b07bbaaf5b317407c4d58497852e"}, + {file = "orjson-3.10.15-cp310-cp310-win32.whl", hash = "sha256:f9875f5fea7492da8ec2444839dcc439b0ef298978f311103d0b7dfd775898ab"}, + {file = "orjson-3.10.15-cp310-cp310-win_amd64.whl", hash = "sha256:17085a6aa91e1cd70ca8533989a18b5433e15d29c574582f76f821737c8d5806"}, + {file = "orjson-3.10.15-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:c4cc83960ab79a4031f3119cc4b1a1c627a3dc09df125b27c4201dff2af7eaa6"}, + {file = "orjson-3.10.15-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ddbeef2481d895ab8be5185f2432c334d6dec1f5d1933a9c83014d188e102cef"}, + {file = "orjson-3.10.15-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9e590a0477b23ecd5b0ac865b1b907b01b3c5535f5e8a8f6ab0e503efb896334"}, + {file = "orjson-3.10.15-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a6be38bd103d2fd9bdfa31c2720b23b5d47c6796bcb1d1b598e3924441b4298d"}, + {file = "orjson-3.10.15-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ff4f6edb1578960ed628a3b998fa54d78d9bb3e2eb2cfc5c2a09732431c678d0"}, + {file = "orjson-3.10.15-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b0482b21d0462eddd67e7fce10b89e0b6ac56570424662b685a0d6fccf581e13"}, + {file = "orjson-3.10.15-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:bb5cc3527036ae3d98b65e37b7986a918955f85332c1ee07f9d3f82f3a6899b5"}, + {file = "orjson-3.10.15-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d569c1c462912acdd119ccbf719cf7102ea2c67dd03b99edcb1a3048651ac96b"}, + {file = "orjson-3.10.15-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:1e6d33efab6b71d67f22bf2962895d3dc6f82a6273a965fab762e64fa90dc399"}, + {file = "orjson-3.10.15-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:c33be3795e299f565681d69852ac8c1bc5c84863c0b0030b2b3468843be90388"}, + {file = "orjson-3.10.15-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:eea80037b9fae5339b214f59308ef0589fc06dc870578b7cce6d71eb2096764c"}, + {file = "orjson-3.10.15-cp311-cp311-win32.whl", hash = "sha256:d5ac11b659fd798228a7adba3e37c010e0152b78b1982897020a8e019a94882e"}, + {file = "orjson-3.10.15-cp311-cp311-win_amd64.whl", hash = "sha256:cf45e0214c593660339ef63e875f32ddd5aa3b4adc15e662cdb80dc49e194f8e"}, + {file = "orjson-3.10.15-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:9d11c0714fc85bfcf36ada1179400862da3288fc785c30e8297844c867d7505a"}, + {file = "orjson-3.10.15-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dba5a1e85d554e3897fa9fe6fbcff2ed32d55008973ec9a2b992bd9a65d2352d"}, + {file = "orjson-3.10.15-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7723ad949a0ea502df656948ddd8b392780a5beaa4c3b5f97e525191b102fff0"}, + {file = "orjson-3.10.15-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6fd9bc64421e9fe9bd88039e7ce8e58d4fead67ca88e3a4014b143cec7684fd4"}, + {file = "orjson-3.10.15-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dadba0e7b6594216c214ef7894c4bd5f08d7c0135f4dd0145600be4fbcc16767"}, + {file = "orjson-3.10.15-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b48f59114fe318f33bbaee8ebeda696d8ccc94c9e90bc27dbe72153094e26f41"}, + {file = "orjson-3.10.15-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:035fb83585e0f15e076759b6fedaf0abb460d1765b6a36f48018a52858443514"}, + {file = "orjson-3.10.15-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d13b7fe322d75bf84464b075eafd8e7dd9eae05649aa2a5354cfa32f43c59f17"}, + {file = "orjson-3.10.15-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:7066b74f9f259849629e0d04db6609db4cf5b973248f455ba5d3bd58a4daaa5b"}, + {file = "orjson-3.10.15-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:88dc3f65a026bd3175eb157fea994fca6ac7c4c8579fc5a86fc2114ad05705b7"}, + {file = "orjson-3.10.15-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b342567e5465bd99faa559507fe45e33fc76b9fb868a63f1642c6bc0735ad02a"}, + {file = "orjson-3.10.15-cp312-cp312-win32.whl", hash = "sha256:0a4f27ea5617828e6b58922fdbec67b0aa4bb844e2d363b9244c47fa2180e665"}, + {file = "orjson-3.10.15-cp312-cp312-win_amd64.whl", hash = "sha256:ef5b87e7aa9545ddadd2309efe6824bd3dd64ac101c15dae0f2f597911d46eaa"}, + {file = "orjson-3.10.15-cp313-cp313-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:bae0e6ec2b7ba6895198cd981b7cca95d1487d0147c8ed751e5632ad16f031a6"}, + {file = "orjson-3.10.15-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f93ce145b2db1252dd86af37d4165b6faa83072b46e3995ecc95d4b2301b725a"}, + {file = "orjson-3.10.15-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7c203f6f969210128af3acae0ef9ea6aab9782939f45f6fe02d05958fe761ef9"}, + {file = "orjson-3.10.15-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8918719572d662e18b8af66aef699d8c21072e54b6c82a3f8f6404c1f5ccd5e0"}, + {file = "orjson-3.10.15-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f71eae9651465dff70aa80db92586ad5b92df46a9373ee55252109bb6b703307"}, + {file = "orjson-3.10.15-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e117eb299a35f2634e25ed120c37c641398826c2f5a3d3cc39f5993b96171b9e"}, + {file = "orjson-3.10.15-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:13242f12d295e83c2955756a574ddd6741c81e5b99f2bef8ed8d53e47a01e4b7"}, + {file = "orjson-3.10.15-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:7946922ada8f3e0b7b958cc3eb22cfcf6c0df83d1fe5521b4a100103e3fa84c8"}, + {file = "orjson-3.10.15-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:b7155eb1623347f0f22c38c9abdd738b287e39b9982e1da227503387b81b34ca"}, + {file = "orjson-3.10.15-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:208beedfa807c922da4e81061dafa9c8489c6328934ca2a562efa707e049e561"}, + {file = "orjson-3.10.15-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:eca81f83b1b8c07449e1d6ff7074e82e3fd6777e588f1a6632127f286a968825"}, + {file = "orjson-3.10.15-cp313-cp313-win32.whl", hash = "sha256:c03cd6eea1bd3b949d0d007c8d57049aa2b39bd49f58b4b2af571a5d3833d890"}, + {file = "orjson-3.10.15-cp313-cp313-win_amd64.whl", hash = "sha256:fd56a26a04f6ba5fb2045b0acc487a63162a958ed837648c5781e1fe3316cfbf"}, + {file = "orjson-3.10.15-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:5e8afd6200e12771467a1a44e5ad780614b86abb4b11862ec54861a82d677746"}, + {file = "orjson-3.10.15-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da9a18c500f19273e9e104cca8c1f0b40a6470bcccfc33afcc088045d0bf5ea6"}, + {file = "orjson-3.10.15-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bb00b7bfbdf5d34a13180e4805d76b4567025da19a197645ca746fc2fb536586"}, + {file = "orjson-3.10.15-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:33aedc3d903378e257047fee506f11e0833146ca3e57a1a1fb0ddb789876c1e1"}, + {file = "orjson-3.10.15-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dd0099ae6aed5eb1fc84c9eb72b95505a3df4267e6962eb93cdd5af03be71c98"}, + {file = "orjson-3.10.15-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7c864a80a2d467d7786274fce0e4f93ef2a7ca4ff31f7fc5634225aaa4e9e98c"}, + {file = "orjson-3.10.15-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c25774c9e88a3e0013d7d1a6c8056926b607a61edd423b50eb5c88fd7f2823ae"}, + {file = "orjson-3.10.15-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:e78c211d0074e783d824ce7bb85bf459f93a233eb67a5b5003498232ddfb0e8a"}, + {file = "orjson-3.10.15-cp38-cp38-musllinux_1_2_armv7l.whl", hash = "sha256:43e17289ffdbbac8f39243916c893d2ae41a2ea1a9cbb060a56a4d75286351ae"}, + {file = "orjson-3.10.15-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:781d54657063f361e89714293c095f506c533582ee40a426cb6489c48a637b81"}, + {file = "orjson-3.10.15-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:6875210307d36c94873f553786a808af2788e362bd0cf4c8e66d976791e7b528"}, + {file = "orjson-3.10.15-cp38-cp38-win32.whl", hash = "sha256:305b38b2b8f8083cc3d618927d7f424349afce5975b316d33075ef0f73576b60"}, + {file = "orjson-3.10.15-cp38-cp38-win_amd64.whl", hash = "sha256:5dd9ef1639878cc3efffed349543cbf9372bdbd79f478615a1c633fe4e4180d1"}, + {file = "orjson-3.10.15-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:ffe19f3e8d68111e8644d4f4e267a069ca427926855582ff01fc012496d19969"}, + {file = "orjson-3.10.15-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d433bf32a363823863a96561a555227c18a522a8217a6f9400f00ddc70139ae2"}, + {file = "orjson-3.10.15-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:da03392674f59a95d03fa5fb9fe3a160b0511ad84b7a3914699ea5a1b3a38da2"}, + {file = "orjson-3.10.15-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3a63bb41559b05360ded9132032239e47983a39b151af1201f07ec9370715c82"}, + {file = "orjson-3.10.15-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3766ac4702f8f795ff3fa067968e806b4344af257011858cc3d6d8721588b53f"}, + {file = "orjson-3.10.15-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a1c73dcc8fadbd7c55802d9aa093b36878d34a3b3222c41052ce6b0fc65f8e8"}, + {file = "orjson-3.10.15-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b299383825eafe642cbab34be762ccff9fd3408d72726a6b2a4506d410a71ab3"}, + {file = "orjson-3.10.15-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:abc7abecdbf67a173ef1316036ebbf54ce400ef2300b4e26a7b843bd446c2480"}, + {file = "orjson-3.10.15-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:3614ea508d522a621384c1d6639016a5a2e4f027f3e4a1c93a51867615d28829"}, + {file = "orjson-3.10.15-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:295c70f9dc154307777ba30fe29ff15c1bcc9dfc5c48632f37d20a607e9ba85a"}, + {file = "orjson-3.10.15-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:63309e3ff924c62404923c80b9e2048c1f74ba4b615e7584584389ada50ed428"}, + {file = "orjson-3.10.15-cp39-cp39-win32.whl", hash = "sha256:a2f708c62d026fb5340788ba94a55c23df4e1869fec74be455e0b2f5363b8507"}, + {file = "orjson-3.10.15-cp39-cp39-win_amd64.whl", hash = "sha256:efcf6c735c3d22ef60c4aa27a5238f1a477df85e9b15f2142f9d669beb2d13fd"}, + {file = "orjson-3.10.15.tar.gz", hash = "sha256:05ca7fe452a2e9d8d9d706a2984c95b9c2ebc5db417ce0b7a49b91d50642a23e"}, ] [[package]] @@ -4049,8 +4037,8 @@ files = [ [package.dependencies] numpy = [ {version = ">=1.22.4", markers = "python_version < \"3.11\""}, - {version = ">=1.23.2", markers = "python_version == \"3.11\""}, {version = ">=1.26.0", markers = "python_version >= \"3.12\""}, + {version = ">=1.23.2", markers = "python_version == \"3.11\""}, ] python-dateutil = ">=2.8.2" pytz = ">=2020.1" @@ -4309,13 +4297,13 @@ virtualenv = ">=20.10.0" [[package]] name = "prompt-toolkit" -version = "3.0.48" +version = "3.0.50" description = "Library for building powerful interactive command lines in Python" optional = false -python-versions = ">=3.7.0" +python-versions = ">=3.8.0" files = [ - {file = "prompt_toolkit-3.0.48-py3-none-any.whl", hash = "sha256:f49a827f90062e411f1ce1f854f2aedb3c23353244f8108b89283587397ac10e"}, - {file = "prompt_toolkit-3.0.48.tar.gz", hash = "sha256:d6623ab0477a80df74e646bdbc93621143f5caf104206aa29294d53de1a03d90"}, + {file = "prompt_toolkit-3.0.50-py3-none-any.whl", hash = "sha256:9b6427eb19e479d98acff65196a307c555eb567989e6d88ebbb1b509d9779198"}, + {file = "prompt_toolkit-3.0.50.tar.gz", hash = "sha256:544748f3860a2623ca5cd6d2795e7a14f3d0e1c3c9728359013f79877fc89bab"}, ] [package.dependencies] @@ -4830,13 +4818,13 @@ testutils = ["gitpython (>3)"] [[package]] name = "pymdown-extensions" -version = "10.14" +version = "10.14.1" description = "Extension pack for Python Markdown." optional = false python-versions = ">=3.8" files = [ - {file = "pymdown_extensions-10.14-py3-none-any.whl", hash = "sha256:202481f716cc8250e4be8fce997781ebf7917701b59652458ee47f2401f818b5"}, - {file = "pymdown_extensions-10.14.tar.gz", hash = "sha256:741bd7c4ff961ba40b7528d32284c53bc436b8b1645e8e37c3e57770b8700a34"}, + {file = "pymdown_extensions-10.14.1-py3-none-any.whl", hash = "sha256:637951cbfbe9874ba28134fb3ce4b8bcadd6aca89ac4998ec29dcbafd554ae08"}, + {file = "pymdown_extensions-10.14.1.tar.gz", hash = "sha256:b65801996a0cd4f42a3110810c306c45b7313c09b0610a6f773730f2a9e3c96b"}, ] [package.dependencies] @@ -4848,13 +4836,13 @@ extra = ["pygments (>=2.19.1)"] [[package]] name = "pymilvus" -version = "2.5.3" +version = "2.5.4" description = "Python Sdk for Milvus" optional = false python-versions = ">=3.8" files = [ - {file = "pymilvus-2.5.3-py3-none-any.whl", hash = "sha256:64ca63594284586937274800be27a402f3be2d078130bf81d94ab8d7798ac9c8"}, - {file = "pymilvus-2.5.3.tar.gz", hash = "sha256:68bc3797b7a14c494caf116cee888894ffd6eba7b96a3ac841be85d60694cc5d"}, + {file = "pymilvus-2.5.4-py3-none-any.whl", hash = "sha256:3f7ddaeae0c8f63554b8e316b73f265d022e05a457d47c366ce47293434a3aea"}, + {file = "pymilvus-2.5.4.tar.gz", hash = "sha256:611732428ff669d57ded3d1f823bdeb10febf233d0251cce8498b287e5a10ce8"}, ] [package.dependencies] @@ -6986,13 +6974,13 @@ vision = ["Pillow (>=10.0.1,<=15.0)"] [[package]] name = "transformers" -version = "4.48.0" +version = "4.48.1" description = "State-of-the-art Machine Learning for JAX, PyTorch and TensorFlow" optional = false python-versions = ">=3.9.0" files = [ - {file = "transformers-4.48.0-py3-none-any.whl", hash = "sha256:6d3de6d71cb5f2a10f9775ccc17abce9620195caaf32ec96542bd2a6937f25b0"}, - {file = "transformers-4.48.0.tar.gz", hash = "sha256:03fdfcbfb8b0367fb6c9fbe9d1c9aa54dfd847618be9b52400b2811d22799cb1"}, + {file = "transformers-4.48.1-py3-none-any.whl", hash = "sha256:24be0564b0a36d9e433d9a65de248f1545b6f6edce1737669605eb6a8141bbbb"}, + {file = "transformers-4.48.1.tar.gz", hash = "sha256:7c1931facc3ee8adcbf86fc7a87461d54c1e40eca3bb57fef1ee9f3ecd32187e"}, ] [package.dependencies] @@ -7187,13 +7175,13 @@ files = [ [[package]] name = "tzdata" -version = "2024.2" +version = "2025.1" description = "Provider of IANA time zone data" optional = false python-versions = ">=2" files = [ - {file = "tzdata-2024.2-py2.py3-none-any.whl", hash = "sha256:a48093786cdcde33cad18c2555e8532f34422074448fbc874186f0abd79565cd"}, - {file = "tzdata-2024.2.tar.gz", hash = "sha256:7d85cc416e9382e69095b7bdf4afd9e3880418a2413feec7069d533d6b4e31cc"}, + {file = "tzdata-2025.1-py2.py3-none-any.whl", hash = "sha256:7e127113816800496f027041c570f50bcd464a020098a3b6b199517772303639"}, + {file = "tzdata-2025.1.tar.gz", hash = "sha256:24894909e88cdb28bd1636c6887801df64cb485bd593f2fd83ef29075a81d694"}, ] [[package]] @@ -7302,13 +7290,13 @@ zstd = ["zstandard (>=0.18.0)"] [[package]] name = "virtualenv" -version = "20.29.0" +version = "20.29.1" description = "Virtual Python Environment builder" optional = false python-versions = ">=3.8" files = [ - {file = "virtualenv-20.29.0-py3-none-any.whl", hash = "sha256:c12311863497992dc4b8644f8ea82d3b35bb7ef8ee82e6630d76d0197c39baf9"}, - {file = "virtualenv-20.29.0.tar.gz", hash = "sha256:6345e1ff19d4b1296954cee076baaf58ff2a12a84a338c62b02eda39f20aa982"}, + {file = "virtualenv-20.29.1-py3-none-any.whl", hash = "sha256:4e4cb403c0b0da39e13b46b1b2476e505cb0046b25f242bee80f62bf990b2779"}, + {file = "virtualenv-20.29.1.tar.gz", hash = "sha256:b8b8970138d32fb606192cb97f6cd4bb644fa486be9308fb9b63f81091b5dc35"}, ] [package.dependencies] @@ -7763,4 +7751,4 @@ tesserocr = ["tesserocr"] [metadata] lock-version = "2.0" python-versions = "^3.9" -content-hash = "0c0bb9470144867d7f11dec7c3020ac3d4d9ef18b355c0852a9cb89b6270981d" +content-hash = "8bb0b67294a50c0340c5cc02ce60d3608ef4d1968ae50f7e0b8b4c8a26c34734" diff --git a/pyproject.toml b/pyproject.toml index 63f60160..c3e1fa67 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -25,9 +25,9 @@ packages = [{include = "docling"}] # actual dependencies: ###################### python = "^3.9" -docling-core = { version = "^2.13.1", extras = ["chunking"] } pydantic = "^2.0.0" -docling-ibm-models = "^3.1.0" +docling-core = { version = "^2.15.1", extras = ["chunking"] } +docling-ibm-models = "^3.2.1" deepsearch-glm = "^1.0.0" docling-parse = "^3.1.0" filetype = "^1.2.0" diff --git a/tests/data/code_and_formula.pdf b/tests/data/code_and_formula.pdf new file mode 100644 index 0000000000000000000000000000000000000000..82cd834321a6fc0b14b02d75cb94bd99e36d843b GIT binary patch literal 94301 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 literal 0 HcmV?d00001 diff --git a/tests/data/groundtruth/docling_v1/code_and_formula.doctags.txt b/tests/data/groundtruth/docling_v1/code_and_formula.doctags.txt new file mode 100644 index 00000000..1f1a0db7 --- /dev/null +++ b/tests/data/groundtruth/docling_v1/code_and_formula.doctags.txt @@ -0,0 +1,13 @@ + +Java Code Example +Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. +Listing 1: Simple Java Program +public static void print() { System.out.println( "Java Code" ); } +Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. +Formula +Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. +Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt. +Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. +Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. +Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. + \ No newline at end of file diff --git a/tests/data/groundtruth/docling_v1/code_and_formula.json b/tests/data/groundtruth/docling_v1/code_and_formula.json new file mode 100644 index 00000000..8b90e794 --- /dev/null +++ b/tests/data/groundtruth/docling_v1/code_and_formula.json @@ -0,0 +1 @@ +{"_name": "", "type": "pdf-document", "description": {"title": null, "abstract": null, "authors": null, "affiliations": null, "subjects": null, "keywords": null, "publication_date": null, "languages": null, "license": null, "publishers": null, "url_refs": null, "references": null, "publication": null, "reference_count": null, "citation_count": null, "citation_date": null, "advanced": null, "analytics": null, "logs": [], "collection": null, "acquisition": null}, "file-info": {"filename": "code_and_formula.pdf", "filename-prov": null, "document-hash": "71dd5c52aa241a6d5275d5f681023b6bb3dee3346e171075d1247c87d49e7a82", "#-pages": 2, "collection-name": null, "description": null, "page-hashes": [{"hash": "d3280840ba2dff9749506fce3f05166336b768d2096f6b332fcbfacbc0540edf", "model": "default", "page": 1}, {"hash": "e9aac72f810d71aeb3710b13689d8c55e6eeda390fb497f09e865f1e94f74f2b", "model": "default", "page": 2}]}, "main-text": [{"prov": [{"bbox": [133.76800537109375, 653.6340942382812, 273.4540100097656, 667.99462890625], "page": 1, "span": [0, 17], "__ref_s3_data": null}], "text": "Java Code Example", "type": "subtitle-level-1", "payload": null, "name": "Section-header", "font": null}, {"prov": [{"bbox": [133.76800537109375, 501.4163513183594, 477.48065185546875, 642.8859252929688], "page": 1, "span": [0, 887], "__ref_s3_data": null}], "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.", "type": "paragraph", "payload": null, "name": "Text", "font": null}, {"prov": [{"bbox": [236.17599487304688, 480.4953308105469, 375.069580078125, 490.45794677734375], "page": 1, "span": [0, 30], "__ref_s3_data": null}], "text": "Listing 1: Simple Java Program", "type": "paragraph", "payload": null, "name": "paragraph", "font": null}, {"prov": [{"bbox": [134.23899841308594, 443.9358215332031, 337.5928649902344, 474.2005310058594], "page": 1, "span": [0, 65], "__ref_s3_data": null}], "text": "public static void print() { System.out.println( \"Java Code\" ); }", "type": "paragraph", "payload": null, "name": "Code", "font": null}, {"prov": [{"bbox": [133.76800537109375, 290.80633544921875, 477.47589111328125, 432.27593994140625], "page": 1, "span": [0, 887], "__ref_s3_data": null}], "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.", "type": "paragraph", "payload": null, "name": "Text", "font": null}, {"prov": [{"bbox": [303.13299560546875, 86.87435150146484, 308.1142883300781, 96.83694458007812], "page": 1, "span": [0, 1], "__ref_s3_data": null}], "text": "1", "type": "page-footer", "payload": null, "name": "Page-footer", "font": null}, {"prov": [{"bbox": [133.76800537109375, 703.5241088867188, 191.51429748535156, 717.8846435546875], "page": 2, "span": [0, 7], "__ref_s3_data": null}], "text": "Formula", "type": "subtitle-level-1", "payload": null, "name": "Section-header", "font": null}, {"prov": [{"bbox": [133.76800537109375, 551.3063354492188, 477.48065185546875, 692.7759399414062], "page": 2, "span": [0, 887], "__ref_s3_data": null}], "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.", "type": "paragraph", "payload": null, "name": "Text", "font": null}, {"prov": [{"bbox": [133.76800537109375, 491.53033447265625, 477.4748229980469, 549.3139038085938], "page": 2, "span": [0, 369], "__ref_s3_data": null}], "text": "Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt.", "type": "paragraph", "payload": null, "name": "Text", "font": null}, {"prov": [{"bbox": [280.5539855957031, 467.6203308105469, 330.69659423828125, 479.4553527832031], "page": 2, "span": [0, 12], "__ref_s3_data": null}], "text": "a 2 + 8 = 12", "type": "equation", "payload": null, "name": "Formula", "font": null}, {"prov": [{"bbox": [133.76800537109375, 318.1803283691406, 477.47589111328125, 459.64996337890625], "page": 2, "span": [0, 887], "__ref_s3_data": null}], "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.", "type": "paragraph", "payload": null, "name": "Text", "font": null}, {"prov": [{"bbox": [133.76800537109375, 246.44935607910156, 477.4748229980469, 316.1879577636719], "page": 2, "span": [0, 415], "__ref_s3_data": null}], "text": "Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.", "type": "paragraph", "payload": null, "name": "Text", "font": null}, {"prov": [{"bbox": [133.76800537109375, 174.71835327148438, 477.4748229980469, 244.4569549560547], "page": 2, "span": [0, 415], "__ref_s3_data": null}], "text": "Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.", "type": "paragraph", "payload": null, "name": "Text", "font": null}, {"prov": [{"bbox": [303.13299560546875, 136.7633514404297, 308.1142883300781, 146.7259521484375], "page": 2, "span": [0, 1], "__ref_s3_data": null}], "text": "1", "type": "page-footer", "payload": null, "name": "Page-footer", "font": null}], "figures": [], "tables": [], "bitmaps": null, "equations": [], "footnotes": [], "page-dimensions": [{"height": 792.0, "page": 1, "width": 612.0}, {"height": 841.8900146484375, "page": 2, "width": 595.2760009765625}], "page-footers": [], "page-headers": [], "_s3_data": null, "identifiers": null} \ No newline at end of file diff --git a/tests/data/groundtruth/docling_v1/code_and_formula.md b/tests/data/groundtruth/docling_v1/code_and_formula.md new file mode 100644 index 00000000..4d77dc5c --- /dev/null +++ b/tests/data/groundtruth/docling_v1/code_and_formula.md @@ -0,0 +1,19 @@ +## Java Code Example + +Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. + +Listing 1: Simple Java Program + +public static void print() { System.out.println( "Java Code" ); } + +Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. + +## Formula + +Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. + +Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt. + +Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. + +Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. \ No newline at end of file diff --git a/tests/data/groundtruth/docling_v1/code_and_formula.pages.json b/tests/data/groundtruth/docling_v1/code_and_formula.pages.json new file mode 100644 index 00000000..27682fdd --- /dev/null +++ b/tests/data/groundtruth/docling_v1/code_and_formula.pages.json @@ -0,0 +1 @@ +[{"page_no": 0, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Java Code Example", "bbox": {"l": 133.76801, "t": 124.00536999999997, "r": 273.45401, "b": 138.36590999999999, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eir-", "bbox": {"l": 133.76801, "t": 149.11406999999997, "r": 477.47687, "b": 159.07665999999995, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "mod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam volup-", "bbox": {"l": 133.76801, "t": 161.06908999999996, "r": 477.47781000000003, "b": 171.03168000000005, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "tua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd", "bbox": {"l": 133.76801, "t": 173.02405, "r": 477.46985, "b": 182.98663, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ip-", "bbox": {"l": 133.76801, "t": 184.97906, "r": 477.47186, "b": 194.94164999999998, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "sum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor", "bbox": {"l": 133.76801, "t": 196.93408, "r": 477.46993999999995, "b": 206.89666999999997, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero", "bbox": {"l": 133.76801, "t": 208.88909999999998, "r": 477.4806500000001, "b": 218.85168, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "eos et accusam et justo duo dolores et ea rebum.", "bbox": {"l": 133.76801, "t": 220.84509000000003, "r": 355.20087, "b": 230.80768, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Stet clita kasd gubergren,", "bbox": {"l": 362.60107, "t": 220.84509000000003, "r": 477.47495000000004, "b": 230.80768, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor", "bbox": {"l": 133.76801, "t": 232.80005000000006, "r": 477.47083, "b": 242.76262999999994, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt", "bbox": {"l": 133.76801, "t": 244.75507000000005, "r": 477.47092, "b": 254.71765000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et", "bbox": {"l": 133.76801, "t": 256.71007999999995, "r": 477.46588, "b": 266.67267000000004, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea", "bbox": {"l": 133.76801, "t": 268.66510000000005, "r": 477.47586, "b": 278.62769000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "takimata sanctus est Lorem ipsum dolor sit amet.", "bbox": {"l": 133.76801, "t": 280.62103, "r": 351.47672, "b": 290.58365, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Listing 1: Simple Java Program", "bbox": {"l": 236.17598999999998, "t": 301.54204999999996, "r": 375.06958, "b": 311.50467, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "public static void", "bbox": {"l": 134.575, "t": 317.79947000000004, "r": 235.44695, "b": 326.14719, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "print() {", "bbox": {"l": 241.8759, "t": 317.79947000000004, "r": 292.24908, "b": 326.14719, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "System.out.println(", "bbox": {"l": 157.17101, "t": 328.75745, "r": 264.02368, "b": 337.10516000000007, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "\"Java Code\"", "bbox": {"l": 264.15811, "t": 328.75745, "r": 325.35376, "b": 337.10516000000007, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": ");", "bbox": {"l": 326.2952, "t": 328.75745, "r": 337.59286, "b": 337.10516000000007, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "}", "bbox": {"l": 134.239, "t": 339.71646, "r": 138.94637, "b": 348.06418, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy", "bbox": {"l": 148.71201, "t": 359.72406, "r": 477.46985, "b": 369.68667999999997, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam", "bbox": {"l": 133.76801, "t": 371.67905, "r": 477.4758, "b": 381.64166000000006, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita", "bbox": {"l": 133.76801, "t": 383.63403, "r": 477.4758, "b": 393.59665, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem", "bbox": {"l": 133.76801, "t": 395.58905, "r": 477.47284, "b": 405.55167, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod", "bbox": {"l": 133.76801, "t": 407.54404, "r": 477.47589, "b": 417.50665, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At", "bbox": {"l": 133.76801, "t": 419.50003000000004, "r": 477.47177000000005, "b": 429.46265, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren,", "bbox": {"l": 133.76801, "t": 431.45505, "r": 477.47387999999995, "b": 441.41766000000007, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor", "bbox": {"l": 133.76801, "t": 443.41003, "r": 477.47083, "b": 453.37265, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt", "bbox": {"l": 133.76801, "t": 455.36505, "r": 477.47092, "b": 465.32767, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et", "bbox": {"l": 133.76801, "t": 467.32004, "r": 477.46585, "b": 477.28265, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea", "bbox": {"l": 133.76801, "t": 479.27603, "r": 477.47586, "b": 489.23865, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "takimata sanctus est Lorem ipsum dolor sit amet.", "bbox": {"l": 133.76801, "t": 491.23105, "r": 351.47672, "b": 501.19366, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "1", "bbox": {"l": 303.133, "t": 695.163055, "r": 308.11429, "b": 705.125648, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 2, "label": "section_header", "bbox": {"l": 133.76801, "t": 124.00536999999997, "r": 273.45401, "b": 138.36590999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9581764936447144, "cells": [{"id": 0, "text": "Java Code Example", "bbox": {"l": 133.76801, "t": 124.00536999999997, "r": 273.45401, "b": 138.36590999999999, "coord_origin": "TOPLEFT"}}], "children": []}, {"id": 0, "label": "text", "bbox": {"l": 133.76801, "t": 149.11406999999997, "r": 477.4806500000001, "b": 290.58365, "coord_origin": "TOPLEFT"}, "confidence": 0.9872456789016724, "cells": [{"id": 1, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eir-", "bbox": {"l": 133.76801, "t": 149.11406999999997, "r": 477.47687, "b": 159.07665999999995, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "mod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam volup-", "bbox": {"l": 133.76801, "t": 161.06908999999996, "r": 477.47781000000003, "b": 171.03168000000005, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "tua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd", "bbox": {"l": 133.76801, "t": 173.02405, "r": 477.46985, "b": 182.98663, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ip-", "bbox": {"l": 133.76801, "t": 184.97906, "r": 477.47186, "b": 194.94164999999998, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "sum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor", "bbox": {"l": 133.76801, "t": 196.93408, "r": 477.46993999999995, "b": 206.89666999999997, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero", "bbox": {"l": 133.76801, "t": 208.88909999999998, "r": 477.4806500000001, "b": 218.85168, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "eos et accusam et justo duo dolores et ea rebum.", "bbox": {"l": 133.76801, "t": 220.84509000000003, "r": 355.20087, "b": 230.80768, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Stet clita kasd gubergren,", "bbox": {"l": 362.60107, "t": 220.84509000000003, "r": 477.47495000000004, "b": 230.80768, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor", "bbox": {"l": 133.76801, "t": 232.80005000000006, "r": 477.47083, "b": 242.76262999999994, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt", "bbox": {"l": 133.76801, "t": 244.75507000000005, "r": 477.47092, "b": 254.71765000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et", "bbox": {"l": 133.76801, "t": 256.71007999999995, "r": 477.46588, "b": 266.67267000000004, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea", "bbox": {"l": 133.76801, "t": 268.66510000000005, "r": 477.47586, "b": 278.62769000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "takimata sanctus est Lorem ipsum dolor sit amet.", "bbox": {"l": 133.76801, "t": 280.62103, "r": 351.47672, "b": 290.58365, "coord_origin": "TOPLEFT"}}], "children": []}, {"id": 5, "label": "caption", "bbox": {"l": 236.17598999999998, "t": 301.54204999999996, "r": 375.06958, "b": 311.50467, "coord_origin": "TOPLEFT"}, "confidence": 0.5425266027450562, "cells": [{"id": 14, "text": "Listing 1: Simple Java Program", "bbox": {"l": 236.17598999999998, "t": 301.54204999999996, "r": 375.06958, "b": 311.50467, "coord_origin": "TOPLEFT"}}], "children": []}, {"id": 4, "label": "code", "bbox": {"l": 134.239, "t": 317.79947000000004, "r": 337.59286, "b": 348.06418, "coord_origin": "TOPLEFT"}, "confidence": 0.6383119821548462, "cells": [{"id": 15, "text": "public static void", "bbox": {"l": 134.575, "t": 317.79947000000004, "r": 235.44695, "b": 326.14719, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "print() {", "bbox": {"l": 241.8759, "t": 317.79947000000004, "r": 292.24908, "b": 326.14719, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "System.out.println(", "bbox": {"l": 157.17101, "t": 328.75745, "r": 264.02368, "b": 337.10516000000007, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "\"Java Code\"", "bbox": {"l": 264.15811, "t": 328.75745, "r": 325.35376, "b": 337.10516000000007, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": ");", "bbox": {"l": 326.2952, "t": 328.75745, "r": 337.59286, "b": 337.10516000000007, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "}", "bbox": {"l": 134.239, "t": 339.71646, "r": 138.94637, "b": 348.06418, "coord_origin": "TOPLEFT"}}], "children": []}, {"id": 1, "label": "text", "bbox": {"l": 133.76801, "t": 359.72406, "r": 477.47589, "b": 501.19366, "coord_origin": "TOPLEFT"}, "confidence": 0.9869542717933655, "cells": [{"id": 21, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy", "bbox": {"l": 148.71201, "t": 359.72406, "r": 477.46985, "b": 369.68667999999997, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam", "bbox": {"l": 133.76801, "t": 371.67905, "r": 477.4758, "b": 381.64166000000006, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita", "bbox": {"l": 133.76801, "t": 383.63403, "r": 477.4758, "b": 393.59665, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem", "bbox": {"l": 133.76801, "t": 395.58905, "r": 477.47284, "b": 405.55167, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod", "bbox": {"l": 133.76801, "t": 407.54404, "r": 477.47589, "b": 417.50665, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At", "bbox": {"l": 133.76801, "t": 419.50003000000004, "r": 477.47177000000005, "b": 429.46265, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren,", "bbox": {"l": 133.76801, "t": 431.45505, "r": 477.47387999999995, "b": 441.41766000000007, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor", "bbox": {"l": 133.76801, "t": 443.41003, "r": 477.47083, "b": 453.37265, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt", "bbox": {"l": 133.76801, "t": 455.36505, "r": 477.47092, "b": 465.32767, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et", "bbox": {"l": 133.76801, "t": 467.32004, "r": 477.46585, "b": 477.28265, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea", "bbox": {"l": 133.76801, "t": 479.27603, "r": 477.47586, "b": 489.23865, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "takimata sanctus est Lorem ipsum dolor sit amet.", "bbox": {"l": 133.76801, "t": 491.23105, "r": 351.47672, "b": 501.19366, "coord_origin": "TOPLEFT"}}], "children": []}, {"id": 3, "label": "page_footer", "bbox": {"l": 303.133, "t": 695.163055, "r": 308.11429, "b": 705.125648, "coord_origin": "TOPLEFT"}, "confidence": 0.8374724984169006, "cells": [{"id": 33, "text": "1", "bbox": {"l": 303.133, "t": 695.163055, "r": 308.11429, "b": 705.125648, "coord_origin": "TOPLEFT"}}], "children": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "section_header", "id": 2, "page_no": 0, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 133.76801, "t": 124.00536999999997, "r": 273.45401, "b": 138.36590999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9581764936447144, "cells": [{"id": 0, "text": "Java Code Example", "bbox": {"l": 133.76801, "t": 124.00536999999997, "r": 273.45401, "b": 138.36590999999999, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "Java Code Example"}, {"label": "text", "id": 0, "page_no": 0, "cluster": {"id": 0, "label": "text", "bbox": {"l": 133.76801, "t": 149.11406999999997, "r": 477.4806500000001, "b": 290.58365, "coord_origin": "TOPLEFT"}, "confidence": 0.9872456789016724, "cells": [{"id": 1, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eir-", "bbox": {"l": 133.76801, "t": 149.11406999999997, "r": 477.47687, "b": 159.07665999999995, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "mod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam volup-", "bbox": {"l": 133.76801, "t": 161.06908999999996, "r": 477.47781000000003, "b": 171.03168000000005, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "tua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd", "bbox": {"l": 133.76801, "t": 173.02405, "r": 477.46985, "b": 182.98663, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ip-", "bbox": {"l": 133.76801, "t": 184.97906, "r": 477.47186, "b": 194.94164999999998, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "sum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor", "bbox": {"l": 133.76801, "t": 196.93408, "r": 477.46993999999995, "b": 206.89666999999997, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero", "bbox": {"l": 133.76801, "t": 208.88909999999998, "r": 477.4806500000001, "b": 218.85168, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "eos et accusam et justo duo dolores et ea rebum.", "bbox": {"l": 133.76801, "t": 220.84509000000003, "r": 355.20087, "b": 230.80768, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Stet clita kasd gubergren,", "bbox": {"l": 362.60107, "t": 220.84509000000003, "r": 477.47495000000004, "b": 230.80768, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor", "bbox": {"l": 133.76801, "t": 232.80005000000006, "r": 477.47083, "b": 242.76262999999994, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt", "bbox": {"l": 133.76801, "t": 244.75507000000005, "r": 477.47092, "b": 254.71765000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et", "bbox": {"l": 133.76801, "t": 256.71007999999995, "r": 477.46588, "b": 266.67267000000004, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea", "bbox": {"l": 133.76801, "t": 268.66510000000005, "r": 477.47586, "b": 278.62769000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "takimata sanctus est Lorem ipsum dolor sit amet.", "bbox": {"l": 133.76801, "t": 280.62103, "r": 351.47672, "b": 290.58365, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet."}, {"label": "caption", "id": 5, "page_no": 0, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 236.17598999999998, "t": 301.54204999999996, "r": 375.06958, "b": 311.50467, "coord_origin": "TOPLEFT"}, "confidence": 0.5425266027450562, "cells": [{"id": 14, "text": "Listing 1: Simple Java Program", "bbox": {"l": 236.17598999999998, "t": 301.54204999999996, "r": 375.06958, "b": 311.50467, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "Listing 1: Simple Java Program"}, {"label": "code", "id": 4, "page_no": 0, "cluster": {"id": 4, "label": "code", "bbox": {"l": 134.239, "t": 317.79947000000004, "r": 337.59286, "b": 348.06418, "coord_origin": "TOPLEFT"}, "confidence": 0.6383119821548462, "cells": [{"id": 15, "text": "public static void", "bbox": {"l": 134.575, "t": 317.79947000000004, "r": 235.44695, "b": 326.14719, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "print() {", "bbox": {"l": 241.8759, "t": 317.79947000000004, "r": 292.24908, "b": 326.14719, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "System.out.println(", "bbox": {"l": 157.17101, "t": 328.75745, "r": 264.02368, "b": 337.10516000000007, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "\"Java Code\"", "bbox": {"l": 264.15811, "t": 328.75745, "r": 325.35376, "b": 337.10516000000007, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": ");", "bbox": {"l": 326.2952, "t": 328.75745, "r": 337.59286, "b": 337.10516000000007, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "}", "bbox": {"l": 134.239, "t": 339.71646, "r": 138.94637, "b": 348.06418, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "public static void print() { System.out.println( \"Java Code\" ); }"}, {"label": "text", "id": 1, "page_no": 0, "cluster": {"id": 1, "label": "text", "bbox": {"l": 133.76801, "t": 359.72406, "r": 477.47589, "b": 501.19366, "coord_origin": "TOPLEFT"}, "confidence": 0.9869542717933655, "cells": [{"id": 21, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy", "bbox": {"l": 148.71201, "t": 359.72406, "r": 477.46985, "b": 369.68667999999997, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam", "bbox": {"l": 133.76801, "t": 371.67905, "r": 477.4758, "b": 381.64166000000006, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita", "bbox": {"l": 133.76801, "t": 383.63403, "r": 477.4758, "b": 393.59665, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem", "bbox": {"l": 133.76801, "t": 395.58905, "r": 477.47284, "b": 405.55167, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod", "bbox": {"l": 133.76801, "t": 407.54404, "r": 477.47589, "b": 417.50665, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At", "bbox": {"l": 133.76801, "t": 419.50003000000004, "r": 477.47177000000005, "b": 429.46265, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren,", "bbox": {"l": 133.76801, "t": 431.45505, "r": 477.47387999999995, "b": 441.41766000000007, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor", "bbox": {"l": 133.76801, "t": 443.41003, "r": 477.47083, "b": 453.37265, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt", "bbox": {"l": 133.76801, "t": 455.36505, "r": 477.47092, "b": 465.32767, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et", "bbox": {"l": 133.76801, "t": 467.32004, "r": 477.46585, "b": 477.28265, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea", "bbox": {"l": 133.76801, "t": 479.27603, "r": 477.47586, "b": 489.23865, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "takimata sanctus est Lorem ipsum dolor sit amet.", "bbox": {"l": 133.76801, "t": 491.23105, "r": 351.47672, "b": 501.19366, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet."}, {"label": "page_footer", "id": 3, "page_no": 0, "cluster": {"id": 3, "label": "page_footer", "bbox": {"l": 303.133, "t": 695.163055, "r": 308.11429, "b": 705.125648, "coord_origin": "TOPLEFT"}, "confidence": 0.8374724984169006, "cells": [{"id": 33, "text": "1", "bbox": {"l": 303.133, "t": 695.163055, "r": 308.11429, "b": 705.125648, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "1"}], "body": [{"label": "section_header", "id": 2, "page_no": 0, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 133.76801, "t": 124.00536999999997, "r": 273.45401, "b": 138.36590999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9581764936447144, "cells": [{"id": 0, "text": "Java Code Example", "bbox": {"l": 133.76801, "t": 124.00536999999997, "r": 273.45401, "b": 138.36590999999999, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "Java Code Example"}, {"label": "text", "id": 0, "page_no": 0, "cluster": {"id": 0, "label": "text", "bbox": {"l": 133.76801, "t": 149.11406999999997, "r": 477.4806500000001, "b": 290.58365, "coord_origin": "TOPLEFT"}, "confidence": 0.9872456789016724, "cells": [{"id": 1, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eir-", "bbox": {"l": 133.76801, "t": 149.11406999999997, "r": 477.47687, "b": 159.07665999999995, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "mod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam volup-", "bbox": {"l": 133.76801, "t": 161.06908999999996, "r": 477.47781000000003, "b": 171.03168000000005, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "tua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd", "bbox": {"l": 133.76801, "t": 173.02405, "r": 477.46985, "b": 182.98663, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ip-", "bbox": {"l": 133.76801, "t": 184.97906, "r": 477.47186, "b": 194.94164999999998, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "sum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor", "bbox": {"l": 133.76801, "t": 196.93408, "r": 477.46993999999995, "b": 206.89666999999997, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero", "bbox": {"l": 133.76801, "t": 208.88909999999998, "r": 477.4806500000001, "b": 218.85168, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "eos et accusam et justo duo dolores et ea rebum.", "bbox": {"l": 133.76801, "t": 220.84509000000003, "r": 355.20087, "b": 230.80768, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Stet clita kasd gubergren,", "bbox": {"l": 362.60107, "t": 220.84509000000003, "r": 477.47495000000004, "b": 230.80768, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor", "bbox": {"l": 133.76801, "t": 232.80005000000006, "r": 477.47083, "b": 242.76262999999994, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt", "bbox": {"l": 133.76801, "t": 244.75507000000005, "r": 477.47092, "b": 254.71765000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et", "bbox": {"l": 133.76801, "t": 256.71007999999995, "r": 477.46588, "b": 266.67267000000004, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea", "bbox": {"l": 133.76801, "t": 268.66510000000005, "r": 477.47586, "b": 278.62769000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "takimata sanctus est Lorem ipsum dolor sit amet.", "bbox": {"l": 133.76801, "t": 280.62103, "r": 351.47672, "b": 290.58365, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet."}, {"label": "caption", "id": 5, "page_no": 0, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 236.17598999999998, "t": 301.54204999999996, "r": 375.06958, "b": 311.50467, "coord_origin": "TOPLEFT"}, "confidence": 0.5425266027450562, "cells": [{"id": 14, "text": "Listing 1: Simple Java Program", "bbox": {"l": 236.17598999999998, "t": 301.54204999999996, "r": 375.06958, "b": 311.50467, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "Listing 1: Simple Java Program"}, {"label": "code", "id": 4, "page_no": 0, "cluster": {"id": 4, "label": "code", "bbox": {"l": 134.239, "t": 317.79947000000004, "r": 337.59286, "b": 348.06418, "coord_origin": "TOPLEFT"}, "confidence": 0.6383119821548462, "cells": [{"id": 15, "text": "public static void", "bbox": {"l": 134.575, "t": 317.79947000000004, "r": 235.44695, "b": 326.14719, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "print() {", "bbox": {"l": 241.8759, "t": 317.79947000000004, "r": 292.24908, "b": 326.14719, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "System.out.println(", "bbox": {"l": 157.17101, "t": 328.75745, "r": 264.02368, "b": 337.10516000000007, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "\"Java Code\"", "bbox": {"l": 264.15811, "t": 328.75745, "r": 325.35376, "b": 337.10516000000007, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": ");", "bbox": {"l": 326.2952, "t": 328.75745, "r": 337.59286, "b": 337.10516000000007, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "}", "bbox": {"l": 134.239, "t": 339.71646, "r": 138.94637, "b": 348.06418, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "public static void print() { System.out.println( \"Java Code\" ); }"}, {"label": "text", "id": 1, "page_no": 0, "cluster": {"id": 1, "label": "text", "bbox": {"l": 133.76801, "t": 359.72406, "r": 477.47589, "b": 501.19366, "coord_origin": "TOPLEFT"}, "confidence": 0.9869542717933655, "cells": [{"id": 21, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy", "bbox": {"l": 148.71201, "t": 359.72406, "r": 477.46985, "b": 369.68667999999997, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam", "bbox": {"l": 133.76801, "t": 371.67905, "r": 477.4758, "b": 381.64166000000006, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita", "bbox": {"l": 133.76801, "t": 383.63403, "r": 477.4758, "b": 393.59665, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem", "bbox": {"l": 133.76801, "t": 395.58905, "r": 477.47284, "b": 405.55167, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod", "bbox": {"l": 133.76801, "t": 407.54404, "r": 477.47589, "b": 417.50665, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At", "bbox": {"l": 133.76801, "t": 419.50003000000004, "r": 477.47177000000005, "b": 429.46265, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren,", "bbox": {"l": 133.76801, "t": 431.45505, "r": 477.47387999999995, "b": 441.41766000000007, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor", "bbox": {"l": 133.76801, "t": 443.41003, "r": 477.47083, "b": 453.37265, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt", "bbox": {"l": 133.76801, "t": 455.36505, "r": 477.47092, "b": 465.32767, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et", "bbox": {"l": 133.76801, "t": 467.32004, "r": 477.46585, "b": 477.28265, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea", "bbox": {"l": 133.76801, "t": 479.27603, "r": 477.47586, "b": 489.23865, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "takimata sanctus est Lorem ipsum dolor sit amet.", "bbox": {"l": 133.76801, "t": 491.23105, "r": 351.47672, "b": 501.19366, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet."}], "headers": [{"label": "page_footer", "id": 3, "page_no": 0, "cluster": {"id": 3, "label": "page_footer", "bbox": {"l": 303.133, "t": 695.163055, "r": 308.11429, "b": 705.125648, "coord_origin": "TOPLEFT"}, "confidence": 0.8374724984169006, "cells": [{"id": 33, "text": "1", "bbox": {"l": 303.133, "t": 695.163055, "r": 308.11429, "b": 705.125648, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "1"}]}}, {"page_no": 1, "size": {"width": 595.2760009765625, "height": 841.8900146484375}, "cells": [{"id": 0, "text": "Formula", "bbox": {"l": 133.76801021944917, "t": 124.00537068468714, "r": 191.51430031418315, "b": 138.36590076397772, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eir-", "bbox": {"l": 133.76801021944917, "t": 149.114070823323, "r": 477.47687078331063, "b": 159.0766608783307, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "mod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam volup-", "bbox": {"l": 133.76801021944917, "t": 161.06909088933185, "r": 477.4778107833122, "b": 171.03167094433945, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "tua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd", "bbox": {"l": 133.76801021944917, "t": 173.0241009553406, "r": 477.46985078329914, "b": 182.9866910103483, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ip-", "bbox": {"l": 133.76801021944917, "t": 184.97906102134914, "r": 477.4718607833024, "b": 194.94165107635683, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "sum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor", "bbox": {"l": 133.76801021944917, "t": 196.93511108736357, "r": 477.4699407832993, "b": 206.89770114237137, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero", "bbox": {"l": 133.76801021944917, "t": 208.890071153372, "r": 477.4806507833169, "b": 218.8526612083799, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "eos et accusam et justo duo dolores et ea rebum.", "bbox": {"l": 133.76801021944917, "t": 220.84509121938083, "r": 355.20087058271434, "b": 230.80767127438855, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Stet clita kasd gubergren,", "bbox": {"l": 362.6010705948545, "t": 220.84509121938083, "r": 477.4749507833075, "b": 230.80767127438855, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor", "bbox": {"l": 133.76801021944917, "t": 232.8001112853898, "r": 477.4708307833007, "b": 242.76269134039728, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt", "bbox": {"l": 133.76801021944917, "t": 244.75506135139813, "r": 477.4709207833008, "b": 254.71765140640582, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et", "bbox": {"l": 133.76801021944917, "t": 256.71008141740685, "r": 477.4658807832926, "b": 266.6726614724146, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea", "bbox": {"l": 133.76801021944917, "t": 268.6660714834211, "r": 477.47586078330903, "b": 278.6286615384289, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "takimata sanctus est Lorem ipsum dolor sit amet.", "bbox": {"l": 133.76801021944917, "t": 280.62109154942993, "r": 351.4767205766048, "b": 290.58367160443765, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie", "bbox": {"l": 148.71201024396512, "t": 292.5761116154388, "r": 477.4710707833011, "b": 302.5386916704465, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et", "bbox": {"l": 133.76801021944917, "t": 304.5310616814471, "r": 477.47293078330415, "b": 314.4936517364549, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore", "bbox": {"l": 133.76801021944917, "t": 316.48608174745607, "r": 477.47482078330734, "b": 326.4486618024637, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit,", "bbox": {"l": 133.76801021944917, "t": 328.4411018134648, "r": 477.472810783304, "b": 338.40368186847246, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "sed diam nonummy nibh euismod tincidunt.", "bbox": {"l": 133.76801021944917, "t": 340.3970618794788, "r": 326.20752053515014, "b": 350.3596819344868, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "a", "bbox": {"l": 280.5539904602546, "t": 364.3070620114962, "r": 285.8142404688841, "b": 374.2696820665041, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "2", "bbox": {"l": 285.8200104688936, "t": 362.4346620011579, "r": 289.78809047540335, "b": 369.40844203966316, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "+ 8 = 12", "bbox": {"l": 292.50400047985886, "t": 364.3070620114962, "r": 330.6965905425146, "b": 374.2696820665041, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy", "bbox": {"l": 148.71201024396512, "t": 382.24005211051195, "r": 477.4698807832991, "b": 392.2026621655199, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam", "bbox": {"l": 133.76801021944917, "t": 394.19506217652076, "r": 477.47580078330884, "b": 404.15768223152867, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita", "bbox": {"l": 133.76801021944917, "t": 406.15005224252945, "r": 477.47580078330884, "b": 416.1126722975373, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem", "bbox": {"l": 133.76801021944917, "t": 418.10507230853824, "r": 477.47284078330404, "b": 428.06768236354606, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod", "bbox": {"l": 133.76801021944917, "t": 430.0600523745468, "r": 477.47589078330907, "b": 440.0226724295547, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At", "bbox": {"l": 133.76801021944917, "t": 442.01605244056105, "r": 477.4717707833023, "b": 451.97866249556887, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren,", "bbox": {"l": 133.76801021944917, "t": 453.9710625065698, "r": 477.47388078330573, "b": 463.93368256157777, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor", "bbox": {"l": 133.76801021944917, "t": 465.9260525725785, "r": 477.4708307833007, "b": 475.88867262758635, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt", "bbox": {"l": 133.76801021944917, "t": 477.8810726385873, "r": 477.4709207833008, "b": 487.84368269359516, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et", "bbox": {"l": 133.76801021944917, "t": 489.8360527045959, "r": 477.4658807832926, "b": 499.7986727596038, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea", "bbox": {"l": 133.76801021944917, "t": 501.7910427706045, "r": 477.47586078330903, "b": 511.7536628256125, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "takimata sanctus est Lorem ipsum dolor sit amet.", "bbox": {"l": 133.76801021944917, "t": 513.7470728366188, "r": 351.4767205766048, "b": 523.7096828916267, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie", "bbox": {"l": 148.71201024396512, "t": 525.7020529026275, "r": 477.4710707833011, "b": 535.6646729576354, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et", "bbox": {"l": 133.76801021944917, "t": 537.6570729686364, "r": 477.47293078330415, "b": 547.6196930236442, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore", "bbox": {"l": 133.76801021944917, "t": 549.612063034645, "r": 477.47482078330734, "b": 559.5746730896528, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit,", "bbox": {"l": 133.76801021944917, "t": 561.5670431006536, "r": 477.472810783304, "b": 571.5296631556615, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat", "bbox": {"l": 133.76801021944917, "t": 573.5220631666624, "r": 477.47479078330724, "b": 583.4846832216704, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "volutpat.", "bbox": {"l": 133.76801021944917, "t": 585.4780532326765, "r": 173.0565202839028, "b": 595.4406532876844, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie", "bbox": {"l": 148.71201024396512, "t": 597.4330632986853, "r": 477.4710707833011, "b": 607.3956633536932, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et", "bbox": {"l": 133.76801021944917, "t": 609.3880633646941, "r": 477.47293078330415, "b": 619.3506634197018, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore", "bbox": {"l": 133.76801021944917, "t": 621.3430634307027, "r": 477.47482078330734, "b": 631.3056634857105, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit,", "bbox": {"l": 133.76801021944917, "t": 633.2980634967114, "r": 477.472810783304, "b": 643.2606635517193, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat", "bbox": {"l": 133.76801021944917, "t": 645.2540535627256, "r": 477.47479078330724, "b": 655.2166536177334, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "volutpat.", "bbox": {"l": 133.76801021944917, "t": 657.2090636287344, "r": 173.0565202839028, "b": 667.1716636837423, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "1", "bbox": {"l": 303.13300049729594, "t": 695.1640638383003, "r": 308.1142905054678, "b": 705.1266638933081, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 5, "label": "section_header", "bbox": {"l": 133.76801021944917, "t": 124.00537068468714, "r": 191.51430031418315, "b": 138.36590076397772, "coord_origin": "TOPLEFT"}, "confidence": 0.95060133934021, "cells": [{"id": 0, "text": "Formula", "bbox": {"l": 133.76801021944917, "t": 124.00537068468714, "r": 191.51430031418315, "b": 138.36590076397772, "coord_origin": "TOPLEFT"}}], "children": []}, {"id": 1, "label": "text", "bbox": {"l": 133.76801021944917, "t": 149.114070823323, "r": 477.4806507833169, "b": 290.58367160443765, "coord_origin": "TOPLEFT"}, "confidence": 0.9878177046775818, "cells": [{"id": 1, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eir-", "bbox": {"l": 133.76801021944917, "t": 149.114070823323, "r": 477.47687078331063, "b": 159.0766608783307, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "mod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam volup-", "bbox": {"l": 133.76801021944917, "t": 161.06909088933185, "r": 477.4778107833122, "b": 171.03167094433945, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "tua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd", "bbox": {"l": 133.76801021944917, "t": 173.0241009553406, "r": 477.46985078329914, "b": 182.9866910103483, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ip-", "bbox": {"l": 133.76801021944917, "t": 184.97906102134914, "r": 477.4718607833024, "b": 194.94165107635683, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "sum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor", "bbox": {"l": 133.76801021944917, "t": 196.93511108736357, "r": 477.4699407832993, "b": 206.89770114237137, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero", "bbox": {"l": 133.76801021944917, "t": 208.890071153372, "r": 477.4806507833169, "b": 218.8526612083799, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "eos et accusam et justo duo dolores et ea rebum.", "bbox": {"l": 133.76801021944917, "t": 220.84509121938083, "r": 355.20087058271434, "b": 230.80767127438855, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Stet clita kasd gubergren,", "bbox": {"l": 362.6010705948545, "t": 220.84509121938083, "r": 477.4749507833075, "b": 230.80767127438855, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor", "bbox": {"l": 133.76801021944917, "t": 232.8001112853898, "r": 477.4708307833007, "b": 242.76269134039728, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt", "bbox": {"l": 133.76801021944917, "t": 244.75506135139813, "r": 477.4709207833008, "b": 254.71765140640582, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et", "bbox": {"l": 133.76801021944917, "t": 256.71008141740685, "r": 477.4658807832926, "b": 266.6726614724146, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea", "bbox": {"l": 133.76801021944917, "t": 268.6660714834211, "r": 477.47586078330903, "b": 278.6286615384289, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "takimata sanctus est Lorem ipsum dolor sit amet.", "bbox": {"l": 133.76801021944917, "t": 280.62109154942993, "r": 351.4767205766048, "b": 290.58367160443765, "coord_origin": "TOPLEFT"}}], "children": []}, {"id": 3, "label": "text", "bbox": {"l": 133.76801021944917, "t": 292.5761116154388, "r": 477.47482078330734, "b": 350.3596819344868, "coord_origin": "TOPLEFT"}, "confidence": 0.9855858683586121, "cells": [{"id": 14, "text": "Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie", "bbox": {"l": 148.71201024396512, "t": 292.5761116154388, "r": 477.4710707833011, "b": 302.5386916704465, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et", "bbox": {"l": 133.76801021944917, "t": 304.5310616814471, "r": 477.47293078330415, "b": 314.4936517364549, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore", "bbox": {"l": 133.76801021944917, "t": 316.48608174745607, "r": 477.47482078330734, "b": 326.4486618024637, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit,", "bbox": {"l": 133.76801021944917, "t": 328.4411018134648, "r": 477.472810783304, "b": 338.40368186847246, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "sed diam nonummy nibh euismod tincidunt.", "bbox": {"l": 133.76801021944917, "t": 340.3970618794788, "r": 326.20752053515014, "b": 350.3596819344868, "coord_origin": "TOPLEFT"}}], "children": []}, {"id": 6, "label": "formula", "bbox": {"l": 280.5539904602546, "t": 362.4346620011579, "r": 330.6965905425146, "b": 374.2696820665041, "coord_origin": "TOPLEFT"}, "confidence": 0.8711639046669006, "cells": [{"id": 19, "text": "a", "bbox": {"l": 280.5539904602546, "t": 364.3070620114962, "r": 285.8142404688841, "b": 374.2696820665041, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "2", "bbox": {"l": 285.8200104688936, "t": 362.4346620011579, "r": 289.78809047540335, "b": 369.40844203966316, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "+ 8 = 12", "bbox": {"l": 292.50400047985886, "t": 364.3070620114962, "r": 330.6965905425146, "b": 374.2696820665041, "coord_origin": "TOPLEFT"}}], "children": []}, {"id": 0, "label": "text", "bbox": {"l": 133.76801021944917, "t": 382.24005211051195, "r": 477.47589078330907, "b": 523.7096828916267, "coord_origin": "TOPLEFT"}, "confidence": 0.9880034923553467, "cells": [{"id": 22, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy", "bbox": {"l": 148.71201024396512, "t": 382.24005211051195, "r": 477.4698807832991, "b": 392.2026621655199, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam", "bbox": {"l": 133.76801021944917, "t": 394.19506217652076, "r": 477.47580078330884, "b": 404.15768223152867, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita", "bbox": {"l": 133.76801021944917, "t": 406.15005224252945, "r": 477.47580078330884, "b": 416.1126722975373, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem", "bbox": {"l": 133.76801021944917, "t": 418.10507230853824, "r": 477.47284078330404, "b": 428.06768236354606, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod", "bbox": {"l": 133.76801021944917, "t": 430.0600523745468, "r": 477.47589078330907, "b": 440.0226724295547, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At", "bbox": {"l": 133.76801021944917, "t": 442.01605244056105, "r": 477.4717707833023, "b": 451.97866249556887, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren,", "bbox": {"l": 133.76801021944917, "t": 453.9710625065698, "r": 477.47388078330573, "b": 463.93368256157777, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor", "bbox": {"l": 133.76801021944917, "t": 465.9260525725785, "r": 477.4708307833007, "b": 475.88867262758635, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt", "bbox": {"l": 133.76801021944917, "t": 477.8810726385873, "r": 477.4709207833008, "b": 487.84368269359516, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et", "bbox": {"l": 133.76801021944917, "t": 489.8360527045959, "r": 477.4658807832926, "b": 499.7986727596038, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea", "bbox": {"l": 133.76801021944917, "t": 501.7910427706045, "r": 477.47586078330903, "b": 511.7536628256125, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "takimata sanctus est Lorem ipsum dolor sit amet.", "bbox": {"l": 133.76801021944917, "t": 513.7470728366188, "r": 351.4767205766048, "b": 523.7096828916267, "coord_origin": "TOPLEFT"}}], "children": []}, {"id": 4, "label": "text", "bbox": {"l": 133.76801021944917, "t": 525.7020529026275, "r": 477.47482078330734, "b": 595.4406532876844, "coord_origin": "TOPLEFT"}, "confidence": 0.9844803214073181, "cells": [{"id": 34, "text": "Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie", "bbox": {"l": 148.71201024396512, "t": 525.7020529026275, "r": 477.4710707833011, "b": 535.6646729576354, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et", "bbox": {"l": 133.76801021944917, "t": 537.6570729686364, "r": 477.47293078330415, "b": 547.6196930236442, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore", "bbox": {"l": 133.76801021944917, "t": 549.612063034645, "r": 477.47482078330734, "b": 559.5746730896528, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit,", "bbox": {"l": 133.76801021944917, "t": 561.5670431006536, "r": 477.472810783304, "b": 571.5296631556615, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat", "bbox": {"l": 133.76801021944917, "t": 573.5220631666624, "r": 477.47479078330724, "b": 583.4846832216704, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "volutpat.", "bbox": {"l": 133.76801021944917, "t": 585.4780532326765, "r": 173.0565202839028, "b": 595.4406532876844, "coord_origin": "TOPLEFT"}}], "children": []}, {"id": 2, "label": "text", "bbox": {"l": 133.76801021944917, "t": 597.4330632986853, "r": 477.47482078330734, "b": 667.1716636837423, "coord_origin": "TOPLEFT"}, "confidence": 0.9872003793716431, "cells": [{"id": 40, "text": "Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie", "bbox": {"l": 148.71201024396512, "t": 597.4330632986853, "r": 477.4710707833011, "b": 607.3956633536932, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et", "bbox": {"l": 133.76801021944917, "t": 609.3880633646941, "r": 477.47293078330415, "b": 619.3506634197018, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore", "bbox": {"l": 133.76801021944917, "t": 621.3430634307027, "r": 477.47482078330734, "b": 631.3056634857105, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit,", "bbox": {"l": 133.76801021944917, "t": 633.2980634967114, "r": 477.472810783304, "b": 643.2606635517193, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat", "bbox": {"l": 133.76801021944917, "t": 645.2540535627256, "r": 477.47479078330724, "b": 655.2166536177334, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "volutpat.", "bbox": {"l": 133.76801021944917, "t": 657.2090636287344, "r": 173.0565202839028, "b": 667.1716636837423, "coord_origin": "TOPLEFT"}}], "children": []}, {"id": 7, "label": "page_footer", "bbox": {"l": 303.13300049729594, "t": 695.1640638383003, "r": 308.1142905054678, "b": 705.1266638933081, "coord_origin": "TOPLEFT"}, "confidence": 0.850279688835144, "cells": [{"id": 46, "text": "1", "bbox": {"l": 303.13300049729594, "t": 695.1640638383003, "r": 308.1142905054678, "b": 705.1266638933081, "coord_origin": "TOPLEFT"}}], "children": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "section_header", "id": 5, "page_no": 1, "cluster": {"id": 5, "label": "section_header", "bbox": {"l": 133.76801021944917, "t": 124.00537068468714, "r": 191.51430031418315, "b": 138.36590076397772, "coord_origin": "TOPLEFT"}, "confidence": 0.95060133934021, "cells": [{"id": 0, "text": "Formula", "bbox": {"l": 133.76801021944917, "t": 124.00537068468714, "r": 191.51430031418315, "b": 138.36590076397772, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "Formula"}, {"label": "text", "id": 1, "page_no": 1, "cluster": {"id": 1, "label": "text", "bbox": {"l": 133.76801021944917, "t": 149.114070823323, "r": 477.4806507833169, "b": 290.58367160443765, "coord_origin": "TOPLEFT"}, "confidence": 0.9878177046775818, "cells": [{"id": 1, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eir-", "bbox": {"l": 133.76801021944917, "t": 149.114070823323, "r": 477.47687078331063, "b": 159.0766608783307, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "mod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam volup-", "bbox": {"l": 133.76801021944917, "t": 161.06909088933185, "r": 477.4778107833122, "b": 171.03167094433945, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "tua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd", "bbox": {"l": 133.76801021944917, "t": 173.0241009553406, "r": 477.46985078329914, "b": 182.9866910103483, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ip-", "bbox": {"l": 133.76801021944917, "t": 184.97906102134914, "r": 477.4718607833024, "b": 194.94165107635683, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "sum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor", "bbox": {"l": 133.76801021944917, "t": 196.93511108736357, "r": 477.4699407832993, "b": 206.89770114237137, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero", "bbox": {"l": 133.76801021944917, "t": 208.890071153372, "r": 477.4806507833169, "b": 218.8526612083799, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "eos et accusam et justo duo dolores et ea rebum.", "bbox": {"l": 133.76801021944917, "t": 220.84509121938083, "r": 355.20087058271434, "b": 230.80767127438855, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Stet clita kasd gubergren,", "bbox": {"l": 362.6010705948545, "t": 220.84509121938083, "r": 477.4749507833075, "b": 230.80767127438855, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor", "bbox": {"l": 133.76801021944917, "t": 232.8001112853898, "r": 477.4708307833007, "b": 242.76269134039728, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt", "bbox": {"l": 133.76801021944917, "t": 244.75506135139813, "r": 477.4709207833008, "b": 254.71765140640582, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et", "bbox": {"l": 133.76801021944917, "t": 256.71008141740685, "r": 477.4658807832926, "b": 266.6726614724146, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea", "bbox": {"l": 133.76801021944917, "t": 268.6660714834211, "r": 477.47586078330903, "b": 278.6286615384289, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "takimata sanctus est Lorem ipsum dolor sit amet.", "bbox": {"l": 133.76801021944917, "t": 280.62109154942993, "r": 351.4767205766048, "b": 290.58367160443765, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet."}, {"label": "text", "id": 3, "page_no": 1, "cluster": {"id": 3, "label": "text", "bbox": {"l": 133.76801021944917, "t": 292.5761116154388, "r": 477.47482078330734, "b": 350.3596819344868, "coord_origin": "TOPLEFT"}, "confidence": 0.9855858683586121, "cells": [{"id": 14, "text": "Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie", "bbox": {"l": 148.71201024396512, "t": 292.5761116154388, "r": 477.4710707833011, "b": 302.5386916704465, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et", "bbox": {"l": 133.76801021944917, "t": 304.5310616814471, "r": 477.47293078330415, "b": 314.4936517364549, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore", "bbox": {"l": 133.76801021944917, "t": 316.48608174745607, "r": 477.47482078330734, "b": 326.4486618024637, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit,", "bbox": {"l": 133.76801021944917, "t": 328.4411018134648, "r": 477.472810783304, "b": 338.40368186847246, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "sed diam nonummy nibh euismod tincidunt.", "bbox": {"l": 133.76801021944917, "t": 340.3970618794788, "r": 326.20752053515014, "b": 350.3596819344868, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt."}, {"label": "formula", "id": 6, "page_no": 1, "cluster": {"id": 6, "label": "formula", "bbox": {"l": 280.5539904602546, "t": 362.4346620011579, "r": 330.6965905425146, "b": 374.2696820665041, "coord_origin": "TOPLEFT"}, "confidence": 0.8711639046669006, "cells": [{"id": 19, "text": "a", "bbox": {"l": 280.5539904602546, "t": 364.3070620114962, "r": 285.8142404688841, "b": 374.2696820665041, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "2", "bbox": {"l": 285.8200104688936, "t": 362.4346620011579, "r": 289.78809047540335, "b": 369.40844203966316, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "+ 8 = 12", "bbox": {"l": 292.50400047985886, "t": 364.3070620114962, "r": 330.6965905425146, "b": 374.2696820665041, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "a 2 + 8 = 12"}, {"label": "text", "id": 0, "page_no": 1, "cluster": {"id": 0, "label": "text", "bbox": {"l": 133.76801021944917, "t": 382.24005211051195, "r": 477.47589078330907, "b": 523.7096828916267, "coord_origin": "TOPLEFT"}, "confidence": 0.9880034923553467, "cells": [{"id": 22, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy", "bbox": {"l": 148.71201024396512, "t": 382.24005211051195, "r": 477.4698807832991, "b": 392.2026621655199, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam", "bbox": {"l": 133.76801021944917, "t": 394.19506217652076, "r": 477.47580078330884, "b": 404.15768223152867, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita", "bbox": {"l": 133.76801021944917, "t": 406.15005224252945, "r": 477.47580078330884, "b": 416.1126722975373, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem", "bbox": {"l": 133.76801021944917, "t": 418.10507230853824, "r": 477.47284078330404, "b": 428.06768236354606, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod", "bbox": {"l": 133.76801021944917, "t": 430.0600523745468, "r": 477.47589078330907, "b": 440.0226724295547, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At", "bbox": {"l": 133.76801021944917, "t": 442.01605244056105, "r": 477.4717707833023, "b": 451.97866249556887, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren,", "bbox": {"l": 133.76801021944917, "t": 453.9710625065698, "r": 477.47388078330573, "b": 463.93368256157777, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor", "bbox": {"l": 133.76801021944917, "t": 465.9260525725785, "r": 477.4708307833007, "b": 475.88867262758635, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt", "bbox": {"l": 133.76801021944917, "t": 477.8810726385873, "r": 477.4709207833008, "b": 487.84368269359516, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et", "bbox": {"l": 133.76801021944917, "t": 489.8360527045959, "r": 477.4658807832926, "b": 499.7986727596038, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea", "bbox": {"l": 133.76801021944917, "t": 501.7910427706045, "r": 477.47586078330903, "b": 511.7536628256125, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "takimata sanctus est Lorem ipsum dolor sit amet.", "bbox": {"l": 133.76801021944917, "t": 513.7470728366188, "r": 351.4767205766048, "b": 523.7096828916267, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet."}, {"label": "text", "id": 4, "page_no": 1, "cluster": {"id": 4, "label": "text", "bbox": {"l": 133.76801021944917, "t": 525.7020529026275, "r": 477.47482078330734, "b": 595.4406532876844, "coord_origin": "TOPLEFT"}, "confidence": 0.9844803214073181, "cells": [{"id": 34, "text": "Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie", "bbox": {"l": 148.71201024396512, "t": 525.7020529026275, "r": 477.4710707833011, "b": 535.6646729576354, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et", "bbox": {"l": 133.76801021944917, "t": 537.6570729686364, "r": 477.47293078330415, "b": 547.6196930236442, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore", "bbox": {"l": 133.76801021944917, "t": 549.612063034645, "r": 477.47482078330734, "b": 559.5746730896528, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit,", "bbox": {"l": 133.76801021944917, "t": 561.5670431006536, "r": 477.472810783304, "b": 571.5296631556615, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat", "bbox": {"l": 133.76801021944917, "t": 573.5220631666624, "r": 477.47479078330724, "b": 583.4846832216704, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "volutpat.", "bbox": {"l": 133.76801021944917, "t": 585.4780532326765, "r": 173.0565202839028, "b": 595.4406532876844, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat."}, {"label": "text", "id": 2, "page_no": 1, "cluster": {"id": 2, "label": "text", "bbox": {"l": 133.76801021944917, "t": 597.4330632986853, "r": 477.47482078330734, "b": 667.1716636837423, "coord_origin": "TOPLEFT"}, "confidence": 0.9872003793716431, "cells": [{"id": 40, "text": "Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie", "bbox": {"l": 148.71201024396512, "t": 597.4330632986853, "r": 477.4710707833011, "b": 607.3956633536932, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et", "bbox": {"l": 133.76801021944917, "t": 609.3880633646941, "r": 477.47293078330415, "b": 619.3506634197018, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore", "bbox": {"l": 133.76801021944917, "t": 621.3430634307027, "r": 477.47482078330734, "b": 631.3056634857105, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit,", "bbox": {"l": 133.76801021944917, "t": 633.2980634967114, "r": 477.472810783304, "b": 643.2606635517193, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat", "bbox": {"l": 133.76801021944917, "t": 645.2540535627256, "r": 477.47479078330724, "b": 655.2166536177334, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "volutpat.", "bbox": {"l": 133.76801021944917, "t": 657.2090636287344, "r": 173.0565202839028, "b": 667.1716636837423, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat."}, {"label": "page_footer", "id": 7, "page_no": 1, "cluster": {"id": 7, "label": "page_footer", "bbox": {"l": 303.13300049729594, "t": 695.1640638383003, "r": 308.1142905054678, "b": 705.1266638933081, "coord_origin": "TOPLEFT"}, "confidence": 0.850279688835144, "cells": [{"id": 46, "text": "1", "bbox": {"l": 303.13300049729594, "t": 695.1640638383003, "r": 308.1142905054678, "b": 705.1266638933081, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "1"}], "body": [{"label": "section_header", "id": 5, "page_no": 1, "cluster": {"id": 5, "label": "section_header", "bbox": {"l": 133.76801021944917, "t": 124.00537068468714, "r": 191.51430031418315, "b": 138.36590076397772, "coord_origin": "TOPLEFT"}, "confidence": 0.95060133934021, "cells": [{"id": 0, "text": "Formula", "bbox": {"l": 133.76801021944917, "t": 124.00537068468714, "r": 191.51430031418315, "b": 138.36590076397772, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "Formula"}, {"label": "text", "id": 1, "page_no": 1, "cluster": {"id": 1, "label": "text", "bbox": {"l": 133.76801021944917, "t": 149.114070823323, "r": 477.4806507833169, "b": 290.58367160443765, "coord_origin": "TOPLEFT"}, "confidence": 0.9878177046775818, "cells": [{"id": 1, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eir-", "bbox": {"l": 133.76801021944917, "t": 149.114070823323, "r": 477.47687078331063, "b": 159.0766608783307, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "mod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam volup-", "bbox": {"l": 133.76801021944917, "t": 161.06909088933185, "r": 477.4778107833122, "b": 171.03167094433945, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "tua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd", "bbox": {"l": 133.76801021944917, "t": 173.0241009553406, "r": 477.46985078329914, "b": 182.9866910103483, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ip-", "bbox": {"l": 133.76801021944917, "t": 184.97906102134914, "r": 477.4718607833024, "b": 194.94165107635683, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "sum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor", "bbox": {"l": 133.76801021944917, "t": 196.93511108736357, "r": 477.4699407832993, "b": 206.89770114237137, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero", "bbox": {"l": 133.76801021944917, "t": 208.890071153372, "r": 477.4806507833169, "b": 218.8526612083799, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "eos et accusam et justo duo dolores et ea rebum.", "bbox": {"l": 133.76801021944917, "t": 220.84509121938083, "r": 355.20087058271434, "b": 230.80767127438855, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Stet clita kasd gubergren,", "bbox": {"l": 362.6010705948545, "t": 220.84509121938083, "r": 477.4749507833075, "b": 230.80767127438855, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor", "bbox": {"l": 133.76801021944917, "t": 232.8001112853898, "r": 477.4708307833007, "b": 242.76269134039728, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt", "bbox": {"l": 133.76801021944917, "t": 244.75506135139813, "r": 477.4709207833008, "b": 254.71765140640582, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et", "bbox": {"l": 133.76801021944917, "t": 256.71008141740685, "r": 477.4658807832926, "b": 266.6726614724146, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea", "bbox": {"l": 133.76801021944917, "t": 268.6660714834211, "r": 477.47586078330903, "b": 278.6286615384289, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "takimata sanctus est Lorem ipsum dolor sit amet.", "bbox": {"l": 133.76801021944917, "t": 280.62109154942993, "r": 351.4767205766048, "b": 290.58367160443765, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet."}, {"label": "text", "id": 3, "page_no": 1, "cluster": {"id": 3, "label": "text", "bbox": {"l": 133.76801021944917, "t": 292.5761116154388, "r": 477.47482078330734, "b": 350.3596819344868, "coord_origin": "TOPLEFT"}, "confidence": 0.9855858683586121, "cells": [{"id": 14, "text": "Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie", "bbox": {"l": 148.71201024396512, "t": 292.5761116154388, "r": 477.4710707833011, "b": 302.5386916704465, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et", "bbox": {"l": 133.76801021944917, "t": 304.5310616814471, "r": 477.47293078330415, "b": 314.4936517364549, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore", "bbox": {"l": 133.76801021944917, "t": 316.48608174745607, "r": 477.47482078330734, "b": 326.4486618024637, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit,", "bbox": {"l": 133.76801021944917, "t": 328.4411018134648, "r": 477.472810783304, "b": 338.40368186847246, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "sed diam nonummy nibh euismod tincidunt.", "bbox": {"l": 133.76801021944917, "t": 340.3970618794788, "r": 326.20752053515014, "b": 350.3596819344868, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt."}, {"label": "formula", "id": 6, "page_no": 1, "cluster": {"id": 6, "label": "formula", "bbox": {"l": 280.5539904602546, "t": 362.4346620011579, "r": 330.6965905425146, "b": 374.2696820665041, "coord_origin": "TOPLEFT"}, "confidence": 0.8711639046669006, "cells": [{"id": 19, "text": "a", "bbox": {"l": 280.5539904602546, "t": 364.3070620114962, "r": 285.8142404688841, "b": 374.2696820665041, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "2", "bbox": {"l": 285.8200104688936, "t": 362.4346620011579, "r": 289.78809047540335, "b": 369.40844203966316, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "+ 8 = 12", "bbox": {"l": 292.50400047985886, "t": 364.3070620114962, "r": 330.6965905425146, "b": 374.2696820665041, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "a 2 + 8 = 12"}, {"label": "text", "id": 0, "page_no": 1, "cluster": {"id": 0, "label": "text", "bbox": {"l": 133.76801021944917, "t": 382.24005211051195, "r": 477.47589078330907, "b": 523.7096828916267, "coord_origin": "TOPLEFT"}, "confidence": 0.9880034923553467, "cells": [{"id": 22, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy", "bbox": {"l": 148.71201024396512, "t": 382.24005211051195, "r": 477.4698807832991, "b": 392.2026621655199, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam", "bbox": {"l": 133.76801021944917, "t": 394.19506217652076, "r": 477.47580078330884, "b": 404.15768223152867, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita", "bbox": {"l": 133.76801021944917, "t": 406.15005224252945, "r": 477.47580078330884, "b": 416.1126722975373, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem", "bbox": {"l": 133.76801021944917, "t": 418.10507230853824, "r": 477.47284078330404, "b": 428.06768236354606, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod", "bbox": {"l": 133.76801021944917, "t": 430.0600523745468, "r": 477.47589078330907, "b": 440.0226724295547, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At", "bbox": {"l": 133.76801021944917, "t": 442.01605244056105, "r": 477.4717707833023, "b": 451.97866249556887, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren,", "bbox": {"l": 133.76801021944917, "t": 453.9710625065698, "r": 477.47388078330573, "b": 463.93368256157777, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor", "bbox": {"l": 133.76801021944917, "t": 465.9260525725785, "r": 477.4708307833007, "b": 475.88867262758635, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt", "bbox": {"l": 133.76801021944917, "t": 477.8810726385873, "r": 477.4709207833008, "b": 487.84368269359516, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et", "bbox": {"l": 133.76801021944917, "t": 489.8360527045959, "r": 477.4658807832926, "b": 499.7986727596038, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea", "bbox": {"l": 133.76801021944917, "t": 501.7910427706045, "r": 477.47586078330903, "b": 511.7536628256125, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "takimata sanctus est Lorem ipsum dolor sit amet.", "bbox": {"l": 133.76801021944917, "t": 513.7470728366188, "r": 351.4767205766048, "b": 523.7096828916267, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet."}, {"label": "text", "id": 4, "page_no": 1, "cluster": {"id": 4, "label": "text", "bbox": {"l": 133.76801021944917, "t": 525.7020529026275, "r": 477.47482078330734, "b": 595.4406532876844, "coord_origin": "TOPLEFT"}, "confidence": 0.9844803214073181, "cells": [{"id": 34, "text": "Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie", "bbox": {"l": 148.71201024396512, "t": 525.7020529026275, "r": 477.4710707833011, "b": 535.6646729576354, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et", "bbox": {"l": 133.76801021944917, "t": 537.6570729686364, "r": 477.47293078330415, "b": 547.6196930236442, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore", "bbox": {"l": 133.76801021944917, "t": 549.612063034645, "r": 477.47482078330734, "b": 559.5746730896528, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit,", "bbox": {"l": 133.76801021944917, "t": 561.5670431006536, "r": 477.472810783304, "b": 571.5296631556615, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat", "bbox": {"l": 133.76801021944917, "t": 573.5220631666624, "r": 477.47479078330724, "b": 583.4846832216704, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "volutpat.", "bbox": {"l": 133.76801021944917, "t": 585.4780532326765, "r": 173.0565202839028, "b": 595.4406532876844, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat."}, {"label": "text", "id": 2, "page_no": 1, "cluster": {"id": 2, "label": "text", "bbox": {"l": 133.76801021944917, "t": 597.4330632986853, "r": 477.47482078330734, "b": 667.1716636837423, "coord_origin": "TOPLEFT"}, "confidence": 0.9872003793716431, "cells": [{"id": 40, "text": "Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie", "bbox": {"l": 148.71201024396512, "t": 597.4330632986853, "r": 477.4710707833011, "b": 607.3956633536932, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et", "bbox": {"l": 133.76801021944917, "t": 609.3880633646941, "r": 477.47293078330415, "b": 619.3506634197018, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore", "bbox": {"l": 133.76801021944917, "t": 621.3430634307027, "r": 477.47482078330734, "b": 631.3056634857105, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit,", "bbox": {"l": 133.76801021944917, "t": 633.2980634967114, "r": 477.472810783304, "b": 643.2606635517193, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat", "bbox": {"l": 133.76801021944917, "t": 645.2540535627256, "r": 477.47479078330724, "b": 655.2166536177334, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "volutpat.", "bbox": {"l": 133.76801021944917, "t": 657.2090636287344, "r": 173.0565202839028, "b": 667.1716636837423, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat."}], "headers": [{"label": "page_footer", "id": 7, "page_no": 1, "cluster": {"id": 7, "label": "page_footer", "bbox": {"l": 303.13300049729594, "t": 695.1640638383003, "r": 308.1142905054678, "b": 705.1266638933081, "coord_origin": "TOPLEFT"}, "confidence": 0.850279688835144, "cells": [{"id": 46, "text": "1", "bbox": {"l": 303.13300049729594, "t": 695.1640638383003, "r": 308.1142905054678, "b": 705.1266638933081, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "1"}]}}] \ No newline at end of file diff --git a/tests/data/groundtruth/docling_v2/code_and_formula.doctags.txt b/tests/data/groundtruth/docling_v2/code_and_formula.doctags.txt new file mode 100644 index 00000000..ad417540 --- /dev/null +++ b/tests/data/groundtruth/docling_v2/code_and_formula.doctags.txt @@ -0,0 +1,14 @@ + +Java Code Example +Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. +Listing 1: Simple Java Program +public static void print() { System.out.println( "Java Code" ); } +Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. +Formula +Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. +Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt. +a 2 + 8 = 12 +Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. +Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. +Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. + \ No newline at end of file diff --git a/tests/data/groundtruth/docling_v2/code_and_formula.json b/tests/data/groundtruth/docling_v2/code_and_formula.json new file mode 100644 index 00000000..adcc14d1 --- /dev/null +++ b/tests/data/groundtruth/docling_v2/code_and_formula.json @@ -0,0 +1 @@ +{"schema_name": "DoclingDocument", "version": "1.0.0", "name": "code_and_formula", "origin": {"mimetype": "application/pdf", "binary_hash": 2394749058180317456, "filename": "code_and_formula.pdf", "uri": null}, "furniture": {"self_ref": "#/furniture", "parent": null, "children": [], "name": "_root_", "label": "unspecified"}, "body": {"self_ref": "#/body", "parent": null, "children": [{"cref": "#/texts/0"}, {"cref": "#/texts/1"}, {"cref": "#/texts/2"}, {"cref": "#/texts/3"}, {"cref": "#/texts/4"}, {"cref": "#/texts/5"}, {"cref": "#/texts/6"}, {"cref": "#/texts/7"}, {"cref": "#/texts/8"}, {"cref": "#/texts/9"}, {"cref": "#/texts/10"}, {"cref": "#/texts/11"}, {"cref": "#/texts/12"}, {"cref": "#/texts/13"}], "name": "_root_", "label": "unspecified"}, "groups": [], "texts": [{"self_ref": "#/texts/0", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 1, "bbox": {"l": 133.76800537109375, "t": 667.99462890625, "r": 273.4540100097656, "b": 653.6340942382812, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 17]}], "orig": "Java Code Example", "text": "Java Code Example", "level": 1}, {"self_ref": "#/texts/1", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 1, "bbox": {"l": 133.76800537109375, "t": 642.8859252929688, "r": 477.48065185546875, "b": 501.4163513183594, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 887]}], "orig": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.", "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet."}, {"self_ref": "#/texts/2", "parent": {"cref": "#/body"}, "children": [], "label": "paragraph", "prov": [{"page_no": 1, "bbox": {"l": 236.17599487304688, "t": 490.45794677734375, "r": 375.069580078125, "b": 480.4953308105469, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 30]}], "orig": "Listing 1: Simple Java Program", "text": "Listing 1: Simple Java Program"}, {"self_ref": "#/texts/3", "parent": {"cref": "#/body"}, "children": [], "label": "code", "prov": [{"page_no": 1, "bbox": {"l": 134.23899841308594, "t": 474.2005310058594, "r": 337.5928649902344, "b": 443.9358215332031, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 65]}], "orig": "public static void print() { System.out.println( \"Java Code\" ); }", "text": "public static void print() { System.out.println( \"Java Code\" ); }", "code_language": "unknown"}, {"self_ref": "#/texts/4", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 1, "bbox": {"l": 133.76800537109375, "t": 432.27593994140625, "r": 477.47589111328125, "b": 290.80633544921875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 887]}], "orig": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.", "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet."}, {"self_ref": "#/texts/5", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 1, "bbox": {"l": 303.13299560546875, "t": 96.83694458007812, "r": 308.1142883300781, "b": 86.87435150146484, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 1]}], "orig": "1", "text": "1"}, {"self_ref": "#/texts/6", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 2, "bbox": {"l": 133.76800537109375, "t": 717.8846435546875, "r": 191.51429748535156, "b": 703.5241088867188, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 7]}], "orig": "Formula", "text": "Formula", "level": 1}, {"self_ref": "#/texts/7", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 2, "bbox": {"l": 133.76800537109375, "t": 692.7759399414062, "r": 477.48065185546875, "b": 551.3063354492188, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 887]}], "orig": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.", "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet."}, {"self_ref": "#/texts/8", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 2, "bbox": {"l": 133.76800537109375, "t": 549.3139038085938, "r": 477.4748229980469, "b": 491.53033447265625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 369]}], "orig": "Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt.", "text": "Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt."}, {"self_ref": "#/texts/9", "parent": {"cref": "#/body"}, "children": [], "label": "formula", "prov": [{"page_no": 2, "bbox": {"l": 280.5539855957031, "t": 479.4553527832031, "r": 330.69659423828125, "b": 467.6203308105469, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 12]}], "orig": "a 2 + 8 = 12", "text": "a 2 + 8 = 12"}, {"self_ref": "#/texts/10", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 2, "bbox": {"l": 133.76800537109375, "t": 459.64996337890625, "r": 477.47589111328125, "b": 318.1803283691406, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 887]}], "orig": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.", "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet."}, {"self_ref": "#/texts/11", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 2, "bbox": {"l": 133.76800537109375, "t": 316.1879577636719, "r": 477.4748229980469, "b": 246.44935607910156, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 415]}], "orig": "Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.", "text": "Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat."}, {"self_ref": "#/texts/12", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 2, "bbox": {"l": 133.76800537109375, "t": 244.4569549560547, "r": 477.4748229980469, "b": 174.71835327148438, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 415]}], "orig": "Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.", "text": "Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat."}, {"self_ref": "#/texts/13", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 2, "bbox": {"l": 303.13299560546875, "t": 146.7259521484375, "r": 308.1142883300781, "b": 136.7633514404297, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 1]}], "orig": "1", "text": "1"}], "pictures": [], "tables": [], "key_value_items": [], "pages": {"1": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 1}, "2": {"size": {"width": 595.2760009765625, "height": 841.8900146484375}, "image": null, "page_no": 2}}} \ No newline at end of file diff --git a/tests/data/groundtruth/docling_v2/code_and_formula.md b/tests/data/groundtruth/docling_v2/code_and_formula.md new file mode 100644 index 00000000..2e2636a3 --- /dev/null +++ b/tests/data/groundtruth/docling_v2/code_and_formula.md @@ -0,0 +1,25 @@ +## Java Code Example + +Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. + +Listing 1: Simple Java Program + +``` +public static void print() { System.out.println( "Java Code" ); } +``` + +Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. + +## Formula + +Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. + +Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt. + +a 2 + 8 = 12 + +Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. + +Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. + +Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. \ No newline at end of file diff --git a/tests/data/groundtruth/docling_v2/code_and_formula.pages.json b/tests/data/groundtruth/docling_v2/code_and_formula.pages.json new file mode 100644 index 00000000..27682fdd --- /dev/null +++ b/tests/data/groundtruth/docling_v2/code_and_formula.pages.json @@ -0,0 +1 @@ +[{"page_no": 0, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Java Code Example", "bbox": {"l": 133.76801, "t": 124.00536999999997, "r": 273.45401, "b": 138.36590999999999, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eir-", "bbox": {"l": 133.76801, "t": 149.11406999999997, "r": 477.47687, "b": 159.07665999999995, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "mod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam volup-", "bbox": {"l": 133.76801, "t": 161.06908999999996, "r": 477.47781000000003, "b": 171.03168000000005, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "tua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd", "bbox": {"l": 133.76801, "t": 173.02405, "r": 477.46985, "b": 182.98663, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ip-", "bbox": {"l": 133.76801, "t": 184.97906, "r": 477.47186, "b": 194.94164999999998, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "sum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor", "bbox": {"l": 133.76801, "t": 196.93408, "r": 477.46993999999995, "b": 206.89666999999997, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero", "bbox": {"l": 133.76801, "t": 208.88909999999998, "r": 477.4806500000001, "b": 218.85168, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "eos et accusam et justo duo dolores et ea rebum.", "bbox": {"l": 133.76801, "t": 220.84509000000003, "r": 355.20087, "b": 230.80768, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Stet clita kasd gubergren,", "bbox": {"l": 362.60107, "t": 220.84509000000003, "r": 477.47495000000004, "b": 230.80768, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor", "bbox": {"l": 133.76801, "t": 232.80005000000006, "r": 477.47083, "b": 242.76262999999994, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt", "bbox": {"l": 133.76801, "t": 244.75507000000005, "r": 477.47092, "b": 254.71765000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et", "bbox": {"l": 133.76801, "t": 256.71007999999995, "r": 477.46588, "b": 266.67267000000004, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea", "bbox": {"l": 133.76801, "t": 268.66510000000005, "r": 477.47586, "b": 278.62769000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "takimata sanctus est Lorem ipsum dolor sit amet.", "bbox": {"l": 133.76801, "t": 280.62103, "r": 351.47672, "b": 290.58365, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Listing 1: Simple Java Program", "bbox": {"l": 236.17598999999998, "t": 301.54204999999996, "r": 375.06958, "b": 311.50467, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "public static void", "bbox": {"l": 134.575, "t": 317.79947000000004, "r": 235.44695, "b": 326.14719, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "print() {", "bbox": {"l": 241.8759, "t": 317.79947000000004, "r": 292.24908, "b": 326.14719, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "System.out.println(", "bbox": {"l": 157.17101, "t": 328.75745, "r": 264.02368, "b": 337.10516000000007, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "\"Java Code\"", "bbox": {"l": 264.15811, "t": 328.75745, "r": 325.35376, "b": 337.10516000000007, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": ");", "bbox": {"l": 326.2952, "t": 328.75745, "r": 337.59286, "b": 337.10516000000007, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "}", "bbox": {"l": 134.239, "t": 339.71646, "r": 138.94637, "b": 348.06418, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy", "bbox": {"l": 148.71201, "t": 359.72406, "r": 477.46985, "b": 369.68667999999997, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam", "bbox": {"l": 133.76801, "t": 371.67905, "r": 477.4758, "b": 381.64166000000006, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita", "bbox": {"l": 133.76801, "t": 383.63403, "r": 477.4758, "b": 393.59665, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem", "bbox": {"l": 133.76801, "t": 395.58905, "r": 477.47284, "b": 405.55167, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod", "bbox": {"l": 133.76801, "t": 407.54404, "r": 477.47589, "b": 417.50665, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At", "bbox": {"l": 133.76801, "t": 419.50003000000004, "r": 477.47177000000005, "b": 429.46265, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren,", "bbox": {"l": 133.76801, "t": 431.45505, "r": 477.47387999999995, "b": 441.41766000000007, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor", "bbox": {"l": 133.76801, "t": 443.41003, "r": 477.47083, "b": 453.37265, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt", "bbox": {"l": 133.76801, "t": 455.36505, "r": 477.47092, "b": 465.32767, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et", "bbox": {"l": 133.76801, "t": 467.32004, "r": 477.46585, "b": 477.28265, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea", "bbox": {"l": 133.76801, "t": 479.27603, "r": 477.47586, "b": 489.23865, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "takimata sanctus est Lorem ipsum dolor sit amet.", "bbox": {"l": 133.76801, "t": 491.23105, "r": 351.47672, "b": 501.19366, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "1", "bbox": {"l": 303.133, "t": 695.163055, "r": 308.11429, "b": 705.125648, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 2, "label": "section_header", "bbox": {"l": 133.76801, "t": 124.00536999999997, "r": 273.45401, "b": 138.36590999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9581764936447144, "cells": [{"id": 0, "text": "Java Code Example", "bbox": {"l": 133.76801, "t": 124.00536999999997, "r": 273.45401, "b": 138.36590999999999, "coord_origin": "TOPLEFT"}}], "children": []}, {"id": 0, "label": "text", "bbox": {"l": 133.76801, "t": 149.11406999999997, "r": 477.4806500000001, "b": 290.58365, "coord_origin": "TOPLEFT"}, "confidence": 0.9872456789016724, "cells": [{"id": 1, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eir-", "bbox": {"l": 133.76801, "t": 149.11406999999997, "r": 477.47687, "b": 159.07665999999995, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "mod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam volup-", "bbox": {"l": 133.76801, "t": 161.06908999999996, "r": 477.47781000000003, "b": 171.03168000000005, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "tua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd", "bbox": {"l": 133.76801, "t": 173.02405, "r": 477.46985, "b": 182.98663, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ip-", "bbox": {"l": 133.76801, "t": 184.97906, "r": 477.47186, "b": 194.94164999999998, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "sum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor", "bbox": {"l": 133.76801, "t": 196.93408, "r": 477.46993999999995, "b": 206.89666999999997, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero", "bbox": {"l": 133.76801, "t": 208.88909999999998, "r": 477.4806500000001, "b": 218.85168, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "eos et accusam et justo duo dolores et ea rebum.", "bbox": {"l": 133.76801, "t": 220.84509000000003, "r": 355.20087, "b": 230.80768, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Stet clita kasd gubergren,", "bbox": {"l": 362.60107, "t": 220.84509000000003, "r": 477.47495000000004, "b": 230.80768, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor", "bbox": {"l": 133.76801, "t": 232.80005000000006, "r": 477.47083, "b": 242.76262999999994, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt", "bbox": {"l": 133.76801, "t": 244.75507000000005, "r": 477.47092, "b": 254.71765000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et", "bbox": {"l": 133.76801, "t": 256.71007999999995, "r": 477.46588, "b": 266.67267000000004, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea", "bbox": {"l": 133.76801, "t": 268.66510000000005, "r": 477.47586, "b": 278.62769000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "takimata sanctus est Lorem ipsum dolor sit amet.", "bbox": {"l": 133.76801, "t": 280.62103, "r": 351.47672, "b": 290.58365, "coord_origin": "TOPLEFT"}}], "children": []}, {"id": 5, "label": "caption", "bbox": {"l": 236.17598999999998, "t": 301.54204999999996, "r": 375.06958, "b": 311.50467, "coord_origin": "TOPLEFT"}, "confidence": 0.5425266027450562, "cells": [{"id": 14, "text": "Listing 1: Simple Java Program", "bbox": {"l": 236.17598999999998, "t": 301.54204999999996, "r": 375.06958, "b": 311.50467, "coord_origin": "TOPLEFT"}}], "children": []}, {"id": 4, "label": "code", "bbox": {"l": 134.239, "t": 317.79947000000004, "r": 337.59286, "b": 348.06418, "coord_origin": "TOPLEFT"}, "confidence": 0.6383119821548462, "cells": [{"id": 15, "text": "public static void", "bbox": {"l": 134.575, "t": 317.79947000000004, "r": 235.44695, "b": 326.14719, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "print() {", "bbox": {"l": 241.8759, "t": 317.79947000000004, "r": 292.24908, "b": 326.14719, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "System.out.println(", "bbox": {"l": 157.17101, "t": 328.75745, "r": 264.02368, "b": 337.10516000000007, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "\"Java Code\"", "bbox": {"l": 264.15811, "t": 328.75745, "r": 325.35376, "b": 337.10516000000007, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": ");", "bbox": {"l": 326.2952, "t": 328.75745, "r": 337.59286, "b": 337.10516000000007, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "}", "bbox": {"l": 134.239, "t": 339.71646, "r": 138.94637, "b": 348.06418, "coord_origin": "TOPLEFT"}}], "children": []}, {"id": 1, "label": "text", "bbox": {"l": 133.76801, "t": 359.72406, "r": 477.47589, "b": 501.19366, "coord_origin": "TOPLEFT"}, "confidence": 0.9869542717933655, "cells": [{"id": 21, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy", "bbox": {"l": 148.71201, "t": 359.72406, "r": 477.46985, "b": 369.68667999999997, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam", "bbox": {"l": 133.76801, "t": 371.67905, "r": 477.4758, "b": 381.64166000000006, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita", "bbox": {"l": 133.76801, "t": 383.63403, "r": 477.4758, "b": 393.59665, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem", "bbox": {"l": 133.76801, "t": 395.58905, "r": 477.47284, "b": 405.55167, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod", "bbox": {"l": 133.76801, "t": 407.54404, "r": 477.47589, "b": 417.50665, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At", "bbox": {"l": 133.76801, "t": 419.50003000000004, "r": 477.47177000000005, "b": 429.46265, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren,", "bbox": {"l": 133.76801, "t": 431.45505, "r": 477.47387999999995, "b": 441.41766000000007, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor", "bbox": {"l": 133.76801, "t": 443.41003, "r": 477.47083, "b": 453.37265, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt", "bbox": {"l": 133.76801, "t": 455.36505, "r": 477.47092, "b": 465.32767, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et", "bbox": {"l": 133.76801, "t": 467.32004, "r": 477.46585, "b": 477.28265, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea", "bbox": {"l": 133.76801, "t": 479.27603, "r": 477.47586, "b": 489.23865, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "takimata sanctus est Lorem ipsum dolor sit amet.", "bbox": {"l": 133.76801, "t": 491.23105, "r": 351.47672, "b": 501.19366, "coord_origin": "TOPLEFT"}}], "children": []}, {"id": 3, "label": "page_footer", "bbox": {"l": 303.133, "t": 695.163055, "r": 308.11429, "b": 705.125648, "coord_origin": "TOPLEFT"}, "confidence": 0.8374724984169006, "cells": [{"id": 33, "text": "1", "bbox": {"l": 303.133, "t": 695.163055, "r": 308.11429, "b": 705.125648, "coord_origin": "TOPLEFT"}}], "children": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "section_header", "id": 2, "page_no": 0, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 133.76801, "t": 124.00536999999997, "r": 273.45401, "b": 138.36590999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9581764936447144, "cells": [{"id": 0, "text": "Java Code Example", "bbox": {"l": 133.76801, "t": 124.00536999999997, "r": 273.45401, "b": 138.36590999999999, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "Java Code Example"}, {"label": "text", "id": 0, "page_no": 0, "cluster": {"id": 0, "label": "text", "bbox": {"l": 133.76801, "t": 149.11406999999997, "r": 477.4806500000001, "b": 290.58365, "coord_origin": "TOPLEFT"}, "confidence": 0.9872456789016724, "cells": [{"id": 1, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eir-", "bbox": {"l": 133.76801, "t": 149.11406999999997, "r": 477.47687, "b": 159.07665999999995, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "mod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam volup-", "bbox": {"l": 133.76801, "t": 161.06908999999996, "r": 477.47781000000003, "b": 171.03168000000005, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "tua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd", "bbox": {"l": 133.76801, "t": 173.02405, "r": 477.46985, "b": 182.98663, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ip-", "bbox": {"l": 133.76801, "t": 184.97906, "r": 477.47186, "b": 194.94164999999998, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "sum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor", "bbox": {"l": 133.76801, "t": 196.93408, "r": 477.46993999999995, "b": 206.89666999999997, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero", "bbox": {"l": 133.76801, "t": 208.88909999999998, "r": 477.4806500000001, "b": 218.85168, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "eos et accusam et justo duo dolores et ea rebum.", "bbox": {"l": 133.76801, "t": 220.84509000000003, "r": 355.20087, "b": 230.80768, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Stet clita kasd gubergren,", "bbox": {"l": 362.60107, "t": 220.84509000000003, "r": 477.47495000000004, "b": 230.80768, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor", "bbox": {"l": 133.76801, "t": 232.80005000000006, "r": 477.47083, "b": 242.76262999999994, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt", "bbox": {"l": 133.76801, "t": 244.75507000000005, "r": 477.47092, "b": 254.71765000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et", "bbox": {"l": 133.76801, "t": 256.71007999999995, "r": 477.46588, "b": 266.67267000000004, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea", "bbox": {"l": 133.76801, "t": 268.66510000000005, "r": 477.47586, "b": 278.62769000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "takimata sanctus est Lorem ipsum dolor sit amet.", "bbox": {"l": 133.76801, "t": 280.62103, "r": 351.47672, "b": 290.58365, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet."}, {"label": "caption", "id": 5, "page_no": 0, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 236.17598999999998, "t": 301.54204999999996, "r": 375.06958, "b": 311.50467, "coord_origin": "TOPLEFT"}, "confidence": 0.5425266027450562, "cells": [{"id": 14, "text": "Listing 1: Simple Java Program", "bbox": {"l": 236.17598999999998, "t": 301.54204999999996, "r": 375.06958, "b": 311.50467, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "Listing 1: Simple Java Program"}, {"label": "code", "id": 4, "page_no": 0, "cluster": {"id": 4, "label": "code", "bbox": {"l": 134.239, "t": 317.79947000000004, "r": 337.59286, "b": 348.06418, "coord_origin": "TOPLEFT"}, "confidence": 0.6383119821548462, "cells": [{"id": 15, "text": "public static void", "bbox": {"l": 134.575, "t": 317.79947000000004, "r": 235.44695, "b": 326.14719, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "print() {", "bbox": {"l": 241.8759, "t": 317.79947000000004, "r": 292.24908, "b": 326.14719, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "System.out.println(", "bbox": {"l": 157.17101, "t": 328.75745, "r": 264.02368, "b": 337.10516000000007, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "\"Java Code\"", "bbox": {"l": 264.15811, "t": 328.75745, "r": 325.35376, "b": 337.10516000000007, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": ");", "bbox": {"l": 326.2952, "t": 328.75745, "r": 337.59286, "b": 337.10516000000007, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "}", "bbox": {"l": 134.239, "t": 339.71646, "r": 138.94637, "b": 348.06418, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "public static void print() { System.out.println( \"Java Code\" ); }"}, {"label": "text", "id": 1, "page_no": 0, "cluster": {"id": 1, "label": "text", "bbox": {"l": 133.76801, "t": 359.72406, "r": 477.47589, "b": 501.19366, "coord_origin": "TOPLEFT"}, "confidence": 0.9869542717933655, "cells": [{"id": 21, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy", "bbox": {"l": 148.71201, "t": 359.72406, "r": 477.46985, "b": 369.68667999999997, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam", "bbox": {"l": 133.76801, "t": 371.67905, "r": 477.4758, "b": 381.64166000000006, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita", "bbox": {"l": 133.76801, "t": 383.63403, "r": 477.4758, "b": 393.59665, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem", "bbox": {"l": 133.76801, "t": 395.58905, "r": 477.47284, "b": 405.55167, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod", "bbox": {"l": 133.76801, "t": 407.54404, "r": 477.47589, "b": 417.50665, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At", "bbox": {"l": 133.76801, "t": 419.50003000000004, "r": 477.47177000000005, "b": 429.46265, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren,", "bbox": {"l": 133.76801, "t": 431.45505, "r": 477.47387999999995, "b": 441.41766000000007, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor", "bbox": {"l": 133.76801, "t": 443.41003, "r": 477.47083, "b": 453.37265, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt", "bbox": {"l": 133.76801, "t": 455.36505, "r": 477.47092, "b": 465.32767, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et", "bbox": {"l": 133.76801, "t": 467.32004, "r": 477.46585, "b": 477.28265, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea", "bbox": {"l": 133.76801, "t": 479.27603, "r": 477.47586, "b": 489.23865, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "takimata sanctus est Lorem ipsum dolor sit amet.", "bbox": {"l": 133.76801, "t": 491.23105, "r": 351.47672, "b": 501.19366, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet."}, {"label": "page_footer", "id": 3, "page_no": 0, "cluster": {"id": 3, "label": "page_footer", "bbox": {"l": 303.133, "t": 695.163055, "r": 308.11429, "b": 705.125648, "coord_origin": "TOPLEFT"}, "confidence": 0.8374724984169006, "cells": [{"id": 33, "text": "1", "bbox": {"l": 303.133, "t": 695.163055, "r": 308.11429, "b": 705.125648, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "1"}], "body": [{"label": "section_header", "id": 2, "page_no": 0, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 133.76801, "t": 124.00536999999997, "r": 273.45401, "b": 138.36590999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9581764936447144, "cells": [{"id": 0, "text": "Java Code Example", "bbox": {"l": 133.76801, "t": 124.00536999999997, "r": 273.45401, "b": 138.36590999999999, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "Java Code Example"}, {"label": "text", "id": 0, "page_no": 0, "cluster": {"id": 0, "label": "text", "bbox": {"l": 133.76801, "t": 149.11406999999997, "r": 477.4806500000001, "b": 290.58365, "coord_origin": "TOPLEFT"}, "confidence": 0.9872456789016724, "cells": [{"id": 1, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eir-", "bbox": {"l": 133.76801, "t": 149.11406999999997, "r": 477.47687, "b": 159.07665999999995, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "mod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam volup-", "bbox": {"l": 133.76801, "t": 161.06908999999996, "r": 477.47781000000003, "b": 171.03168000000005, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "tua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd", "bbox": {"l": 133.76801, "t": 173.02405, "r": 477.46985, "b": 182.98663, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ip-", "bbox": {"l": 133.76801, "t": 184.97906, "r": 477.47186, "b": 194.94164999999998, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "sum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor", "bbox": {"l": 133.76801, "t": 196.93408, "r": 477.46993999999995, "b": 206.89666999999997, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero", "bbox": {"l": 133.76801, "t": 208.88909999999998, "r": 477.4806500000001, "b": 218.85168, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "eos et accusam et justo duo dolores et ea rebum.", "bbox": {"l": 133.76801, "t": 220.84509000000003, "r": 355.20087, "b": 230.80768, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Stet clita kasd gubergren,", "bbox": {"l": 362.60107, "t": 220.84509000000003, "r": 477.47495000000004, "b": 230.80768, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor", "bbox": {"l": 133.76801, "t": 232.80005000000006, "r": 477.47083, "b": 242.76262999999994, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt", "bbox": {"l": 133.76801, "t": 244.75507000000005, "r": 477.47092, "b": 254.71765000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et", "bbox": {"l": 133.76801, "t": 256.71007999999995, "r": 477.46588, "b": 266.67267000000004, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea", "bbox": {"l": 133.76801, "t": 268.66510000000005, "r": 477.47586, "b": 278.62769000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "takimata sanctus est Lorem ipsum dolor sit amet.", "bbox": {"l": 133.76801, "t": 280.62103, "r": 351.47672, "b": 290.58365, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet."}, {"label": "caption", "id": 5, "page_no": 0, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 236.17598999999998, "t": 301.54204999999996, "r": 375.06958, "b": 311.50467, "coord_origin": "TOPLEFT"}, "confidence": 0.5425266027450562, "cells": [{"id": 14, "text": "Listing 1: Simple Java Program", "bbox": {"l": 236.17598999999998, "t": 301.54204999999996, "r": 375.06958, "b": 311.50467, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "Listing 1: Simple Java Program"}, {"label": "code", "id": 4, "page_no": 0, "cluster": {"id": 4, "label": "code", "bbox": {"l": 134.239, "t": 317.79947000000004, "r": 337.59286, "b": 348.06418, "coord_origin": "TOPLEFT"}, "confidence": 0.6383119821548462, "cells": [{"id": 15, "text": "public static void", "bbox": {"l": 134.575, "t": 317.79947000000004, "r": 235.44695, "b": 326.14719, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "print() {", "bbox": {"l": 241.8759, "t": 317.79947000000004, "r": 292.24908, "b": 326.14719, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "System.out.println(", "bbox": {"l": 157.17101, "t": 328.75745, "r": 264.02368, "b": 337.10516000000007, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "\"Java Code\"", "bbox": {"l": 264.15811, "t": 328.75745, "r": 325.35376, "b": 337.10516000000007, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": ");", "bbox": {"l": 326.2952, "t": 328.75745, "r": 337.59286, "b": 337.10516000000007, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "}", "bbox": {"l": 134.239, "t": 339.71646, "r": 138.94637, "b": 348.06418, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "public static void print() { System.out.println( \"Java Code\" ); }"}, {"label": "text", "id": 1, "page_no": 0, "cluster": {"id": 1, "label": "text", "bbox": {"l": 133.76801, "t": 359.72406, "r": 477.47589, "b": 501.19366, "coord_origin": "TOPLEFT"}, "confidence": 0.9869542717933655, "cells": [{"id": 21, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy", "bbox": {"l": 148.71201, "t": 359.72406, "r": 477.46985, "b": 369.68667999999997, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam", "bbox": {"l": 133.76801, "t": 371.67905, "r": 477.4758, "b": 381.64166000000006, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita", "bbox": {"l": 133.76801, "t": 383.63403, "r": 477.4758, "b": 393.59665, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem", "bbox": {"l": 133.76801, "t": 395.58905, "r": 477.47284, "b": 405.55167, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod", "bbox": {"l": 133.76801, "t": 407.54404, "r": 477.47589, "b": 417.50665, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At", "bbox": {"l": 133.76801, "t": 419.50003000000004, "r": 477.47177000000005, "b": 429.46265, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren,", "bbox": {"l": 133.76801, "t": 431.45505, "r": 477.47387999999995, "b": 441.41766000000007, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor", "bbox": {"l": 133.76801, "t": 443.41003, "r": 477.47083, "b": 453.37265, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt", "bbox": {"l": 133.76801, "t": 455.36505, "r": 477.47092, "b": 465.32767, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et", "bbox": {"l": 133.76801, "t": 467.32004, "r": 477.46585, "b": 477.28265, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea", "bbox": {"l": 133.76801, "t": 479.27603, "r": 477.47586, "b": 489.23865, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "takimata sanctus est Lorem ipsum dolor sit amet.", "bbox": {"l": 133.76801, "t": 491.23105, "r": 351.47672, "b": 501.19366, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet."}], "headers": [{"label": "page_footer", "id": 3, "page_no": 0, "cluster": {"id": 3, "label": "page_footer", "bbox": {"l": 303.133, "t": 695.163055, "r": 308.11429, "b": 705.125648, "coord_origin": "TOPLEFT"}, "confidence": 0.8374724984169006, "cells": [{"id": 33, "text": "1", "bbox": {"l": 303.133, "t": 695.163055, "r": 308.11429, "b": 705.125648, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "1"}]}}, {"page_no": 1, "size": {"width": 595.2760009765625, "height": 841.8900146484375}, "cells": [{"id": 0, "text": "Formula", "bbox": {"l": 133.76801021944917, "t": 124.00537068468714, "r": 191.51430031418315, "b": 138.36590076397772, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eir-", "bbox": {"l": 133.76801021944917, "t": 149.114070823323, "r": 477.47687078331063, "b": 159.0766608783307, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "mod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam volup-", "bbox": {"l": 133.76801021944917, "t": 161.06909088933185, "r": 477.4778107833122, "b": 171.03167094433945, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "tua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd", "bbox": {"l": 133.76801021944917, "t": 173.0241009553406, "r": 477.46985078329914, "b": 182.9866910103483, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ip-", "bbox": {"l": 133.76801021944917, "t": 184.97906102134914, "r": 477.4718607833024, "b": 194.94165107635683, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "sum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor", "bbox": {"l": 133.76801021944917, "t": 196.93511108736357, "r": 477.4699407832993, "b": 206.89770114237137, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero", "bbox": {"l": 133.76801021944917, "t": 208.890071153372, "r": 477.4806507833169, "b": 218.8526612083799, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "eos et accusam et justo duo dolores et ea rebum.", "bbox": {"l": 133.76801021944917, "t": 220.84509121938083, "r": 355.20087058271434, "b": 230.80767127438855, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Stet clita kasd gubergren,", "bbox": {"l": 362.6010705948545, "t": 220.84509121938083, "r": 477.4749507833075, "b": 230.80767127438855, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor", "bbox": {"l": 133.76801021944917, "t": 232.8001112853898, "r": 477.4708307833007, "b": 242.76269134039728, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt", "bbox": {"l": 133.76801021944917, "t": 244.75506135139813, "r": 477.4709207833008, "b": 254.71765140640582, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et", "bbox": {"l": 133.76801021944917, "t": 256.71008141740685, "r": 477.4658807832926, "b": 266.6726614724146, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea", "bbox": {"l": 133.76801021944917, "t": 268.6660714834211, "r": 477.47586078330903, "b": 278.6286615384289, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "takimata sanctus est Lorem ipsum dolor sit amet.", "bbox": {"l": 133.76801021944917, "t": 280.62109154942993, "r": 351.4767205766048, "b": 290.58367160443765, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie", "bbox": {"l": 148.71201024396512, "t": 292.5761116154388, "r": 477.4710707833011, "b": 302.5386916704465, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et", "bbox": {"l": 133.76801021944917, "t": 304.5310616814471, "r": 477.47293078330415, "b": 314.4936517364549, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore", "bbox": {"l": 133.76801021944917, "t": 316.48608174745607, "r": 477.47482078330734, "b": 326.4486618024637, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit,", "bbox": {"l": 133.76801021944917, "t": 328.4411018134648, "r": 477.472810783304, "b": 338.40368186847246, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "sed diam nonummy nibh euismod tincidunt.", "bbox": {"l": 133.76801021944917, "t": 340.3970618794788, "r": 326.20752053515014, "b": 350.3596819344868, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "a", "bbox": {"l": 280.5539904602546, "t": 364.3070620114962, "r": 285.8142404688841, "b": 374.2696820665041, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "2", "bbox": {"l": 285.8200104688936, "t": 362.4346620011579, "r": 289.78809047540335, "b": 369.40844203966316, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "+ 8 = 12", "bbox": {"l": 292.50400047985886, "t": 364.3070620114962, "r": 330.6965905425146, "b": 374.2696820665041, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy", "bbox": {"l": 148.71201024396512, "t": 382.24005211051195, "r": 477.4698807832991, "b": 392.2026621655199, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam", "bbox": {"l": 133.76801021944917, "t": 394.19506217652076, "r": 477.47580078330884, "b": 404.15768223152867, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita", "bbox": {"l": 133.76801021944917, "t": 406.15005224252945, "r": 477.47580078330884, "b": 416.1126722975373, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem", "bbox": {"l": 133.76801021944917, "t": 418.10507230853824, "r": 477.47284078330404, "b": 428.06768236354606, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod", "bbox": {"l": 133.76801021944917, "t": 430.0600523745468, "r": 477.47589078330907, "b": 440.0226724295547, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At", "bbox": {"l": 133.76801021944917, "t": 442.01605244056105, "r": 477.4717707833023, "b": 451.97866249556887, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren,", "bbox": {"l": 133.76801021944917, "t": 453.9710625065698, "r": 477.47388078330573, "b": 463.93368256157777, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor", "bbox": {"l": 133.76801021944917, "t": 465.9260525725785, "r": 477.4708307833007, "b": 475.88867262758635, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt", "bbox": {"l": 133.76801021944917, "t": 477.8810726385873, "r": 477.4709207833008, "b": 487.84368269359516, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et", "bbox": {"l": 133.76801021944917, "t": 489.8360527045959, "r": 477.4658807832926, "b": 499.7986727596038, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea", "bbox": {"l": 133.76801021944917, "t": 501.7910427706045, "r": 477.47586078330903, "b": 511.7536628256125, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "takimata sanctus est Lorem ipsum dolor sit amet.", "bbox": {"l": 133.76801021944917, "t": 513.7470728366188, "r": 351.4767205766048, "b": 523.7096828916267, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie", "bbox": {"l": 148.71201024396512, "t": 525.7020529026275, "r": 477.4710707833011, "b": 535.6646729576354, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et", "bbox": {"l": 133.76801021944917, "t": 537.6570729686364, "r": 477.47293078330415, "b": 547.6196930236442, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore", "bbox": {"l": 133.76801021944917, "t": 549.612063034645, "r": 477.47482078330734, "b": 559.5746730896528, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit,", "bbox": {"l": 133.76801021944917, "t": 561.5670431006536, "r": 477.472810783304, "b": 571.5296631556615, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat", "bbox": {"l": 133.76801021944917, "t": 573.5220631666624, "r": 477.47479078330724, "b": 583.4846832216704, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "volutpat.", "bbox": {"l": 133.76801021944917, "t": 585.4780532326765, "r": 173.0565202839028, "b": 595.4406532876844, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie", "bbox": {"l": 148.71201024396512, "t": 597.4330632986853, "r": 477.4710707833011, "b": 607.3956633536932, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et", "bbox": {"l": 133.76801021944917, "t": 609.3880633646941, "r": 477.47293078330415, "b": 619.3506634197018, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore", "bbox": {"l": 133.76801021944917, "t": 621.3430634307027, "r": 477.47482078330734, "b": 631.3056634857105, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit,", "bbox": {"l": 133.76801021944917, "t": 633.2980634967114, "r": 477.472810783304, "b": 643.2606635517193, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat", "bbox": {"l": 133.76801021944917, "t": 645.2540535627256, "r": 477.47479078330724, "b": 655.2166536177334, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "volutpat.", "bbox": {"l": 133.76801021944917, "t": 657.2090636287344, "r": 173.0565202839028, "b": 667.1716636837423, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "1", "bbox": {"l": 303.13300049729594, "t": 695.1640638383003, "r": 308.1142905054678, "b": 705.1266638933081, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 5, "label": "section_header", "bbox": {"l": 133.76801021944917, "t": 124.00537068468714, "r": 191.51430031418315, "b": 138.36590076397772, "coord_origin": "TOPLEFT"}, "confidence": 0.95060133934021, "cells": [{"id": 0, "text": "Formula", "bbox": {"l": 133.76801021944917, "t": 124.00537068468714, "r": 191.51430031418315, "b": 138.36590076397772, "coord_origin": "TOPLEFT"}}], "children": []}, {"id": 1, "label": "text", "bbox": {"l": 133.76801021944917, "t": 149.114070823323, "r": 477.4806507833169, "b": 290.58367160443765, "coord_origin": "TOPLEFT"}, "confidence": 0.9878177046775818, "cells": [{"id": 1, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eir-", "bbox": {"l": 133.76801021944917, "t": 149.114070823323, "r": 477.47687078331063, "b": 159.0766608783307, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "mod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam volup-", "bbox": {"l": 133.76801021944917, "t": 161.06909088933185, "r": 477.4778107833122, "b": 171.03167094433945, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "tua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd", "bbox": {"l": 133.76801021944917, "t": 173.0241009553406, "r": 477.46985078329914, "b": 182.9866910103483, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ip-", "bbox": {"l": 133.76801021944917, "t": 184.97906102134914, "r": 477.4718607833024, "b": 194.94165107635683, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "sum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor", "bbox": {"l": 133.76801021944917, "t": 196.93511108736357, "r": 477.4699407832993, "b": 206.89770114237137, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero", "bbox": {"l": 133.76801021944917, "t": 208.890071153372, "r": 477.4806507833169, "b": 218.8526612083799, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "eos et accusam et justo duo dolores et ea rebum.", "bbox": {"l": 133.76801021944917, "t": 220.84509121938083, "r": 355.20087058271434, "b": 230.80767127438855, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Stet clita kasd gubergren,", "bbox": {"l": 362.6010705948545, "t": 220.84509121938083, "r": 477.4749507833075, "b": 230.80767127438855, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor", "bbox": {"l": 133.76801021944917, "t": 232.8001112853898, "r": 477.4708307833007, "b": 242.76269134039728, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt", "bbox": {"l": 133.76801021944917, "t": 244.75506135139813, "r": 477.4709207833008, "b": 254.71765140640582, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et", "bbox": {"l": 133.76801021944917, "t": 256.71008141740685, "r": 477.4658807832926, "b": 266.6726614724146, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea", "bbox": {"l": 133.76801021944917, "t": 268.6660714834211, "r": 477.47586078330903, "b": 278.6286615384289, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "takimata sanctus est Lorem ipsum dolor sit amet.", "bbox": {"l": 133.76801021944917, "t": 280.62109154942993, "r": 351.4767205766048, "b": 290.58367160443765, "coord_origin": "TOPLEFT"}}], "children": []}, {"id": 3, "label": "text", "bbox": {"l": 133.76801021944917, "t": 292.5761116154388, "r": 477.47482078330734, "b": 350.3596819344868, "coord_origin": "TOPLEFT"}, "confidence": 0.9855858683586121, "cells": [{"id": 14, "text": "Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie", "bbox": {"l": 148.71201024396512, "t": 292.5761116154388, "r": 477.4710707833011, "b": 302.5386916704465, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et", "bbox": {"l": 133.76801021944917, "t": 304.5310616814471, "r": 477.47293078330415, "b": 314.4936517364549, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore", "bbox": {"l": 133.76801021944917, "t": 316.48608174745607, "r": 477.47482078330734, "b": 326.4486618024637, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit,", "bbox": {"l": 133.76801021944917, "t": 328.4411018134648, "r": 477.472810783304, "b": 338.40368186847246, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "sed diam nonummy nibh euismod tincidunt.", "bbox": {"l": 133.76801021944917, "t": 340.3970618794788, "r": 326.20752053515014, "b": 350.3596819344868, "coord_origin": "TOPLEFT"}}], "children": []}, {"id": 6, "label": "formula", "bbox": {"l": 280.5539904602546, "t": 362.4346620011579, "r": 330.6965905425146, "b": 374.2696820665041, "coord_origin": "TOPLEFT"}, "confidence": 0.8711639046669006, "cells": [{"id": 19, "text": "a", "bbox": {"l": 280.5539904602546, "t": 364.3070620114962, "r": 285.8142404688841, "b": 374.2696820665041, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "2", "bbox": {"l": 285.8200104688936, "t": 362.4346620011579, "r": 289.78809047540335, "b": 369.40844203966316, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "+ 8 = 12", "bbox": {"l": 292.50400047985886, "t": 364.3070620114962, "r": 330.6965905425146, "b": 374.2696820665041, "coord_origin": "TOPLEFT"}}], "children": []}, {"id": 0, "label": "text", "bbox": {"l": 133.76801021944917, "t": 382.24005211051195, "r": 477.47589078330907, "b": 523.7096828916267, "coord_origin": "TOPLEFT"}, "confidence": 0.9880034923553467, "cells": [{"id": 22, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy", "bbox": {"l": 148.71201024396512, "t": 382.24005211051195, "r": 477.4698807832991, "b": 392.2026621655199, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam", "bbox": {"l": 133.76801021944917, "t": 394.19506217652076, "r": 477.47580078330884, "b": 404.15768223152867, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita", "bbox": {"l": 133.76801021944917, "t": 406.15005224252945, "r": 477.47580078330884, "b": 416.1126722975373, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem", "bbox": {"l": 133.76801021944917, "t": 418.10507230853824, "r": 477.47284078330404, "b": 428.06768236354606, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod", "bbox": {"l": 133.76801021944917, "t": 430.0600523745468, "r": 477.47589078330907, "b": 440.0226724295547, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At", "bbox": {"l": 133.76801021944917, "t": 442.01605244056105, "r": 477.4717707833023, "b": 451.97866249556887, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren,", "bbox": {"l": 133.76801021944917, "t": 453.9710625065698, "r": 477.47388078330573, "b": 463.93368256157777, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor", "bbox": {"l": 133.76801021944917, "t": 465.9260525725785, "r": 477.4708307833007, "b": 475.88867262758635, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt", "bbox": {"l": 133.76801021944917, "t": 477.8810726385873, "r": 477.4709207833008, "b": 487.84368269359516, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et", "bbox": {"l": 133.76801021944917, "t": 489.8360527045959, "r": 477.4658807832926, "b": 499.7986727596038, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea", "bbox": {"l": 133.76801021944917, "t": 501.7910427706045, "r": 477.47586078330903, "b": 511.7536628256125, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "takimata sanctus est Lorem ipsum dolor sit amet.", "bbox": {"l": 133.76801021944917, "t": 513.7470728366188, "r": 351.4767205766048, "b": 523.7096828916267, "coord_origin": "TOPLEFT"}}], "children": []}, {"id": 4, "label": "text", "bbox": {"l": 133.76801021944917, "t": 525.7020529026275, "r": 477.47482078330734, "b": 595.4406532876844, "coord_origin": "TOPLEFT"}, "confidence": 0.9844803214073181, "cells": [{"id": 34, "text": "Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie", "bbox": {"l": 148.71201024396512, "t": 525.7020529026275, "r": 477.4710707833011, "b": 535.6646729576354, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et", "bbox": {"l": 133.76801021944917, "t": 537.6570729686364, "r": 477.47293078330415, "b": 547.6196930236442, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore", "bbox": {"l": 133.76801021944917, "t": 549.612063034645, "r": 477.47482078330734, "b": 559.5746730896528, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit,", "bbox": {"l": 133.76801021944917, "t": 561.5670431006536, "r": 477.472810783304, "b": 571.5296631556615, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat", "bbox": {"l": 133.76801021944917, "t": 573.5220631666624, "r": 477.47479078330724, "b": 583.4846832216704, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "volutpat.", "bbox": {"l": 133.76801021944917, "t": 585.4780532326765, "r": 173.0565202839028, "b": 595.4406532876844, "coord_origin": "TOPLEFT"}}], "children": []}, {"id": 2, "label": "text", "bbox": {"l": 133.76801021944917, "t": 597.4330632986853, "r": 477.47482078330734, "b": 667.1716636837423, "coord_origin": "TOPLEFT"}, "confidence": 0.9872003793716431, "cells": [{"id": 40, "text": "Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie", "bbox": {"l": 148.71201024396512, "t": 597.4330632986853, "r": 477.4710707833011, "b": 607.3956633536932, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et", "bbox": {"l": 133.76801021944917, "t": 609.3880633646941, "r": 477.47293078330415, "b": 619.3506634197018, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore", "bbox": {"l": 133.76801021944917, "t": 621.3430634307027, "r": 477.47482078330734, "b": 631.3056634857105, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit,", "bbox": {"l": 133.76801021944917, "t": 633.2980634967114, "r": 477.472810783304, "b": 643.2606635517193, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat", "bbox": {"l": 133.76801021944917, "t": 645.2540535627256, "r": 477.47479078330724, "b": 655.2166536177334, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "volutpat.", "bbox": {"l": 133.76801021944917, "t": 657.2090636287344, "r": 173.0565202839028, "b": 667.1716636837423, "coord_origin": "TOPLEFT"}}], "children": []}, {"id": 7, "label": "page_footer", "bbox": {"l": 303.13300049729594, "t": 695.1640638383003, "r": 308.1142905054678, "b": 705.1266638933081, "coord_origin": "TOPLEFT"}, "confidence": 0.850279688835144, "cells": [{"id": 46, "text": "1", "bbox": {"l": 303.13300049729594, "t": 695.1640638383003, "r": 308.1142905054678, "b": 705.1266638933081, "coord_origin": "TOPLEFT"}}], "children": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "section_header", "id": 5, "page_no": 1, "cluster": {"id": 5, "label": "section_header", "bbox": {"l": 133.76801021944917, "t": 124.00537068468714, "r": 191.51430031418315, "b": 138.36590076397772, "coord_origin": "TOPLEFT"}, "confidence": 0.95060133934021, "cells": [{"id": 0, "text": "Formula", "bbox": {"l": 133.76801021944917, "t": 124.00537068468714, "r": 191.51430031418315, "b": 138.36590076397772, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "Formula"}, {"label": "text", "id": 1, "page_no": 1, "cluster": {"id": 1, "label": "text", "bbox": {"l": 133.76801021944917, "t": 149.114070823323, "r": 477.4806507833169, "b": 290.58367160443765, "coord_origin": "TOPLEFT"}, "confidence": 0.9878177046775818, "cells": [{"id": 1, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eir-", "bbox": {"l": 133.76801021944917, "t": 149.114070823323, "r": 477.47687078331063, "b": 159.0766608783307, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "mod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam volup-", "bbox": {"l": 133.76801021944917, "t": 161.06909088933185, "r": 477.4778107833122, "b": 171.03167094433945, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "tua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd", "bbox": {"l": 133.76801021944917, "t": 173.0241009553406, "r": 477.46985078329914, "b": 182.9866910103483, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ip-", "bbox": {"l": 133.76801021944917, "t": 184.97906102134914, "r": 477.4718607833024, "b": 194.94165107635683, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "sum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor", "bbox": {"l": 133.76801021944917, "t": 196.93511108736357, "r": 477.4699407832993, "b": 206.89770114237137, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero", "bbox": {"l": 133.76801021944917, "t": 208.890071153372, "r": 477.4806507833169, "b": 218.8526612083799, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "eos et accusam et justo duo dolores et ea rebum.", "bbox": {"l": 133.76801021944917, "t": 220.84509121938083, "r": 355.20087058271434, "b": 230.80767127438855, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Stet clita kasd gubergren,", "bbox": {"l": 362.6010705948545, "t": 220.84509121938083, "r": 477.4749507833075, "b": 230.80767127438855, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor", "bbox": {"l": 133.76801021944917, "t": 232.8001112853898, "r": 477.4708307833007, "b": 242.76269134039728, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt", "bbox": {"l": 133.76801021944917, "t": 244.75506135139813, "r": 477.4709207833008, "b": 254.71765140640582, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et", "bbox": {"l": 133.76801021944917, "t": 256.71008141740685, "r": 477.4658807832926, "b": 266.6726614724146, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea", "bbox": {"l": 133.76801021944917, "t": 268.6660714834211, "r": 477.47586078330903, "b": 278.6286615384289, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "takimata sanctus est Lorem ipsum dolor sit amet.", "bbox": {"l": 133.76801021944917, "t": 280.62109154942993, "r": 351.4767205766048, "b": 290.58367160443765, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet."}, {"label": "text", "id": 3, "page_no": 1, "cluster": {"id": 3, "label": "text", "bbox": {"l": 133.76801021944917, "t": 292.5761116154388, "r": 477.47482078330734, "b": 350.3596819344868, "coord_origin": "TOPLEFT"}, "confidence": 0.9855858683586121, "cells": [{"id": 14, "text": "Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie", "bbox": {"l": 148.71201024396512, "t": 292.5761116154388, "r": 477.4710707833011, "b": 302.5386916704465, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et", "bbox": {"l": 133.76801021944917, "t": 304.5310616814471, "r": 477.47293078330415, "b": 314.4936517364549, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore", "bbox": {"l": 133.76801021944917, "t": 316.48608174745607, "r": 477.47482078330734, "b": 326.4486618024637, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit,", "bbox": {"l": 133.76801021944917, "t": 328.4411018134648, "r": 477.472810783304, "b": 338.40368186847246, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "sed diam nonummy nibh euismod tincidunt.", "bbox": {"l": 133.76801021944917, "t": 340.3970618794788, "r": 326.20752053515014, "b": 350.3596819344868, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt."}, {"label": "formula", "id": 6, "page_no": 1, "cluster": {"id": 6, "label": "formula", "bbox": {"l": 280.5539904602546, "t": 362.4346620011579, "r": 330.6965905425146, "b": 374.2696820665041, "coord_origin": "TOPLEFT"}, "confidence": 0.8711639046669006, "cells": [{"id": 19, "text": "a", "bbox": {"l": 280.5539904602546, "t": 364.3070620114962, "r": 285.8142404688841, "b": 374.2696820665041, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "2", "bbox": {"l": 285.8200104688936, "t": 362.4346620011579, "r": 289.78809047540335, "b": 369.40844203966316, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "+ 8 = 12", "bbox": {"l": 292.50400047985886, "t": 364.3070620114962, "r": 330.6965905425146, "b": 374.2696820665041, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "a 2 + 8 = 12"}, {"label": "text", "id": 0, "page_no": 1, "cluster": {"id": 0, "label": "text", "bbox": {"l": 133.76801021944917, "t": 382.24005211051195, "r": 477.47589078330907, "b": 523.7096828916267, "coord_origin": "TOPLEFT"}, "confidence": 0.9880034923553467, "cells": [{"id": 22, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy", "bbox": {"l": 148.71201024396512, "t": 382.24005211051195, "r": 477.4698807832991, "b": 392.2026621655199, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam", "bbox": {"l": 133.76801021944917, "t": 394.19506217652076, "r": 477.47580078330884, "b": 404.15768223152867, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita", "bbox": {"l": 133.76801021944917, "t": 406.15005224252945, "r": 477.47580078330884, "b": 416.1126722975373, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem", "bbox": {"l": 133.76801021944917, "t": 418.10507230853824, "r": 477.47284078330404, "b": 428.06768236354606, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod", "bbox": {"l": 133.76801021944917, "t": 430.0600523745468, "r": 477.47589078330907, "b": 440.0226724295547, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At", "bbox": {"l": 133.76801021944917, "t": 442.01605244056105, "r": 477.4717707833023, "b": 451.97866249556887, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren,", "bbox": {"l": 133.76801021944917, "t": 453.9710625065698, "r": 477.47388078330573, "b": 463.93368256157777, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor", "bbox": {"l": 133.76801021944917, "t": 465.9260525725785, "r": 477.4708307833007, "b": 475.88867262758635, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt", "bbox": {"l": 133.76801021944917, "t": 477.8810726385873, "r": 477.4709207833008, "b": 487.84368269359516, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et", "bbox": {"l": 133.76801021944917, "t": 489.8360527045959, "r": 477.4658807832926, "b": 499.7986727596038, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea", "bbox": {"l": 133.76801021944917, "t": 501.7910427706045, "r": 477.47586078330903, "b": 511.7536628256125, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "takimata sanctus est Lorem ipsum dolor sit amet.", "bbox": {"l": 133.76801021944917, "t": 513.7470728366188, "r": 351.4767205766048, "b": 523.7096828916267, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet."}, {"label": "text", "id": 4, "page_no": 1, "cluster": {"id": 4, "label": "text", "bbox": {"l": 133.76801021944917, "t": 525.7020529026275, "r": 477.47482078330734, "b": 595.4406532876844, "coord_origin": "TOPLEFT"}, "confidence": 0.9844803214073181, "cells": [{"id": 34, "text": "Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie", "bbox": {"l": 148.71201024396512, "t": 525.7020529026275, "r": 477.4710707833011, "b": 535.6646729576354, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et", "bbox": {"l": 133.76801021944917, "t": 537.6570729686364, "r": 477.47293078330415, "b": 547.6196930236442, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore", "bbox": {"l": 133.76801021944917, "t": 549.612063034645, "r": 477.47482078330734, "b": 559.5746730896528, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit,", "bbox": {"l": 133.76801021944917, "t": 561.5670431006536, "r": 477.472810783304, "b": 571.5296631556615, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat", "bbox": {"l": 133.76801021944917, "t": 573.5220631666624, "r": 477.47479078330724, "b": 583.4846832216704, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "volutpat.", "bbox": {"l": 133.76801021944917, "t": 585.4780532326765, "r": 173.0565202839028, "b": 595.4406532876844, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat."}, {"label": "text", "id": 2, "page_no": 1, "cluster": {"id": 2, "label": "text", "bbox": {"l": 133.76801021944917, "t": 597.4330632986853, "r": 477.47482078330734, "b": 667.1716636837423, "coord_origin": "TOPLEFT"}, "confidence": 0.9872003793716431, "cells": [{"id": 40, "text": "Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie", "bbox": {"l": 148.71201024396512, "t": 597.4330632986853, "r": 477.4710707833011, "b": 607.3956633536932, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et", "bbox": {"l": 133.76801021944917, "t": 609.3880633646941, "r": 477.47293078330415, "b": 619.3506634197018, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore", "bbox": {"l": 133.76801021944917, "t": 621.3430634307027, "r": 477.47482078330734, "b": 631.3056634857105, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit,", "bbox": {"l": 133.76801021944917, "t": 633.2980634967114, "r": 477.472810783304, "b": 643.2606635517193, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat", "bbox": {"l": 133.76801021944917, "t": 645.2540535627256, "r": 477.47479078330724, "b": 655.2166536177334, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "volutpat.", "bbox": {"l": 133.76801021944917, "t": 657.2090636287344, "r": 173.0565202839028, "b": 667.1716636837423, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat."}, {"label": "page_footer", "id": 7, "page_no": 1, "cluster": {"id": 7, "label": "page_footer", "bbox": {"l": 303.13300049729594, "t": 695.1640638383003, "r": 308.1142905054678, "b": 705.1266638933081, "coord_origin": "TOPLEFT"}, "confidence": 0.850279688835144, "cells": [{"id": 46, "text": "1", "bbox": {"l": 303.13300049729594, "t": 695.1640638383003, "r": 308.1142905054678, "b": 705.1266638933081, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "1"}], "body": [{"label": "section_header", "id": 5, "page_no": 1, "cluster": {"id": 5, "label": "section_header", "bbox": {"l": 133.76801021944917, "t": 124.00537068468714, "r": 191.51430031418315, "b": 138.36590076397772, "coord_origin": "TOPLEFT"}, "confidence": 0.95060133934021, "cells": [{"id": 0, "text": "Formula", "bbox": {"l": 133.76801021944917, "t": 124.00537068468714, "r": 191.51430031418315, "b": 138.36590076397772, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "Formula"}, {"label": "text", "id": 1, "page_no": 1, "cluster": {"id": 1, "label": "text", "bbox": {"l": 133.76801021944917, "t": 149.114070823323, "r": 477.4806507833169, "b": 290.58367160443765, "coord_origin": "TOPLEFT"}, "confidence": 0.9878177046775818, "cells": [{"id": 1, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eir-", "bbox": {"l": 133.76801021944917, "t": 149.114070823323, "r": 477.47687078331063, "b": 159.0766608783307, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "mod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam volup-", "bbox": {"l": 133.76801021944917, "t": 161.06909088933185, "r": 477.4778107833122, "b": 171.03167094433945, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "tua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd", "bbox": {"l": 133.76801021944917, "t": 173.0241009553406, "r": 477.46985078329914, "b": 182.9866910103483, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ip-", "bbox": {"l": 133.76801021944917, "t": 184.97906102134914, "r": 477.4718607833024, "b": 194.94165107635683, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "sum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor", "bbox": {"l": 133.76801021944917, "t": 196.93511108736357, "r": 477.4699407832993, "b": 206.89770114237137, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero", "bbox": {"l": 133.76801021944917, "t": 208.890071153372, "r": 477.4806507833169, "b": 218.8526612083799, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "eos et accusam et justo duo dolores et ea rebum.", "bbox": {"l": 133.76801021944917, "t": 220.84509121938083, "r": 355.20087058271434, "b": 230.80767127438855, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Stet clita kasd gubergren,", "bbox": {"l": 362.6010705948545, "t": 220.84509121938083, "r": 477.4749507833075, "b": 230.80767127438855, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor", "bbox": {"l": 133.76801021944917, "t": 232.8001112853898, "r": 477.4708307833007, "b": 242.76269134039728, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt", "bbox": {"l": 133.76801021944917, "t": 244.75506135139813, "r": 477.4709207833008, "b": 254.71765140640582, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et", "bbox": {"l": 133.76801021944917, "t": 256.71008141740685, "r": 477.4658807832926, "b": 266.6726614724146, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea", "bbox": {"l": 133.76801021944917, "t": 268.6660714834211, "r": 477.47586078330903, "b": 278.6286615384289, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "takimata sanctus est Lorem ipsum dolor sit amet.", "bbox": {"l": 133.76801021944917, "t": 280.62109154942993, "r": 351.4767205766048, "b": 290.58367160443765, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet."}, {"label": "text", "id": 3, "page_no": 1, "cluster": {"id": 3, "label": "text", "bbox": {"l": 133.76801021944917, "t": 292.5761116154388, "r": 477.47482078330734, "b": 350.3596819344868, "coord_origin": "TOPLEFT"}, "confidence": 0.9855858683586121, "cells": [{"id": 14, "text": "Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie", "bbox": {"l": 148.71201024396512, "t": 292.5761116154388, "r": 477.4710707833011, "b": 302.5386916704465, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et", "bbox": {"l": 133.76801021944917, "t": 304.5310616814471, "r": 477.47293078330415, "b": 314.4936517364549, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore", "bbox": {"l": 133.76801021944917, "t": 316.48608174745607, "r": 477.47482078330734, "b": 326.4486618024637, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit,", "bbox": {"l": 133.76801021944917, "t": 328.4411018134648, "r": 477.472810783304, "b": 338.40368186847246, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "sed diam nonummy nibh euismod tincidunt.", "bbox": {"l": 133.76801021944917, "t": 340.3970618794788, "r": 326.20752053515014, "b": 350.3596819344868, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt."}, {"label": "formula", "id": 6, "page_no": 1, "cluster": {"id": 6, "label": "formula", "bbox": {"l": 280.5539904602546, "t": 362.4346620011579, "r": 330.6965905425146, "b": 374.2696820665041, "coord_origin": "TOPLEFT"}, "confidence": 0.8711639046669006, "cells": [{"id": 19, "text": "a", "bbox": {"l": 280.5539904602546, "t": 364.3070620114962, "r": 285.8142404688841, "b": 374.2696820665041, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "2", "bbox": {"l": 285.8200104688936, "t": 362.4346620011579, "r": 289.78809047540335, "b": 369.40844203966316, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "+ 8 = 12", "bbox": {"l": 292.50400047985886, "t": 364.3070620114962, "r": 330.6965905425146, "b": 374.2696820665041, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "a 2 + 8 = 12"}, {"label": "text", "id": 0, "page_no": 1, "cluster": {"id": 0, "label": "text", "bbox": {"l": 133.76801021944917, "t": 382.24005211051195, "r": 477.47589078330907, "b": 523.7096828916267, "coord_origin": "TOPLEFT"}, "confidence": 0.9880034923553467, "cells": [{"id": 22, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy", "bbox": {"l": 148.71201024396512, "t": 382.24005211051195, "r": 477.4698807832991, "b": 392.2026621655199, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam", "bbox": {"l": 133.76801021944917, "t": 394.19506217652076, "r": 477.47580078330884, "b": 404.15768223152867, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita", "bbox": {"l": 133.76801021944917, "t": 406.15005224252945, "r": 477.47580078330884, "b": 416.1126722975373, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem", "bbox": {"l": 133.76801021944917, "t": 418.10507230853824, "r": 477.47284078330404, "b": 428.06768236354606, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod", "bbox": {"l": 133.76801021944917, "t": 430.0600523745468, "r": 477.47589078330907, "b": 440.0226724295547, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At", "bbox": {"l": 133.76801021944917, "t": 442.01605244056105, "r": 477.4717707833023, "b": 451.97866249556887, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren,", "bbox": {"l": 133.76801021944917, "t": 453.9710625065698, "r": 477.47388078330573, "b": 463.93368256157777, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor", "bbox": {"l": 133.76801021944917, "t": 465.9260525725785, "r": 477.4708307833007, "b": 475.88867262758635, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt", "bbox": {"l": 133.76801021944917, "t": 477.8810726385873, "r": 477.4709207833008, "b": 487.84368269359516, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et", "bbox": {"l": 133.76801021944917, "t": 489.8360527045959, "r": 477.4658807832926, "b": 499.7986727596038, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea", "bbox": {"l": 133.76801021944917, "t": 501.7910427706045, "r": 477.47586078330903, "b": 511.7536628256125, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "takimata sanctus est Lorem ipsum dolor sit amet.", "bbox": {"l": 133.76801021944917, "t": 513.7470728366188, "r": 351.4767205766048, "b": 523.7096828916267, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet."}, {"label": "text", "id": 4, "page_no": 1, "cluster": {"id": 4, "label": "text", "bbox": {"l": 133.76801021944917, "t": 525.7020529026275, "r": 477.47482078330734, "b": 595.4406532876844, "coord_origin": "TOPLEFT"}, "confidence": 0.9844803214073181, "cells": [{"id": 34, "text": "Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie", "bbox": {"l": 148.71201024396512, "t": 525.7020529026275, "r": 477.4710707833011, "b": 535.6646729576354, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et", "bbox": {"l": 133.76801021944917, "t": 537.6570729686364, "r": 477.47293078330415, "b": 547.6196930236442, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore", "bbox": {"l": 133.76801021944917, "t": 549.612063034645, "r": 477.47482078330734, "b": 559.5746730896528, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit,", "bbox": {"l": 133.76801021944917, "t": 561.5670431006536, "r": 477.472810783304, "b": 571.5296631556615, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat", "bbox": {"l": 133.76801021944917, "t": 573.5220631666624, "r": 477.47479078330724, "b": 583.4846832216704, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "volutpat.", "bbox": {"l": 133.76801021944917, "t": 585.4780532326765, "r": 173.0565202839028, "b": 595.4406532876844, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat."}, {"label": "text", "id": 2, "page_no": 1, "cluster": {"id": 2, "label": "text", "bbox": {"l": 133.76801021944917, "t": 597.4330632986853, "r": 477.47482078330734, "b": 667.1716636837423, "coord_origin": "TOPLEFT"}, "confidence": 0.9872003793716431, "cells": [{"id": 40, "text": "Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie", "bbox": {"l": 148.71201024396512, "t": 597.4330632986853, "r": 477.4710707833011, "b": 607.3956633536932, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et", "bbox": {"l": 133.76801021944917, "t": 609.3880633646941, "r": 477.47293078330415, "b": 619.3506634197018, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore", "bbox": {"l": 133.76801021944917, "t": 621.3430634307027, "r": 477.47482078330734, "b": 631.3056634857105, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit,", "bbox": {"l": 133.76801021944917, "t": 633.2980634967114, "r": 477.472810783304, "b": 643.2606635517193, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat", "bbox": {"l": 133.76801021944917, "t": 645.2540535627256, "r": 477.47479078330724, "b": 655.2166536177334, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "volutpat.", "bbox": {"l": 133.76801021944917, "t": 657.2090636287344, "r": 173.0565202839028, "b": 667.1716636837423, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat."}], "headers": [{"label": "page_footer", "id": 7, "page_no": 1, "cluster": {"id": 7, "label": "page_footer", "bbox": {"l": 303.13300049729594, "t": 695.1640638383003, "r": 308.1142905054678, "b": 705.1266638933081, "coord_origin": "TOPLEFT"}, "confidence": 0.850279688835144, "cells": [{"id": 46, "text": "1", "bbox": {"l": 303.13300049729594, "t": 695.1640638383003, "r": 308.1142905054678, "b": 705.1266638933081, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "1"}]}}] \ No newline at end of file diff --git a/tests/test_code_formula.py b/tests/test_code_formula.py new file mode 100644 index 00000000..05e87246 --- /dev/null +++ b/tests/test_code_formula.py @@ -0,0 +1,66 @@ +from pathlib import Path + +from docling_core.types.doc import CodeItem, TextItem +from docling_core.types.doc.labels import CodeLanguageLabel, DocItemLabel + +from docling.backend.docling_parse_backend import DoclingParseDocumentBackend +from docling.backend.docling_parse_v2_backend import DoclingParseV2DocumentBackend +from docling.datamodel.base_models import InputFormat +from docling.datamodel.document import ConversionResult +from docling.datamodel.pipeline_options import PdfPipelineOptions +from docling.document_converter import DocumentConverter, PdfFormatOption +from docling.pipeline.standard_pdf_pipeline import StandardPdfPipeline + + +def get_converter(): + + pipeline_options = PdfPipelineOptions() + pipeline_options.generate_page_images = True + + pipeline_options.do_ocr = False + pipeline_options.do_table_structure = False + pipeline_options.do_code_enrichment = True + pipeline_options.do_formula_enrichment = True + + converter = DocumentConverter( + format_options={ + InputFormat.PDF: PdfFormatOption( + backend=DoclingParseV2DocumentBackend, + pipeline_cls=StandardPdfPipeline, + pipeline_options=pipeline_options, + ) + } + ) + + return converter + + +def test_code_and_formula_conversion(): + pdf_path = Path("tests/data/code_and_formula.pdf") + converter = get_converter() + + print(f"converting {pdf_path}") + + doc_result: ConversionResult = converter.convert(pdf_path) + + results = doc_result.document.texts + + code_blocks = [el for el in results if isinstance(el, CodeItem)] + assert len(code_blocks) == 1 + + gt = 'public static void print() {\n System.out.println("Java Code");\n}' + + predicted = code_blocks[0].text.strip() + assert predicted == gt, f"mismatch in text {predicted=}, {gt=}" + assert code_blocks[0].code_language == CodeLanguageLabel.JAVA + + formula_blocks = [ + el + for el in results + if isinstance(el, TextItem) and el.label == DocItemLabel.FORMULA + ] + assert len(formula_blocks) == 1 + + gt = "a ^ { 2 } + 8 = 1 2" + predicted = formula_blocks[0].text + assert predicted == gt, f"mismatch in text {predicted=}, {gt=}" From e9768ae6a5910e19ed95917c1888651289a70720 Mon Sep 17 00:00:00 2001 From: Yusik Kim <107410898+kmyusk@users.noreply.github.com> Date: Fri, 24 Jan 2025 17:35:29 +0100 Subject: [PATCH 04/12] chore: expose draw_clusters function (#803) feat: expose draw_clusters function add type annotations to function signature Signed-off-by: Yusik Kim --- docling/models/layout_model.py | 94 ++++------------------------------ docling/utils/visualization.py | 80 +++++++++++++++++++++++++++++ 2 files changed, 89 insertions(+), 85 deletions(-) create mode 100644 docling/utils/visualization.py diff --git a/docling/models/layout_model.py b/docling/models/layout_model.py index 9fa0ecb4..69193c94 100644 --- a/docling/models/layout_model.py +++ b/docling/models/layout_model.py @@ -1,28 +1,21 @@ import copy import logging -import random -import time from pathlib import Path -from typing import Iterable, List +from typing import Iterable -from docling_core.types.doc import CoordOrigin, DocItemLabel +from docling_core.types.doc import DocItemLabel from docling_ibm_models.layoutmodel.layout_predictor import LayoutPredictor -from PIL import Image, ImageDraw, ImageFont - -from docling.datamodel.base_models import ( - BoundingBox, - Cell, - Cluster, - LayoutPrediction, - Page, -) +from PIL import Image + +from docling.datamodel.base_models import BoundingBox, Cluster, LayoutPrediction, Page from docling.datamodel.document import ConversionResult -from docling.datamodel.pipeline_options import AcceleratorDevice, AcceleratorOptions +from docling.datamodel.pipeline_options import AcceleratorOptions from docling.datamodel.settings import settings from docling.models.base_model import BasePageModel from docling.utils.accelerator_utils import decide_device from docling.utils.layout_postprocessor import LayoutPostprocessor from docling.utils.profiling import TimeRecorder +from docling.utils.visualization import draw_clusters _log = logging.getLogger(__name__) @@ -82,78 +75,9 @@ def draw_clusters_and_cells_side_by_side( left_image = copy.deepcopy(page.image) right_image = copy.deepcopy(page.image) - # Function to draw clusters on an image - def draw_clusters(image, clusters): - draw = ImageDraw.Draw(image, "RGBA") - # Create a smaller font for the labels - try: - font = ImageFont.truetype("arial.ttf", 12) - except OSError: - # Fallback to default font if arial is not available - font = ImageFont.load_default() - for c_tl in clusters: - all_clusters = [c_tl, *c_tl.children] - for c in all_clusters: - # Draw cells first (underneath) - cell_color = (0, 0, 0, 40) # Transparent black for cells - for tc in c.cells: - cx0, cy0, cx1, cy1 = tc.bbox.as_tuple() - cx0 *= scale_x - cx1 *= scale_x - cy0 *= scale_x - cy1 *= scale_y - - draw.rectangle( - [(cx0, cy0), (cx1, cy1)], - outline=None, - fill=cell_color, - ) - # Draw cluster rectangle - x0, y0, x1, y1 = c.bbox.as_tuple() - x0 *= scale_x - x1 *= scale_x - y0 *= scale_x - y1 *= scale_y - - cluster_fill_color = (*list(DocItemLabel.get_color(c.label)), 70) - cluster_outline_color = ( - *list(DocItemLabel.get_color(c.label)), - 255, - ) - draw.rectangle( - [(x0, y0), (x1, y1)], - outline=cluster_outline_color, - fill=cluster_fill_color, - ) - # Add label name and confidence - label_text = f"{c.label.name} ({c.confidence:.2f})" - # Create semi-transparent background for text - text_bbox = draw.textbbox((x0, y0), label_text, font=font) - text_bg_padding = 2 - draw.rectangle( - [ - ( - text_bbox[0] - text_bg_padding, - text_bbox[1] - text_bg_padding, - ), - ( - text_bbox[2] + text_bg_padding, - text_bbox[3] + text_bg_padding, - ), - ], - fill=(255, 255, 255, 180), # Semi-transparent white - ) - # Draw text - draw.text( - (x0, y0), - label_text, - fill=(0, 0, 0, 255), # Solid black - font=font, - ) - # Draw clusters on both images - draw_clusters(left_image, left_clusters) - draw_clusters(right_image, right_clusters) + draw_clusters(left_image, left_clusters, scale_x, scale_y) + draw_clusters(right_image, right_clusters, scale_x, scale_y) # Combine the images side by side combined_width = left_image.width * 2 combined_height = left_image.height diff --git a/docling/utils/visualization.py b/docling/utils/visualization.py new file mode 100644 index 00000000..465b7749 --- /dev/null +++ b/docling/utils/visualization.py @@ -0,0 +1,80 @@ +from docling_core.types.doc import DocItemLabel +from PIL import Image, ImageDraw, ImageFont +from PIL.ImageFont import FreeTypeFont + +from docling.datamodel.base_models import Cluster + + +def draw_clusters( + image: Image.Image, clusters: list[Cluster], scale_x: float, scale_y: float +) -> None: + """ + Draw clusters on an image + """ + draw = ImageDraw.Draw(image, "RGBA") + # Create a smaller font for the labels + font: ImageFont.ImageFont | FreeTypeFont + try: + font = ImageFont.truetype("arial.ttf", 12) + except OSError: + # Fallback to default font if arial is not available + font = ImageFont.load_default() + for c_tl in clusters: + all_clusters = [c_tl, *c_tl.children] + for c in all_clusters: + # Draw cells first (underneath) + cell_color = (0, 0, 0, 40) # Transparent black for cells + for tc in c.cells: + cx0, cy0, cx1, cy1 = tc.bbox.as_tuple() + cx0 *= scale_x + cx1 *= scale_x + cy0 *= scale_x + cy1 *= scale_y + + draw.rectangle( + [(cx0, cy0), (cx1, cy1)], + outline=None, + fill=cell_color, + ) + # Draw cluster rectangle + x0, y0, x1, y1 = c.bbox.as_tuple() + x0 *= scale_x + x1 *= scale_x + y0 *= scale_x + y1 *= scale_y + + cluster_fill_color = (*list(DocItemLabel.get_color(c.label)), 70) + cluster_outline_color = ( + *list(DocItemLabel.get_color(c.label)), + 255, + ) + draw.rectangle( + [(x0, y0), (x1, y1)], + outline=cluster_outline_color, + fill=cluster_fill_color, + ) + # Add label name and confidence + label_text = f"{c.label.name} ({c.confidence:.2f})" + # Create semi-transparent background for text + text_bbox = draw.textbbox((x0, y0), label_text, font=font) + text_bg_padding = 2 + draw.rectangle( + [ + ( + text_bbox[0] - text_bg_padding, + text_bbox[1] - text_bg_padding, + ), + ( + text_bbox[2] + text_bg_padding, + text_bbox[3] + text_bg_padding, + ), + ], + fill=(255, 255, 255, 180), # Semi-transparent white + ) + # Draw text + draw.text( + (x0, y0), + label_text, + fill=(0, 0, 0, 255), # Solid black + font=font, + ) From 88a0e66adc19238f57a942b0504926cdaeacd8cc Mon Sep 17 00:00:00 2001 From: Panos Vagenas <35837085+vagenas@users.noreply.github.com> Date: Fri, 24 Jan 2025 18:05:23 +0100 Subject: [PATCH 05/12] feat: add Docling JSON ingestion (#783) * feat: add Docling JSON ingestion Signed-off-by: Panos Vagenas <35837085+vagenas@users.noreply.github.com> * update conversion as per review comments, add tests, revert Docling JSON disambiguation, document intricacies Signed-off-by: Panos Vagenas <35837085+vagenas@users.noreply.github.com> * Update docling/backend/json/docling_json_backend.py Co-authored-by: Cesar Berrospi Ramis <75900930+ceberam@users.noreply.github.com> Signed-off-by: Panos Vagenas <35837085+vagenas@users.noreply.github.com> --------- Signed-off-by: Panos Vagenas <35837085+vagenas@users.noreply.github.com> Co-authored-by: Cesar Berrospi Ramis <75900930+ceberam@users.noreply.github.com> --- docling/backend/abstract_backend.py | 1 - docling/backend/json/__init__.py | 0 docling/backend/json/docling_json_backend.py | 58 ++++++++++++++++++++ docling/datamodel/base_models.py | 3 + docling/datamodel/document.py | 2 + docling/document_converter.py | 4 ++ tests/test_backend_docling_json.py | 58 ++++++++++++++++++++ tests/test_input_doc.py | 19 +++++++ 8 files changed, 144 insertions(+), 1 deletion(-) create mode 100644 docling/backend/json/__init__.py create mode 100644 docling/backend/json/docling_json_backend.py create mode 100644 tests/test_backend_docling_json.py diff --git a/docling/backend/abstract_backend.py b/docling/backend/abstract_backend.py index b47b11cd..491330b3 100644 --- a/docling/backend/abstract_backend.py +++ b/docling/backend/abstract_backend.py @@ -27,7 +27,6 @@ def is_valid(self) -> bool: def supports_pagination(cls) -> bool: pass - @abstractmethod def unload(self): if isinstance(self.path_or_stream, BytesIO): self.path_or_stream.close() diff --git a/docling/backend/json/__init__.py b/docling/backend/json/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/docling/backend/json/docling_json_backend.py b/docling/backend/json/docling_json_backend.py new file mode 100644 index 00000000..73ac6972 --- /dev/null +++ b/docling/backend/json/docling_json_backend.py @@ -0,0 +1,58 @@ +from io import BytesIO +from pathlib import Path +from typing import Union + +from docling_core.types.doc import DoclingDocument +from typing_extensions import override + +from docling.backend.abstract_backend import DeclarativeDocumentBackend +from docling.datamodel.base_models import InputFormat +from docling.datamodel.document import InputDocument + + +class DoclingJSONBackend(DeclarativeDocumentBackend): + @override + def __init__( + self, in_doc: InputDocument, path_or_stream: Union[BytesIO, Path] + ) -> None: + super().__init__(in_doc, path_or_stream) + + # given we need to store any actual conversion exception for raising it from + # convert(), this captures the successful result or the actual error in a + # mutually exclusive way: + self._doc_or_err = self._get_doc_or_err() + + @override + def is_valid(self) -> bool: + return isinstance(self._doc_or_err, DoclingDocument) + + @classmethod + @override + def supports_pagination(cls) -> bool: + return False + + @classmethod + @override + def supported_formats(cls) -> set[InputFormat]: + return {InputFormat.JSON_DOCLING} + + def _get_doc_or_err(self) -> Union[DoclingDocument, Exception]: + try: + json_data: Union[str, bytes] + if isinstance(self.path_or_stream, Path): + with open(self.path_or_stream, encoding="utf-8") as f: + json_data = f.read() + elif isinstance(self.path_or_stream, BytesIO): + json_data = self.path_or_stream.getvalue() + else: + raise RuntimeError(f"Unexpected: {type(self.path_or_stream)=}") + return DoclingDocument.model_validate_json(json_data=json_data) + except Exception as e: + return e + + @override + def convert(self) -> DoclingDocument: + if isinstance(self._doc_or_err, DoclingDocument): + return self._doc_or_err + else: + raise self._doc_or_err diff --git a/docling/datamodel/base_models.py b/docling/datamodel/base_models.py index 99d30108..d1e7ce3a 100644 --- a/docling/datamodel/base_models.py +++ b/docling/datamodel/base_models.py @@ -41,6 +41,7 @@ class InputFormat(str, Enum): MD = "md" XLSX = "xlsx" XML_USPTO = "xml_uspto" + JSON_DOCLING = "json_docling" class OutputFormat(str, Enum): @@ -62,6 +63,7 @@ class OutputFormat(str, Enum): InputFormat.ASCIIDOC: ["adoc", "asciidoc", "asc"], InputFormat.XLSX: ["xlsx"], InputFormat.XML_USPTO: ["xml", "txt"], + InputFormat.JSON_DOCLING: ["json"], } FormatToMimeType: Dict[InputFormat, List[str]] = { @@ -90,6 +92,7 @@ class OutputFormat(str, Enum): "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" ], InputFormat.XML_USPTO: ["application/xml", "text/plain"], + InputFormat.JSON_DOCLING: ["application/json"], } MimeTypeToFormat: dict[str, list[InputFormat]] = { diff --git a/docling/datamodel/document.py b/docling/datamodel/document.py index 136428e8..a2a93aa3 100644 --- a/docling/datamodel/document.py +++ b/docling/datamodel/document.py @@ -350,6 +350,8 @@ def _mime_from_extension(ext): mime = FormatToMimeType[InputFormat.HTML][0] elif ext in FormatToExtensions[InputFormat.MD]: mime = FormatToMimeType[InputFormat.MD][0] + elif ext in FormatToExtensions[InputFormat.JSON_DOCLING]: + mime = FormatToMimeType[InputFormat.JSON_DOCLING][0] return mime @staticmethod diff --git a/docling/document_converter.py b/docling/document_converter.py index cb073949..13203ea7 100644 --- a/docling/document_converter.py +++ b/docling/document_converter.py @@ -11,6 +11,7 @@ from docling.backend.asciidoc_backend import AsciiDocBackend from docling.backend.docling_parse_v2_backend import DoclingParseV2DocumentBackend from docling.backend.html_backend import HTMLDocumentBackend +from docling.backend.json.docling_json_backend import DoclingJSONBackend from docling.backend.md_backend import MarkdownDocumentBackend from docling.backend.msexcel_backend import MsExcelDocumentBackend from docling.backend.mspowerpoint_backend import MsPowerpointDocumentBackend @@ -136,6 +137,9 @@ def _get_default_option(format: InputFormat) -> FormatOption: InputFormat.PDF: FormatOption( pipeline_cls=StandardPdfPipeline, backend=DoclingParseV2DocumentBackend ), + InputFormat.JSON_DOCLING: FormatOption( + pipeline_cls=SimplePipeline, backend=DoclingJSONBackend + ), } if (options := format_to_default_options.get(format)) is not None: return options diff --git a/tests/test_backend_docling_json.py b/tests/test_backend_docling_json.py new file mode 100644 index 00000000..a38d9da1 --- /dev/null +++ b/tests/test_backend_docling_json.py @@ -0,0 +1,58 @@ +"""Test methods in module docling.backend.json.docling_json_backend.py.""" + +from io import BytesIO +from pathlib import Path + +import pytest +from pydantic import ValidationError + +from docling.backend.json.docling_json_backend import DoclingJSONBackend +from docling.datamodel.base_models import InputFormat +from docling.datamodel.document import DoclingDocument, InputDocument + +GT_PATH: Path = Path("./tests/data/groundtruth/docling_v2/2206.01062.json") + + +def test_convert_valid_docling_json(): + """Test ingestion of valid Docling JSON.""" + cls = DoclingJSONBackend + path_or_stream = GT_PATH + in_doc = InputDocument( + path_or_stream=path_or_stream, + format=InputFormat.JSON_DOCLING, + backend=cls, + ) + backend = cls( + in_doc=in_doc, + path_or_stream=path_or_stream, + ) + assert backend.is_valid() + + act_doc = backend.convert() + act_data = act_doc.export_to_dict() + + exp_doc = DoclingDocument.load_from_json(GT_PATH) + exp_data = exp_doc.export_to_dict() + + assert act_data == exp_data + + +def test_invalid_docling_json(): + """Test ingestion of invalid Docling JSON.""" + cls = DoclingJSONBackend + path_or_stream = BytesIO(b"{}") + in_doc = InputDocument( + path_or_stream=path_or_stream, + format=InputFormat.JSON_DOCLING, + backend=cls, + filename="foo", + ) + backend = cls( + in_doc=in_doc, + path_or_stream=path_or_stream, + ) + + assert not backend.is_valid() + + with pytest.raises(ValidationError): + backend.convert() diff --git a/tests/test_input_doc.py b/tests/test_input_doc.py index 8b084667..f6c516aa 100644 --- a/tests/test_input_doc.py +++ b/tests/test_input_doc.py @@ -124,6 +124,25 @@ def test_guess_format(tmp_path): doc_path.write_text("xyz", encoding="utf-8") assert dci._guess_format(doc_path) == None + # Valid Docling JSON + test_str = '{"name": ""}' + stream = DocumentStream(name="test.json", stream=BytesIO(f"{test_str}".encode())) + assert dci._guess_format(stream) == InputFormat.JSON_DOCLING + doc_path = temp_dir / "test.json" + doc_path.write_text(test_str, encoding="utf-8") + assert dci._guess_format(doc_path) == InputFormat.JSON_DOCLING + + # Non-Docling JSON + # TODO: Docling JSON is currently the single supported JSON flavor and the pipeline + # will try to validate *any* JSON (based on suffix/MIME) as Docling JSON; proper + # disambiguation seen as part of https://github.com/DS4SD/docling/issues/802 + test_str = "{}" + stream = DocumentStream(name="test.json", stream=BytesIO(f"{test_str}".encode())) + assert dci._guess_format(stream) == InputFormat.JSON_DOCLING + doc_path = temp_dir / "test.json" + doc_path.write_text(test_str, encoding="utf-8") + assert dci._guess_format(doc_path) == InputFormat.JSON_DOCLING + def _make_input_doc(path): in_doc = InputDocument( From 16a218d871c48fd9cc636b77f7b597dc40cbeeec Mon Sep 17 00:00:00 2001 From: Matteo <43417658+Matteo-Omenetti@users.noreply.github.com> Date: Fri, 24 Jan 2025 18:05:51 +0100 Subject: [PATCH 06/12] feat: New document picture classifier (#805) * figure classifier Signed-off-by: Matteo Omenetti * gt for e2e tests Signed-off-by: Matteo Omenetti * tests Signed-off-by: Matteo Omenetti --------- Signed-off-by: Matteo Omenetti --- docling/datamodel/pipeline_options.py | 1 + docling/models/document_picture_classifier.py | 187 ++++++++++++++++++ docling/pipeline/standard_pdf_pipeline.py | 11 ++ poetry.lock | 40 ++-- pyproject.toml | 2 +- .../picture_classification.doctags.txt | 17 ++ .../docling_v1/picture_classification.json | 1 + .../docling_v1/picture_classification.md | 15 ++ .../picture_classification.pages.json | 1 + .../picture_classification.doctags.txt | 15 ++ .../docling_v2/picture_classification.json | 1 + .../docling_v2/picture_classification.md | 17 ++ .../picture_classification.pages.json | 1 + tests/data/picture_classification.pdf | Bin 0 -> 212855 bytes tests/test_document_picture_classifier.py | 81 ++++++++ 15 files changed, 369 insertions(+), 21 deletions(-) create mode 100644 docling/models/document_picture_classifier.py create mode 100644 tests/data/groundtruth/docling_v1/picture_classification.doctags.txt create mode 100644 tests/data/groundtruth/docling_v1/picture_classification.json create mode 100644 tests/data/groundtruth/docling_v1/picture_classification.md create mode 100644 tests/data/groundtruth/docling_v1/picture_classification.pages.json create mode 100644 tests/data/groundtruth/docling_v2/picture_classification.doctags.txt create mode 100644 tests/data/groundtruth/docling_v2/picture_classification.json create mode 100644 tests/data/groundtruth/docling_v2/picture_classification.md create mode 100644 tests/data/groundtruth/docling_v2/picture_classification.pages.json create mode 100644 tests/data/picture_classification.pdf create mode 100644 tests/test_document_picture_classifier.py diff --git a/docling/datamodel/pipeline_options.py b/docling/datamodel/pipeline_options.py index efdf3b1c..00ab7b41 100644 --- a/docling/datamodel/pipeline_options.py +++ b/docling/datamodel/pipeline_options.py @@ -221,6 +221,7 @@ class PdfPipelineOptions(PipelineOptions): do_ocr: bool = True # True: perform OCR, replace programmatic PDF text do_code_enrichment: bool = False # True: perform code OCR do_formula_enrichment: bool = False # True: perform formula OCR, return Latex code + do_picture_classification: bool = False # True: classify pictures in documents table_structure_options: TableStructureOptions = TableStructureOptions() ocr_options: Union[ diff --git a/docling/models/document_picture_classifier.py b/docling/models/document_picture_classifier.py new file mode 100644 index 00000000..6e2d90b4 --- /dev/null +++ b/docling/models/document_picture_classifier.py @@ -0,0 +1,187 @@ +from pathlib import Path +from typing import Iterable, List, Literal, Optional, Tuple, Union + +from docling_core.types.doc import ( + DoclingDocument, + NodeItem, + PictureClassificationClass, + PictureClassificationData, + PictureItem, +) +from PIL import Image +from pydantic import BaseModel + +from docling.datamodel.pipeline_options import AcceleratorOptions +from docling.models.base_model import BaseEnrichmentModel +from docling.utils.accelerator_utils import decide_device + + +class DocumentPictureClassifierOptions(BaseModel): + """ + Options for configuring the DocumentPictureClassifier. + + Attributes + ---------- + kind : Literal["document_picture_classifier"] + Identifier for the type of classifier. + """ + + kind: Literal["document_picture_classifier"] = "document_picture_classifier" + + +class DocumentPictureClassifier(BaseEnrichmentModel): + """ + A model for classifying pictures in documents. + + This class enriches document pictures with predicted classifications + based on a predefined set of classes. + + Attributes + ---------- + enabled : bool + Whether the classifier is enabled for use. + options : DocumentPictureClassifierOptions + Configuration options for the classifier. + document_picture_classifier : DocumentPictureClassifierPredictor + The underlying prediction model, loaded if the classifier is enabled. + + Methods + ------- + __init__(enabled, artifacts_path, options, accelerator_options) + Initializes the classifier with specified configurations. + is_processable(doc, element) + Checks if the given element can be processed by the classifier. + __call__(doc, element_batch) + Processes a batch of elements and adds classification annotations. + """ + + images_scale = 2 + + def __init__( + self, + enabled: bool, + artifacts_path: Optional[Union[Path, str]], + options: DocumentPictureClassifierOptions, + accelerator_options: AcceleratorOptions, + ): + """ + Initializes the DocumentPictureClassifier. + + Parameters + ---------- + enabled : bool + Indicates whether the classifier is enabled. + artifacts_path : Optional[Union[Path, str]], + Path to the directory containing model artifacts. + options : DocumentPictureClassifierOptions + Configuration options for the classifier. + accelerator_options : AcceleratorOptions + Options for configuring the device and parallelism. + """ + self.enabled = enabled + self.options = options + + if self.enabled: + device = decide_device(accelerator_options.device) + from docling_ibm_models.document_figure_classifier_model.document_figure_classifier_predictor import ( + DocumentFigureClassifierPredictor, + ) + + if artifacts_path is None: + artifacts_path = self.download_models_hf() + else: + artifacts_path = Path(artifacts_path) + + self.document_picture_classifier = DocumentFigureClassifierPredictor( + artifacts_path=artifacts_path, + device=device, + num_threads=accelerator_options.num_threads, + ) + + @staticmethod + def download_models_hf( + local_dir: Optional[Path] = None, force: bool = False + ) -> Path: + from huggingface_hub import snapshot_download + from huggingface_hub.utils import disable_progress_bars + + disable_progress_bars() + download_path = snapshot_download( + repo_id="ds4sd/DocumentFigureClassifier", + force_download=force, + local_dir=local_dir, + revision="v1.0.0", + ) + + return Path(download_path) + + def is_processable(self, doc: DoclingDocument, element: NodeItem) -> bool: + """ + Determines if the given element can be processed by the classifier. + + Parameters + ---------- + doc : DoclingDocument + The document containing the element. + element : NodeItem + The element to be checked. + + Returns + ------- + bool + True if the element is a PictureItem and processing is enabled; False otherwise. + """ + return self.enabled and isinstance(element, PictureItem) + + def __call__( + self, + doc: DoclingDocument, + element_batch: Iterable[NodeItem], + ) -> Iterable[NodeItem]: + """ + Processes a batch of elements and enriches them with classification predictions. + + Parameters + ---------- + doc : DoclingDocument + The document containing the elements to be processed. + element_batch : Iterable[NodeItem] + A batch of pictures to classify. + + Returns + ------- + Iterable[NodeItem] + An iterable of NodeItem objects after processing. The field + 'data.classification' is added containing the classification for each picture. + """ + if not self.enabled: + for element in element_batch: + yield element + return + + images: List[Image.Image] = [] + elements: List[PictureItem] = [] + for el in element_batch: + assert isinstance(el, PictureItem) + elements.append(el) + img = el.get_image(doc) + assert img is not None + images.append(img) + + outputs = self.document_picture_classifier.predict(images) + + for element, output in zip(elements, outputs): + element.annotations.append( + PictureClassificationData( + provenance="DocumentPictureClassifier", + predicted_classes=[ + PictureClassificationClass( + class_name=pred[0], + confidence=pred[1], + ) + for pred in output + ], + ) + ) + + yield element diff --git a/docling/pipeline/standard_pdf_pipeline.py b/docling/pipeline/standard_pdf_pipeline.py index 97bcc6b6..fe2201d6 100644 --- a/docling/pipeline/standard_pdf_pipeline.py +++ b/docling/pipeline/standard_pdf_pipeline.py @@ -19,6 +19,10 @@ ) from docling.models.base_ocr_model import BaseOcrModel from docling.models.code_formula_model import CodeFormulaModel, CodeFormulaModelOptions +from docling.models.document_picture_classifier import ( + DocumentPictureClassifier, + DocumentPictureClassifierOptions, +) from docling.models.ds_glm_model import GlmModel, GlmOptions from docling.models.easyocr_model import EasyOcrModel from docling.models.layout_model import LayoutModel @@ -104,6 +108,13 @@ def __init__(self, pipeline_options: PdfPipelineOptions): ), accelerator_options=pipeline_options.accelerator_options, ), + # Document Picture Classifier + DocumentPictureClassifier( + enabled=pipeline_options.do_picture_classification, + artifacts_path=pipeline_options.artifacts_path, + options=DocumentPictureClassifierOptions(), + accelerator_options=pipeline_options.accelerator_options, + ), ] if ( diff --git a/poetry.lock b/poetry.lock index 73fc85db..c3905141 100644 --- a/poetry.lock +++ b/poetry.lock @@ -888,13 +888,13 @@ chunking = ["semchunk (>=2.2.0,<3.0.0)", "transformers (>=4.34.0,<5.0.0)"] [[package]] name = "docling-ibm-models" -version = "3.2.1" +version = "3.3.0" description = "This package contains the AI models used by the Docling PDF conversion package" optional = false python-versions = "<4.0,>=3.9" files = [ - {file = "docling_ibm_models-3.2.1-py3-none-any.whl", hash = "sha256:55bca5673381cc5862f4de584345020d071414c46bc1b9f6436d674e3610ec97"}, - {file = "docling_ibm_models-3.2.1.tar.gz", hash = "sha256:abd1bdc58f00600065eedbfbd34876704d5004cd20884a2c0a61ca2ee5a927dd"}, + {file = "docling_ibm_models-3.3.0-py3-none-any.whl", hash = "sha256:f1c99d345cb524239c7a2090969920e4311fd2fe22dad9bd609bc38039ec56eb"}, + {file = "docling_ibm_models-3.3.0.tar.gz", hash = "sha256:5a7497053871179d59870c830945aa8664a34aac48b7e68edf602720ee7f6c49"}, ] [package.dependencies] @@ -1046,13 +1046,13 @@ testing = ["hatch", "pre-commit", "pytest", "tox"] [[package]] name = "executing" -version = "2.1.0" +version = "2.2.0" description = "Get the currently executing AST node of a frame, and other information" optional = false python-versions = ">=3.8" files = [ - {file = "executing-2.1.0-py2.py3-none-any.whl", hash = "sha256:8d63781349375b5ebccc3142f4b30350c0cd9c79f921cde38be2be4637e98eaf"}, - {file = "executing-2.1.0.tar.gz", hash = "sha256:8ea27ddd260da8150fa5a708269c4a10e76161e2496ec3e587da9e3c0fe4b9ab"}, + {file = "executing-2.2.0-py2.py3-none-any.whl", hash = "sha256:11387150cad388d62750327a53d3339fad4888b39a6fe233c3afbb54ecffd3aa"}, + {file = "executing-2.2.0.tar.gz", hash = "sha256:5d108c028108fe2551d1a7b2e8b713341e2cb4fc0aa7dcf966fa4327a5226755"}, ] [package.extras] @@ -3674,14 +3674,14 @@ files = [ [[package]] name = "nvidia-nvjitlink-cu12" -version = "12.6.85" +version = "12.8.61" description = "Nvidia JIT LTO Library" optional = false python-versions = ">=3" files = [ - {file = "nvidia_nvjitlink_cu12-12.6.85-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl", hash = "sha256:eedc36df9e88b682efe4309aa16b5b4e78c2407eac59e8c10a6a47535164369a"}, - {file = "nvidia_nvjitlink_cu12-12.6.85-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:cf4eaa7d4b6b543ffd69d6abfb11efdeb2db48270d94dfd3a452c24150829e41"}, - {file = "nvidia_nvjitlink_cu12-12.6.85-py3-none-win_amd64.whl", hash = "sha256:e61120e52ed675747825cdd16febc6a0730537451d867ee58bee3853b1b13d1c"}, + {file = "nvidia_nvjitlink_cu12-12.8.61-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl", hash = "sha256:45fd79f2ae20bd67e8bc411055939049873bfd8fac70ff13bd4865e0b9bdab17"}, + {file = "nvidia_nvjitlink_cu12-12.8.61-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:9b80ecab31085dda3ce3b41d043be0ec739216c3fc633b8abe212d5a30026df0"}, + {file = "nvidia_nvjitlink_cu12-12.8.61-py3-none-win_amd64.whl", hash = "sha256:1166a964d25fdc0eae497574d38824305195a5283324a21ccb0ce0c802cbf41c"}, ] [[package]] @@ -4612,13 +4612,13 @@ files = [ [[package]] name = "pydantic" -version = "2.10.5" +version = "2.10.6" description = "Data validation using Python type hints" optional = false python-versions = ">=3.8" files = [ - {file = "pydantic-2.10.5-py3-none-any.whl", hash = "sha256:4dd4e322dbe55472cb7ca7e73f4b63574eecccf2835ffa2af9021ce113c83c53"}, - {file = "pydantic-2.10.5.tar.gz", hash = "sha256:278b38dbbaec562011d659ee05f63346951b3a248a6f3642e1bc68894ea2b4ff"}, + {file = "pydantic-2.10.6-py3-none-any.whl", hash = "sha256:427d664bf0b8a2b34ff5dd0f5a18df00591adcee7198fbd71981054cef37b584"}, + {file = "pydantic-2.10.6.tar.gz", hash = "sha256:ca5daa827cce33de7a42be142548b0096bf05a7e7b365aebfa5f8eeec7128236"}, ] [package.dependencies] @@ -6124,13 +6124,13 @@ files = [ [[package]] name = "sentence-transformers" -version = "3.3.1" +version = "3.4.0" description = "State-of-the-Art Text Embeddings" optional = false python-versions = ">=3.9" files = [ - {file = "sentence_transformers-3.3.1-py3-none-any.whl", hash = "sha256:abffcc79dab37b7d18d21a26d5914223dd42239cfe18cb5e111c66c54b658ae7"}, - {file = "sentence_transformers-3.3.1.tar.gz", hash = "sha256:9635dbfb11c6b01d036b9cfcee29f7716ab64cf2407ad9f403a2e607da2ac48b"}, + {file = "sentence_transformers-3.4.0-py3-none-any.whl", hash = "sha256:f7d4ad81260149172a98108a3481d8e82c11d31f40d41885f43d481149237743"}, + {file = "sentence_transformers-3.4.0.tar.gz", hash = "sha256:334288062d4b888cdd7b75913fead46b1e42bfe836f8343d23478d17f799e650"}, ] [package.dependencies] @@ -7487,13 +7487,13 @@ files = [ [[package]] name = "xlsxwriter" -version = "3.2.0" +version = "3.2.1" description = "A Python module for creating Excel XLSX files." optional = false python-versions = ">=3.6" files = [ - {file = "XlsxWriter-3.2.0-py3-none-any.whl", hash = "sha256:ecfd5405b3e0e228219bcaf24c2ca0915e012ca9464a14048021d21a995d490e"}, - {file = "XlsxWriter-3.2.0.tar.gz", hash = "sha256:9977d0c661a72866a61f9f7a809e25ebbb0fb7036baa3b9fe74afcfca6b3cb8c"}, + {file = "XlsxWriter-3.2.1-py3-none-any.whl", hash = "sha256:7e8f7c60b7a1660ef791d46ab5de78469cb978b991ca841af61f5832d2f9f4fe"}, + {file = "XlsxWriter-3.2.1.tar.gz", hash = "sha256:97618759cb264fb6a93397f660cca156ffa9561743b1823dafb60dc4474e1902"}, ] [[package]] @@ -7751,4 +7751,4 @@ tesserocr = ["tesserocr"] [metadata] lock-version = "2.0" python-versions = "^3.9" -content-hash = "8bb0b67294a50c0340c5cc02ce60d3608ef4d1968ae50f7e0b8b4c8a26c34734" +content-hash = "7fcfc061454f229745d6f305e1fa593468a684059717195c6ae4174bec13d362" diff --git a/pyproject.toml b/pyproject.toml index c3e1fa67..6945e5a7 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -27,7 +27,7 @@ packages = [{include = "docling"}] python = "^3.9" pydantic = "^2.0.0" docling-core = { version = "^2.15.1", extras = ["chunking"] } -docling-ibm-models = "^3.2.1" +docling-ibm-models = "^3.3.0" deepsearch-glm = "^1.0.0" docling-parse = "^3.1.0" filetype = "^1.2.0" diff --git a/tests/data/groundtruth/docling_v1/picture_classification.doctags.txt b/tests/data/groundtruth/docling_v1/picture_classification.doctags.txt new file mode 100644 index 00000000..cbcde73f --- /dev/null +++ b/tests/data/groundtruth/docling_v1/picture_classification.doctags.txt @@ -0,0 +1,17 @@ + +Figures Example +Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. +Figure 1: This is an example image. +

+ +Figure 1: This is an example image. +
+Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. +Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. +Figure 2: This is an example image. +
+ +Figure 2: This is an example image. +
+Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. + \ No newline at end of file diff --git a/tests/data/groundtruth/docling_v1/picture_classification.json b/tests/data/groundtruth/docling_v1/picture_classification.json new file mode 100644 index 00000000..ad1bc5c2 --- /dev/null +++ b/tests/data/groundtruth/docling_v1/picture_classification.json @@ -0,0 +1 @@ +{"_name": "", "type": "pdf-document", "description": {"title": null, "abstract": null, "authors": null, "affiliations": null, "subjects": null, "keywords": null, "publication_date": null, "languages": null, "license": null, "publishers": null, "url_refs": null, "references": null, "publication": null, "reference_count": null, "citation_count": null, "citation_date": null, "advanced": null, "analytics": null, "logs": [], "collection": null, "acquisition": null}, "file-info": {"filename": "picture_classification.pdf", "filename-prov": null, "document-hash": "959854dff729acaa22404d629a45cefcad8d942e595961185fc03a80d9fcc3a1", "#-pages": 2, "collection-name": null, "description": null, "page-hashes": [{"hash": "d9e3fc1226356b30c66012f05ad14089b00c59ea129195cd6ff8a0c68bda6f39", "model": "default", "page": 1}, {"hash": "9386884e13a97ce9662210a7e4258bbbb4f2e0e00663636160918e55b2806575", "model": "default", "page": 2}]}, "main-text": [{"prov": [{"bbox": [133.76800537109375, 654.4518432617188, 252.35513305664062, 667.1912231445312], "page": 1, "span": [0, 15], "__ref_s3_data": null}], "text": "Figures Example", "type": "subtitle-level-1", "payload": null, "name": "Section-header", "font": null}, {"prov": [{"bbox": [133.76800537109375, 501.97412109375, 477.4827575683594, 642.3280639648438], "page": 1, "span": [0, 887], "__ref_s3_data": null}], "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.", "type": "paragraph", "payload": null, "name": "Text", "font": null}, {"prov": [{"bbox": [226.89100646972656, 254.0182647705078, 384.35479736328125, 262.86505126953125], "page": 1, "span": [0, 35], "__ref_s3_data": null}], "text": "Figure 1: This is an example image.", "type": "caption", "payload": null, "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/0"}, {"prov": [{"bbox": [133.76800537109375, 122.51225280761719, 477.4817199707031, 238.95504760742188], "page": 1, "span": [0, 747], "__ref_s3_data": null}], "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.", "type": "paragraph", "payload": null, "name": "Text", "font": null}, {"prov": [{"bbox": [303.13299560546875, 87.43224334716797, 308.1142883300781, 96.27903747558594], "page": 1, "span": [0, 1], "__ref_s3_data": null}], "text": "1", "type": "page-footer", "payload": null, "name": "Page-footer", "font": null}, {"prov": [{"bbox": [133.76800537109375, 523.7951049804688, 477.4817199707031, 664.1490478515625], "page": 2, "span": [0, 887], "__ref_s3_data": null}], "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.", "type": "paragraph", "payload": null, "name": "Text", "font": null}, {"prov": [{"bbox": [226.89100646972656, 259.9422607421875, 384.35479736328125, 268.7890319824219], "page": 2, "span": [0, 35], "__ref_s3_data": null}], "text": "Figure 2: This is an example image.", "type": "caption", "payload": null, "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/1"}, {"prov": [{"bbox": [133.76800537109375, 117.32023620605469, 477.4817199707031, 245.71804809570312], "page": 2, "span": [0, 804], "__ref_s3_data": null}], "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum.", "type": "paragraph", "payload": null, "name": "Text", "font": null}, {"prov": [{"bbox": [303.13299560546875, 87.43224334716797, 308.1142883300781, 96.27903747558594], "page": 2, "span": [0, 1], "__ref_s3_data": null}], "text": "2", "type": "page-footer", "payload": null, "name": "Page-footer", "font": null}], "figures": [{"prov": [{"bbox": [134.92005920410156, 281.78173828125, 475.66351318359375, 487.109375], "page": 1, "span": [0, 35], "__ref_s3_data": null}], "text": "Figure 1: This is an example image.", "type": "figure", "payload": null, "bounding-box": null}, {"prov": [{"bbox": [218.8155517578125, 283.10589599609375, 391.96246337890625, 513.984619140625], "page": 2, "span": [0, 35], "__ref_s3_data": null}], "text": "Figure 2: This is an example image.", "type": "figure", "payload": null, "bounding-box": null}], "tables": [], "bitmaps": null, "equations": [], "footnotes": [], "page-dimensions": [{"height": 792.0, "page": 1, "width": 612.0}, {"height": 792.0, "page": 2, "width": 612.0}], "page-footers": [], "page-headers": [], "_s3_data": null, "identifiers": null} \ No newline at end of file diff --git a/tests/data/groundtruth/docling_v1/picture_classification.md b/tests/data/groundtruth/docling_v1/picture_classification.md new file mode 100644 index 00000000..6b9d1faf --- /dev/null +++ b/tests/data/groundtruth/docling_v1/picture_classification.md @@ -0,0 +1,15 @@ +## Figures Example + +Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. + +Figure 1: This is an example image. + + +Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. + +Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. + +Figure 2: This is an example image. + + +Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. \ No newline at end of file diff --git a/tests/data/groundtruth/docling_v1/picture_classification.pages.json b/tests/data/groundtruth/docling_v1/picture_classification.pages.json new file mode 100644 index 00000000..744f54fb --- /dev/null +++ b/tests/data/groundtruth/docling_v1/picture_classification.pages.json @@ -0,0 +1 @@ +[{"page_no": 0, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Figures Example", "bbox": {"l": 133.76801, "t": 124.80877999999996, "r": 252.35513, "b": 137.54816000000005, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eir-", "bbox": {"l": 133.76801, "t": 149.67193999999995, "r": 477.47971, "b": 158.51873999999998, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "mod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam volup-", "bbox": {"l": 133.76801, "t": 161.62694999999997, "r": 477.4806500000001, "b": 170.47375, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "tua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd", "bbox": {"l": 133.76801, "t": 173.58196999999996, "r": 477.47571000000005, "b": 182.42877, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ip-", "bbox": {"l": 133.76801, "t": 185.53698999999995, "r": 477.47466999999995, "b": 194.38378999999998, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "sum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor", "bbox": {"l": 133.76801, "t": 197.49199999999996, "r": 477.47668, "b": 206.33880999999997, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero", "bbox": {"l": 133.76801, "t": 209.44701999999995, "r": 477.48068000000006, "b": 218.29381999999998, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "eos et accusam et justo duo dolores et ea rebum.", "bbox": {"l": 133.76801, "t": 221.40301999999997, "r": 355.20874, "b": 230.24982, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Stet clita kasd gubergren,", "bbox": {"l": 362.60098, "t": 221.40301999999997, "r": 477.48276, "b": 230.24982, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor", "bbox": {"l": 133.76801, "t": 233.35802999999999, "r": 477.47772, "b": 242.20483000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt", "bbox": {"l": 133.76801, "t": 245.31304999999998, "r": 477.47971, "b": 254.15985, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et", "bbox": {"l": 133.76801, "t": 257.26806999999997, "r": 477.47473, "b": 266.11487, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea", "bbox": {"l": 133.76801, "t": 269.22308, "r": 477.47571000000005, "b": 278.06989, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "takimata sanctus est Lorem ipsum dolor sit amet.", "bbox": {"l": 133.76801, "t": 281.17911, "r": 351.48471, "b": 290.02588, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Figure 1: This is an example image.", "bbox": {"l": 226.89101, "t": 529.13495, "r": 384.3548, "b": 537.98174, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy", "bbox": {"l": 148.71201, "t": 553.04495, "r": 477.47786999999994, "b": 561.89174, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam", "bbox": {"l": 133.76801, "t": 564.99995, "r": 477.47860999999995, "b": 573.84674, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita", "bbox": {"l": 133.76801, "t": 576.95496, "r": 477.47571000000005, "b": 585.80174, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem", "bbox": {"l": 133.76801, "t": 588.90996, "r": 477.47559, "b": 597.75674, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod", "bbox": {"l": 133.76801, "t": 600.86595, "r": 477.48169000000007, "b": 609.7127399999999, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At", "bbox": {"l": 133.76801, "t": 612.82095, "r": 477.48062, "b": 621.66774, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren,", "bbox": {"l": 133.76801, "t": 624.7759599999999, "r": 477.48172000000005, "b": 633.62274, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor", "bbox": {"l": 133.76801, "t": 636.73096, "r": 477.47772, "b": 645.57774, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt", "bbox": {"l": 133.76801, "t": 648.68596, "r": 477.47971, "b": 657.53275, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "ut labore et dolore magna aliquyam erat, sed diam voluptua.", "bbox": {"l": 133.76801, "t": 660.64096, "r": 399.57816, "b": 669.48775, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "1", "bbox": {"l": 303.133, "t": 695.720963, "r": 308.11429, "b": 704.567757, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 3, "label": "section_header", "bbox": {"l": 133.76801, "t": 124.80877999999996, "r": 252.35513, "b": 137.54816000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9627318382263184, "cells": [{"id": 0, "text": "Figures Example", "bbox": {"l": 133.76801, "t": 124.80877999999996, "r": 252.35513, "b": 137.54816000000005, "coord_origin": "TOPLEFT"}}], "children": []}, {"id": 0, "label": "text", "bbox": {"l": 133.76801, "t": 149.67193999999995, "r": 477.48276, "b": 290.02588, "coord_origin": "TOPLEFT"}, "confidence": 0.9869933128356934, "cells": [{"id": 1, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eir-", "bbox": {"l": 133.76801, "t": 149.67193999999995, "r": 477.47971, "b": 158.51873999999998, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "mod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam volup-", "bbox": {"l": 133.76801, "t": 161.62694999999997, "r": 477.4806500000001, "b": 170.47375, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "tua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd", "bbox": {"l": 133.76801, "t": 173.58196999999996, "r": 477.47571000000005, "b": 182.42877, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ip-", "bbox": {"l": 133.76801, "t": 185.53698999999995, "r": 477.47466999999995, "b": 194.38378999999998, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "sum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor", "bbox": {"l": 133.76801, "t": 197.49199999999996, "r": 477.47668, "b": 206.33880999999997, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero", "bbox": {"l": 133.76801, "t": 209.44701999999995, "r": 477.48068000000006, "b": 218.29381999999998, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "eos et accusam et justo duo dolores et ea rebum.", "bbox": {"l": 133.76801, "t": 221.40301999999997, "r": 355.20874, "b": 230.24982, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Stet clita kasd gubergren,", "bbox": {"l": 362.60098, "t": 221.40301999999997, "r": 477.48276, "b": 230.24982, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor", "bbox": {"l": 133.76801, "t": 233.35802999999999, "r": 477.47772, "b": 242.20483000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt", "bbox": {"l": 133.76801, "t": 245.31304999999998, "r": 477.47971, "b": 254.15985, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et", "bbox": {"l": 133.76801, "t": 257.26806999999997, "r": 477.47473, "b": 266.11487, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea", "bbox": {"l": 133.76801, "t": 269.22308, "r": 477.47571000000005, "b": 278.06989, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "takimata sanctus est Lorem ipsum dolor sit amet.", "bbox": {"l": 133.76801, "t": 281.17911, "r": 351.48471, "b": 290.02588, "coord_origin": "TOPLEFT"}}], "children": []}, {"id": 4, "label": "caption", "bbox": {"l": 226.89101, "t": 529.13495, "r": 384.3548, "b": 537.98174, "coord_origin": "TOPLEFT"}, "confidence": 0.9477447271347046, "cells": [{"id": 14, "text": "Figure 1: This is an example image.", "bbox": {"l": 226.89101, "t": 529.13495, "r": 384.3548, "b": 537.98174, "coord_origin": "TOPLEFT"}}], "children": []}, {"id": 1, "label": "text", "bbox": {"l": 133.76801, "t": 553.04495, "r": 477.48172000000005, "b": 669.48775, "coord_origin": "TOPLEFT"}, "confidence": 0.9862836599349976, "cells": [{"id": 15, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy", "bbox": {"l": 148.71201, "t": 553.04495, "r": 477.47786999999994, "b": 561.89174, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam", "bbox": {"l": 133.76801, "t": 564.99995, "r": 477.47860999999995, "b": 573.84674, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita", "bbox": {"l": 133.76801, "t": 576.95496, "r": 477.47571000000005, "b": 585.80174, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem", "bbox": {"l": 133.76801, "t": 588.90996, "r": 477.47559, "b": 597.75674, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod", "bbox": {"l": 133.76801, "t": 600.86595, "r": 477.48169000000007, "b": 609.7127399999999, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At", "bbox": {"l": 133.76801, "t": 612.82095, "r": 477.48062, "b": 621.66774, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren,", "bbox": {"l": 133.76801, "t": 624.7759599999999, "r": 477.48172000000005, "b": 633.62274, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor", "bbox": {"l": 133.76801, "t": 636.73096, "r": 477.47772, "b": 645.57774, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt", "bbox": {"l": 133.76801, "t": 648.68596, "r": 477.47971, "b": 657.53275, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "ut labore et dolore magna aliquyam erat, sed diam voluptua.", "bbox": {"l": 133.76801, "t": 660.64096, "r": 399.57816, "b": 669.48775, "coord_origin": "TOPLEFT"}}], "children": []}, {"id": 5, "label": "page_footer", "bbox": {"l": 303.133, "t": 695.720963, "r": 308.11429, "b": 704.567757, "coord_origin": "TOPLEFT"}, "confidence": 0.8646790981292725, "cells": [{"id": 25, "text": "1", "bbox": {"l": 303.133, "t": 695.720963, "r": 308.11429, "b": 704.567757, "coord_origin": "TOPLEFT"}}], "children": []}, {"id": 2, "label": "picture", "bbox": {"l": 134.92005920410156, "t": 304.890625, "r": 475.66351318359375, "b": 510.21826171875, "coord_origin": "TOPLEFT"}, "confidence": 0.9803217053413391, "cells": [], "children": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "section_header", "id": 3, "page_no": 0, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 133.76801, "t": 124.80877999999996, "r": 252.35513, "b": 137.54816000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9627318382263184, "cells": [{"id": 0, "text": "Figures Example", "bbox": {"l": 133.76801, "t": 124.80877999999996, "r": 252.35513, "b": 137.54816000000005, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "Figures Example"}, {"label": "text", "id": 0, "page_no": 0, "cluster": {"id": 0, "label": "text", "bbox": {"l": 133.76801, "t": 149.67193999999995, "r": 477.48276, "b": 290.02588, "coord_origin": "TOPLEFT"}, "confidence": 0.9869933128356934, "cells": [{"id": 1, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eir-", "bbox": {"l": 133.76801, "t": 149.67193999999995, "r": 477.47971, "b": 158.51873999999998, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "mod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam volup-", "bbox": {"l": 133.76801, "t": 161.62694999999997, "r": 477.4806500000001, "b": 170.47375, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "tua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd", "bbox": {"l": 133.76801, "t": 173.58196999999996, "r": 477.47571000000005, "b": 182.42877, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ip-", "bbox": {"l": 133.76801, "t": 185.53698999999995, "r": 477.47466999999995, "b": 194.38378999999998, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "sum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor", "bbox": {"l": 133.76801, "t": 197.49199999999996, "r": 477.47668, "b": 206.33880999999997, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero", "bbox": {"l": 133.76801, "t": 209.44701999999995, "r": 477.48068000000006, "b": 218.29381999999998, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "eos et accusam et justo duo dolores et ea rebum.", "bbox": {"l": 133.76801, "t": 221.40301999999997, "r": 355.20874, "b": 230.24982, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Stet clita kasd gubergren,", "bbox": {"l": 362.60098, "t": 221.40301999999997, "r": 477.48276, "b": 230.24982, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor", "bbox": {"l": 133.76801, "t": 233.35802999999999, "r": 477.47772, "b": 242.20483000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt", "bbox": {"l": 133.76801, "t": 245.31304999999998, "r": 477.47971, "b": 254.15985, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et", "bbox": {"l": 133.76801, "t": 257.26806999999997, "r": 477.47473, "b": 266.11487, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea", "bbox": {"l": 133.76801, "t": 269.22308, "r": 477.47571000000005, "b": 278.06989, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "takimata sanctus est Lorem ipsum dolor sit amet.", "bbox": {"l": 133.76801, "t": 281.17911, "r": 351.48471, "b": 290.02588, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet."}, {"label": "caption", "id": 4, "page_no": 0, "cluster": {"id": 4, "label": "caption", "bbox": {"l": 226.89101, "t": 529.13495, "r": 384.3548, "b": 537.98174, "coord_origin": "TOPLEFT"}, "confidence": 0.9477447271347046, "cells": [{"id": 14, "text": "Figure 1: This is an example image.", "bbox": {"l": 226.89101, "t": 529.13495, "r": 384.3548, "b": 537.98174, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "Figure 1: This is an example image."}, {"label": "text", "id": 1, "page_no": 0, "cluster": {"id": 1, "label": "text", "bbox": {"l": 133.76801, "t": 553.04495, "r": 477.48172000000005, "b": 669.48775, "coord_origin": "TOPLEFT"}, "confidence": 0.9862836599349976, "cells": [{"id": 15, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy", "bbox": {"l": 148.71201, "t": 553.04495, "r": 477.47786999999994, "b": 561.89174, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam", "bbox": {"l": 133.76801, "t": 564.99995, "r": 477.47860999999995, "b": 573.84674, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita", "bbox": {"l": 133.76801, "t": 576.95496, "r": 477.47571000000005, "b": 585.80174, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem", "bbox": {"l": 133.76801, "t": 588.90996, "r": 477.47559, "b": 597.75674, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod", "bbox": {"l": 133.76801, "t": 600.86595, "r": 477.48169000000007, "b": 609.7127399999999, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At", "bbox": {"l": 133.76801, "t": 612.82095, "r": 477.48062, "b": 621.66774, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren,", "bbox": {"l": 133.76801, "t": 624.7759599999999, "r": 477.48172000000005, "b": 633.62274, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor", "bbox": {"l": 133.76801, "t": 636.73096, "r": 477.47772, "b": 645.57774, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt", "bbox": {"l": 133.76801, "t": 648.68596, "r": 477.47971, "b": 657.53275, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "ut labore et dolore magna aliquyam erat, sed diam voluptua.", "bbox": {"l": 133.76801, "t": 660.64096, "r": 399.57816, "b": 669.48775, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua."}, {"label": "page_footer", "id": 5, "page_no": 0, "cluster": {"id": 5, "label": "page_footer", "bbox": {"l": 303.133, "t": 695.720963, "r": 308.11429, "b": 704.567757, "coord_origin": "TOPLEFT"}, "confidence": 0.8646790981292725, "cells": [{"id": 25, "text": "1", "bbox": {"l": 303.133, "t": 695.720963, "r": 308.11429, "b": 704.567757, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "1"}, {"label": "picture", "id": 2, "page_no": 0, "cluster": {"id": 2, "label": "picture", "bbox": {"l": 134.92005920410156, "t": 304.890625, "r": 475.66351318359375, "b": 510.21826171875, "coord_origin": "TOPLEFT"}, "confidence": 0.9803217053413391, "cells": [], "children": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "section_header", "id": 3, "page_no": 0, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 133.76801, "t": 124.80877999999996, "r": 252.35513, "b": 137.54816000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9627318382263184, "cells": [{"id": 0, "text": "Figures Example", "bbox": {"l": 133.76801, "t": 124.80877999999996, "r": 252.35513, "b": 137.54816000000005, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "Figures Example"}, {"label": "text", "id": 0, "page_no": 0, "cluster": {"id": 0, "label": "text", "bbox": {"l": 133.76801, "t": 149.67193999999995, "r": 477.48276, "b": 290.02588, "coord_origin": "TOPLEFT"}, "confidence": 0.9869933128356934, "cells": [{"id": 1, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eir-", "bbox": {"l": 133.76801, "t": 149.67193999999995, "r": 477.47971, "b": 158.51873999999998, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "mod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam volup-", "bbox": {"l": 133.76801, "t": 161.62694999999997, "r": 477.4806500000001, "b": 170.47375, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "tua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd", "bbox": {"l": 133.76801, "t": 173.58196999999996, "r": 477.47571000000005, "b": 182.42877, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ip-", "bbox": {"l": 133.76801, "t": 185.53698999999995, "r": 477.47466999999995, "b": 194.38378999999998, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "sum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor", "bbox": {"l": 133.76801, "t": 197.49199999999996, "r": 477.47668, "b": 206.33880999999997, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero", "bbox": {"l": 133.76801, "t": 209.44701999999995, "r": 477.48068000000006, "b": 218.29381999999998, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "eos et accusam et justo duo dolores et ea rebum.", "bbox": {"l": 133.76801, "t": 221.40301999999997, "r": 355.20874, "b": 230.24982, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Stet clita kasd gubergren,", "bbox": {"l": 362.60098, "t": 221.40301999999997, "r": 477.48276, "b": 230.24982, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor", "bbox": {"l": 133.76801, "t": 233.35802999999999, "r": 477.47772, "b": 242.20483000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt", "bbox": {"l": 133.76801, "t": 245.31304999999998, "r": 477.47971, "b": 254.15985, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et", "bbox": {"l": 133.76801, "t": 257.26806999999997, "r": 477.47473, "b": 266.11487, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea", "bbox": {"l": 133.76801, "t": 269.22308, "r": 477.47571000000005, "b": 278.06989, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "takimata sanctus est Lorem ipsum dolor sit amet.", "bbox": {"l": 133.76801, "t": 281.17911, "r": 351.48471, "b": 290.02588, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet."}, {"label": "caption", "id": 4, "page_no": 0, "cluster": {"id": 4, "label": "caption", "bbox": {"l": 226.89101, "t": 529.13495, "r": 384.3548, "b": 537.98174, "coord_origin": "TOPLEFT"}, "confidence": 0.9477447271347046, "cells": [{"id": 14, "text": "Figure 1: This is an example image.", "bbox": {"l": 226.89101, "t": 529.13495, "r": 384.3548, "b": 537.98174, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "Figure 1: This is an example image."}, {"label": "text", "id": 1, "page_no": 0, "cluster": {"id": 1, "label": "text", "bbox": {"l": 133.76801, "t": 553.04495, "r": 477.48172000000005, "b": 669.48775, "coord_origin": "TOPLEFT"}, "confidence": 0.9862836599349976, "cells": [{"id": 15, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy", "bbox": {"l": 148.71201, "t": 553.04495, "r": 477.47786999999994, "b": 561.89174, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam", "bbox": {"l": 133.76801, "t": 564.99995, "r": 477.47860999999995, "b": 573.84674, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita", "bbox": {"l": 133.76801, "t": 576.95496, "r": 477.47571000000005, "b": 585.80174, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem", "bbox": {"l": 133.76801, "t": 588.90996, "r": 477.47559, "b": 597.75674, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod", "bbox": {"l": 133.76801, "t": 600.86595, "r": 477.48169000000007, "b": 609.7127399999999, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At", "bbox": {"l": 133.76801, "t": 612.82095, "r": 477.48062, "b": 621.66774, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren,", "bbox": {"l": 133.76801, "t": 624.7759599999999, "r": 477.48172000000005, "b": 633.62274, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor", "bbox": {"l": 133.76801, "t": 636.73096, "r": 477.47772, "b": 645.57774, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt", "bbox": {"l": 133.76801, "t": 648.68596, "r": 477.47971, "b": 657.53275, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "ut labore et dolore magna aliquyam erat, sed diam voluptua.", "bbox": {"l": 133.76801, "t": 660.64096, "r": 399.57816, "b": 669.48775, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua."}, {"label": "picture", "id": 2, "page_no": 0, "cluster": {"id": 2, "label": "picture", "bbox": {"l": 134.92005920410156, "t": 304.890625, "r": 475.66351318359375, "b": 510.21826171875, "coord_origin": "TOPLEFT"}, "confidence": 0.9803217053413391, "cells": [], "children": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 5, "page_no": 0, "cluster": {"id": 5, "label": "page_footer", "bbox": {"l": 303.133, "t": 695.720963, "r": 308.11429, "b": 704.567757, "coord_origin": "TOPLEFT"}, "confidence": 0.8646790981292725, "cells": [{"id": 25, "text": "1", "bbox": {"l": 303.133, "t": 695.720963, "r": 308.11429, "b": 704.567757, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "1"}]}}, {"page_no": 1, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy", "bbox": {"l": 148.71201, "t": 127.85095000000013, "r": 477.47786999999994, "b": 136.69775000000004, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam", "bbox": {"l": 133.76801, "t": 139.80597, "r": 477.47860999999995, "b": 148.65277000000003, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita", "bbox": {"l": 133.76801, "t": 151.76099, "r": 477.47571000000005, "b": 160.60779000000002, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem", "bbox": {"l": 133.76801, "t": 163.716, "r": 477.47559, "b": 172.56281, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod", "bbox": {"l": 133.76801, "t": 175.67102, "r": 477.48169000000007, "b": 184.51782000000003, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At", "bbox": {"l": 133.76801, "t": 187.62701000000004, "r": 477.48062, "b": 196.47382000000005, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren,", "bbox": {"l": 133.76801, "t": 199.58203000000003, "r": 477.48172000000005, "b": 208.42882999999995, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor", "bbox": {"l": 133.76801, "t": 211.53705000000002, "r": 477.47772, "b": 220.38385000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt", "bbox": {"l": 133.76801, "t": 223.49207, "r": 477.47971, "b": 232.33887000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et", "bbox": {"l": 133.76801, "t": 235.44708000000003, "r": 477.47473, "b": 244.29387999999994, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea", "bbox": {"l": 133.76801, "t": 247.40210000000002, "r": 477.47571000000005, "b": 256.24890000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "takimata sanctus est Lorem ipsum dolor sit amet.", "bbox": {"l": 133.76801, "t": 259.35808999999995, "r": 351.48471, "b": 268.20489999999995, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Figure 2: This is an example image.", "bbox": {"l": 226.89101, "t": 523.21097, "r": 384.3548, "b": 532.05774, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy", "bbox": {"l": 148.71201, "t": 546.28195, "r": 477.47786999999994, "b": 555.12874, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam", "bbox": {"l": 133.76801, "t": 558.23695, "r": 477.47860999999995, "b": 567.08374, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita", "bbox": {"l": 133.76801, "t": 570.19196, "r": 477.47571000000005, "b": 579.03874, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem", "bbox": {"l": 133.76801, "t": 582.14696, "r": 477.47559, "b": 590.99374, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod", "bbox": {"l": 133.76801, "t": 594.10196, "r": 477.48169000000007, "b": 602.94875, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At", "bbox": {"l": 133.76801, "t": 606.05696, "r": 477.48062, "b": 614.90375, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren,", "bbox": {"l": 133.76801, "t": 618.01295, "r": 477.48172000000005, "b": 626.85974, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor", "bbox": {"l": 133.76801, "t": 629.96796, "r": 477.47772, "b": 638.81474, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt", "bbox": {"l": 133.76801, "t": 641.92296, "r": 477.47971, "b": 650.76974, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et", "bbox": {"l": 133.76801, "t": 653.87796, "r": 477.47473, "b": 662.72475, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "accusam et justo duo dolores et ea rebum.", "bbox": {"l": 133.76801, "t": 665.83296, "r": 318.01736, "b": 674.67976, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "2", "bbox": {"l": 303.133, "t": 695.720963, "r": 308.11429, "b": 704.567757, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 1, "label": "text", "bbox": {"l": 133.76801, "t": 127.85095000000013, "r": 477.48172000000005, "b": 268.20489999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.987092912197113, "cells": [{"id": 0, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy", "bbox": {"l": 148.71201, "t": 127.85095000000013, "r": 477.47786999999994, "b": 136.69775000000004, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam", "bbox": {"l": 133.76801, "t": 139.80597, "r": 477.47860999999995, "b": 148.65277000000003, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita", "bbox": {"l": 133.76801, "t": 151.76099, "r": 477.47571000000005, "b": 160.60779000000002, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem", "bbox": {"l": 133.76801, "t": 163.716, "r": 477.47559, "b": 172.56281, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod", "bbox": {"l": 133.76801, "t": 175.67102, "r": 477.48169000000007, "b": 184.51782000000003, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At", "bbox": {"l": 133.76801, "t": 187.62701000000004, "r": 477.48062, "b": 196.47382000000005, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren,", "bbox": {"l": 133.76801, "t": 199.58203000000003, "r": 477.48172000000005, "b": 208.42882999999995, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor", "bbox": {"l": 133.76801, "t": 211.53705000000002, "r": 477.47772, "b": 220.38385000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt", "bbox": {"l": 133.76801, "t": 223.49207, "r": 477.47971, "b": 232.33887000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et", "bbox": {"l": 133.76801, "t": 235.44708000000003, "r": 477.47473, "b": 244.29387999999994, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea", "bbox": {"l": 133.76801, "t": 247.40210000000002, "r": 477.47571000000005, "b": 256.24890000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "takimata sanctus est Lorem ipsum dolor sit amet.", "bbox": {"l": 133.76801, "t": 259.35808999999995, "r": 351.48471, "b": 268.20489999999995, "coord_origin": "TOPLEFT"}}], "children": []}, {"id": 3, "label": "caption", "bbox": {"l": 226.89101, "t": 523.21097, "r": 384.3548, "b": 532.05774, "coord_origin": "TOPLEFT"}, "confidence": 0.9494235515594482, "cells": [{"id": 12, "text": "Figure 2: This is an example image.", "bbox": {"l": 226.89101, "t": 523.21097, "r": 384.3548, "b": 532.05774, "coord_origin": "TOPLEFT"}}], "children": []}, {"id": 0, "label": "text", "bbox": {"l": 133.76801, "t": 546.28195, "r": 477.48172000000005, "b": 674.67976, "coord_origin": "TOPLEFT"}, "confidence": 0.9874356985092163, "cells": [{"id": 13, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy", "bbox": {"l": 148.71201, "t": 546.28195, "r": 477.47786999999994, "b": 555.12874, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam", "bbox": {"l": 133.76801, "t": 558.23695, "r": 477.47860999999995, "b": 567.08374, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita", "bbox": {"l": 133.76801, "t": 570.19196, "r": 477.47571000000005, "b": 579.03874, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem", "bbox": {"l": 133.76801, "t": 582.14696, "r": 477.47559, "b": 590.99374, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod", "bbox": {"l": 133.76801, "t": 594.10196, "r": 477.48169000000007, "b": 602.94875, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At", "bbox": {"l": 133.76801, "t": 606.05696, "r": 477.48062, "b": 614.90375, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren,", "bbox": {"l": 133.76801, "t": 618.01295, "r": 477.48172000000005, "b": 626.85974, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor", "bbox": {"l": 133.76801, "t": 629.96796, "r": 477.47772, "b": 638.81474, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt", "bbox": {"l": 133.76801, "t": 641.92296, "r": 477.47971, "b": 650.76974, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et", "bbox": {"l": 133.76801, "t": 653.87796, "r": 477.47473, "b": 662.72475, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "accusam et justo duo dolores et ea rebum.", "bbox": {"l": 133.76801, "t": 665.83296, "r": 318.01736, "b": 674.67976, "coord_origin": "TOPLEFT"}}], "children": []}, {"id": 4, "label": "page_footer", "bbox": {"l": 303.133, "t": 695.720963, "r": 308.11429, "b": 704.567757, "coord_origin": "TOPLEFT"}, "confidence": 0.888852059841156, "cells": [{"id": 24, "text": "2", "bbox": {"l": 303.133, "t": 695.720963, "r": 308.11429, "b": 704.567757, "coord_origin": "TOPLEFT"}}], "children": []}, {"id": 2, "label": "picture", "bbox": {"l": 218.8155517578125, "t": 278.0154113769531, "r": 391.96246337890625, "b": 508.89410400390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9837717413902283, "cells": [], "children": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "text", "id": 1, "page_no": 1, "cluster": {"id": 1, "label": "text", "bbox": {"l": 133.76801, "t": 127.85095000000013, "r": 477.48172000000005, "b": 268.20489999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.987092912197113, "cells": [{"id": 0, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy", "bbox": {"l": 148.71201, "t": 127.85095000000013, "r": 477.47786999999994, "b": 136.69775000000004, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam", "bbox": {"l": 133.76801, "t": 139.80597, "r": 477.47860999999995, "b": 148.65277000000003, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita", "bbox": {"l": 133.76801, "t": 151.76099, "r": 477.47571000000005, "b": 160.60779000000002, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem", "bbox": {"l": 133.76801, "t": 163.716, "r": 477.47559, "b": 172.56281, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod", "bbox": {"l": 133.76801, "t": 175.67102, "r": 477.48169000000007, "b": 184.51782000000003, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At", "bbox": {"l": 133.76801, "t": 187.62701000000004, "r": 477.48062, "b": 196.47382000000005, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren,", "bbox": {"l": 133.76801, "t": 199.58203000000003, "r": 477.48172000000005, "b": 208.42882999999995, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor", "bbox": {"l": 133.76801, "t": 211.53705000000002, "r": 477.47772, "b": 220.38385000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt", "bbox": {"l": 133.76801, "t": 223.49207, "r": 477.47971, "b": 232.33887000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et", "bbox": {"l": 133.76801, "t": 235.44708000000003, "r": 477.47473, "b": 244.29387999999994, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea", "bbox": {"l": 133.76801, "t": 247.40210000000002, "r": 477.47571000000005, "b": 256.24890000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "takimata sanctus est Lorem ipsum dolor sit amet.", "bbox": {"l": 133.76801, "t": 259.35808999999995, "r": 351.48471, "b": 268.20489999999995, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet."}, {"label": "caption", "id": 3, "page_no": 1, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 226.89101, "t": 523.21097, "r": 384.3548, "b": 532.05774, "coord_origin": "TOPLEFT"}, "confidence": 0.9494235515594482, "cells": [{"id": 12, "text": "Figure 2: This is an example image.", "bbox": {"l": 226.89101, "t": 523.21097, "r": 384.3548, "b": 532.05774, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "Figure 2: This is an example image."}, {"label": "text", "id": 0, "page_no": 1, "cluster": {"id": 0, "label": "text", "bbox": {"l": 133.76801, "t": 546.28195, "r": 477.48172000000005, "b": 674.67976, "coord_origin": "TOPLEFT"}, "confidence": 0.9874356985092163, "cells": [{"id": 13, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy", "bbox": {"l": 148.71201, "t": 546.28195, "r": 477.47786999999994, "b": 555.12874, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam", "bbox": {"l": 133.76801, "t": 558.23695, "r": 477.47860999999995, "b": 567.08374, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita", "bbox": {"l": 133.76801, "t": 570.19196, "r": 477.47571000000005, "b": 579.03874, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem", "bbox": {"l": 133.76801, "t": 582.14696, "r": 477.47559, "b": 590.99374, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod", "bbox": {"l": 133.76801, "t": 594.10196, "r": 477.48169000000007, "b": 602.94875, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At", "bbox": {"l": 133.76801, "t": 606.05696, "r": 477.48062, "b": 614.90375, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren,", "bbox": {"l": 133.76801, "t": 618.01295, "r": 477.48172000000005, "b": 626.85974, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor", "bbox": {"l": 133.76801, "t": 629.96796, "r": 477.47772, "b": 638.81474, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt", "bbox": {"l": 133.76801, "t": 641.92296, "r": 477.47971, "b": 650.76974, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et", "bbox": {"l": 133.76801, "t": 653.87796, "r": 477.47473, "b": 662.72475, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "accusam et justo duo dolores et ea rebum.", "bbox": {"l": 133.76801, "t": 665.83296, "r": 318.01736, "b": 674.67976, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum."}, {"label": "page_footer", "id": 4, "page_no": 1, "cluster": {"id": 4, "label": "page_footer", "bbox": {"l": 303.133, "t": 695.720963, "r": 308.11429, "b": 704.567757, "coord_origin": "TOPLEFT"}, "confidence": 0.888852059841156, "cells": [{"id": 24, "text": "2", "bbox": {"l": 303.133, "t": 695.720963, "r": 308.11429, "b": 704.567757, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "2"}, {"label": "picture", "id": 2, "page_no": 1, "cluster": {"id": 2, "label": "picture", "bbox": {"l": 218.8155517578125, "t": 278.0154113769531, "r": 391.96246337890625, "b": 508.89410400390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9837717413902283, "cells": [], "children": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 1, "page_no": 1, "cluster": {"id": 1, "label": "text", "bbox": {"l": 133.76801, "t": 127.85095000000013, "r": 477.48172000000005, "b": 268.20489999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.987092912197113, "cells": [{"id": 0, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy", "bbox": {"l": 148.71201, "t": 127.85095000000013, "r": 477.47786999999994, "b": 136.69775000000004, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam", "bbox": {"l": 133.76801, "t": 139.80597, "r": 477.47860999999995, "b": 148.65277000000003, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita", "bbox": {"l": 133.76801, "t": 151.76099, "r": 477.47571000000005, "b": 160.60779000000002, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem", "bbox": {"l": 133.76801, "t": 163.716, "r": 477.47559, "b": 172.56281, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod", "bbox": {"l": 133.76801, "t": 175.67102, "r": 477.48169000000007, "b": 184.51782000000003, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At", "bbox": {"l": 133.76801, "t": 187.62701000000004, "r": 477.48062, "b": 196.47382000000005, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren,", "bbox": {"l": 133.76801, "t": 199.58203000000003, "r": 477.48172000000005, "b": 208.42882999999995, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor", "bbox": {"l": 133.76801, "t": 211.53705000000002, "r": 477.47772, "b": 220.38385000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt", "bbox": {"l": 133.76801, "t": 223.49207, "r": 477.47971, "b": 232.33887000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et", "bbox": {"l": 133.76801, "t": 235.44708000000003, "r": 477.47473, "b": 244.29387999999994, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea", "bbox": {"l": 133.76801, "t": 247.40210000000002, "r": 477.47571000000005, "b": 256.24890000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "takimata sanctus est Lorem ipsum dolor sit amet.", "bbox": {"l": 133.76801, "t": 259.35808999999995, "r": 351.48471, "b": 268.20489999999995, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet."}, {"label": "caption", "id": 3, "page_no": 1, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 226.89101, "t": 523.21097, "r": 384.3548, "b": 532.05774, "coord_origin": "TOPLEFT"}, "confidence": 0.9494235515594482, "cells": [{"id": 12, "text": "Figure 2: This is an example image.", "bbox": {"l": 226.89101, "t": 523.21097, "r": 384.3548, "b": 532.05774, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "Figure 2: This is an example image."}, {"label": "text", "id": 0, "page_no": 1, "cluster": {"id": 0, "label": "text", "bbox": {"l": 133.76801, "t": 546.28195, "r": 477.48172000000005, "b": 674.67976, "coord_origin": "TOPLEFT"}, "confidence": 0.9874356985092163, "cells": [{"id": 13, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy", "bbox": {"l": 148.71201, "t": 546.28195, "r": 477.47786999999994, "b": 555.12874, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam", "bbox": {"l": 133.76801, "t": 558.23695, "r": 477.47860999999995, "b": 567.08374, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita", "bbox": {"l": 133.76801, "t": 570.19196, "r": 477.47571000000005, "b": 579.03874, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem", "bbox": {"l": 133.76801, "t": 582.14696, "r": 477.47559, "b": 590.99374, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod", "bbox": {"l": 133.76801, "t": 594.10196, "r": 477.48169000000007, "b": 602.94875, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At", "bbox": {"l": 133.76801, "t": 606.05696, "r": 477.48062, "b": 614.90375, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren,", "bbox": {"l": 133.76801, "t": 618.01295, "r": 477.48172000000005, "b": 626.85974, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor", "bbox": {"l": 133.76801, "t": 629.96796, "r": 477.47772, "b": 638.81474, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt", "bbox": {"l": 133.76801, "t": 641.92296, "r": 477.47971, "b": 650.76974, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et", "bbox": {"l": 133.76801, "t": 653.87796, "r": 477.47473, "b": 662.72475, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "accusam et justo duo dolores et ea rebum.", "bbox": {"l": 133.76801, "t": 665.83296, "r": 318.01736, "b": 674.67976, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum."}, {"label": "picture", "id": 2, "page_no": 1, "cluster": {"id": 2, "label": "picture", "bbox": {"l": 218.8155517578125, "t": 278.0154113769531, "r": 391.96246337890625, "b": 508.89410400390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9837717413902283, "cells": [], "children": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 4, "page_no": 1, "cluster": {"id": 4, "label": "page_footer", "bbox": {"l": 303.133, "t": 695.720963, "r": 308.11429, "b": 704.567757, "coord_origin": "TOPLEFT"}, "confidence": 0.888852059841156, "cells": [{"id": 24, "text": "2", "bbox": {"l": 303.133, "t": 695.720963, "r": 308.11429, "b": 704.567757, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "2"}]}}] \ No newline at end of file diff --git a/tests/data/groundtruth/docling_v2/picture_classification.doctags.txt b/tests/data/groundtruth/docling_v2/picture_classification.doctags.txt new file mode 100644 index 00000000..a86cbe7b --- /dev/null +++ b/tests/data/groundtruth/docling_v2/picture_classification.doctags.txt @@ -0,0 +1,15 @@ + +Figures Example +Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. +
+ +Figure 1: This is an example image. +
+Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. +Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. +
+ +Figure 2: This is an example image. +
+Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. +
\ No newline at end of file diff --git a/tests/data/groundtruth/docling_v2/picture_classification.json b/tests/data/groundtruth/docling_v2/picture_classification.json new file mode 100644 index 00000000..e80011b3 --- /dev/null +++ b/tests/data/groundtruth/docling_v2/picture_classification.json @@ -0,0 +1 @@ +{"schema_name": "DoclingDocument", "version": "1.0.0", "name": "picture_classification", "origin": {"mimetype": "application/pdf", "binary_hash": 6445357065749877499, "filename": "picture_classification.pdf", "uri": null}, "furniture": {"self_ref": "#/furniture", "parent": null, "children": [], "name": "_root_", "label": "unspecified"}, "body": {"self_ref": "#/body", "parent": null, "children": [{"cref": "#/texts/0"}, {"cref": "#/texts/1"}, {"cref": "#/texts/2"}, {"cref": "#/pictures/0"}, {"cref": "#/texts/3"}, {"cref": "#/texts/4"}, {"cref": "#/texts/5"}, {"cref": "#/texts/6"}, {"cref": "#/pictures/1"}, {"cref": "#/texts/7"}, {"cref": "#/texts/8"}], "name": "_root_", "label": "unspecified"}, "groups": [], "texts": [{"self_ref": "#/texts/0", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 1, "bbox": {"l": 133.76800537109375, "t": 667.1912231445312, "r": 252.35513305664062, "b": 654.4518432617188, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 15]}], "orig": "Figures Example", "text": "Figures Example", "level": 1}, {"self_ref": "#/texts/1", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 1, "bbox": {"l": 133.76800537109375, "t": 642.3280639648438, "r": 477.4827575683594, "b": 501.97412109375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 887]}], "orig": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.", "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet."}, {"self_ref": "#/texts/2", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 1, "bbox": {"l": 226.89100646972656, "t": 262.86505126953125, "r": 384.35479736328125, "b": 254.0182647705078, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 35]}], "orig": "Figure 1: This is an example image.", "text": "Figure 1: This is an example image."}, {"self_ref": "#/texts/3", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 1, "bbox": {"l": 133.76800537109375, "t": 238.95504760742188, "r": 477.4817199707031, "b": 122.51225280761719, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 747]}], "orig": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.", "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua."}, {"self_ref": "#/texts/4", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 1, "bbox": {"l": 303.13299560546875, "t": 96.27903747558594, "r": 308.1142883300781, "b": 87.43224334716797, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 1]}], "orig": "1", "text": "1"}, {"self_ref": "#/texts/5", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 2, "bbox": {"l": 133.76800537109375, "t": 664.1490478515625, "r": 477.4817199707031, "b": 523.7951049804688, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 887]}], "orig": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.", "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet."}, {"self_ref": "#/texts/6", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 2, "bbox": {"l": 226.89100646972656, "t": 268.7890319824219, "r": 384.35479736328125, "b": 259.9422607421875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 35]}], "orig": "Figure 2: This is an example image.", "text": "Figure 2: This is an example image."}, {"self_ref": "#/texts/7", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 2, "bbox": {"l": 133.76800537109375, "t": 245.71804809570312, "r": 477.4817199707031, "b": 117.32023620605469, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 804]}], "orig": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum.", "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum."}, {"self_ref": "#/texts/8", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 2, "bbox": {"l": 303.13299560546875, "t": 96.27903747558594, "r": 308.1142883300781, "b": 87.43224334716797, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 1]}], "orig": "2", "text": "2"}], "pictures": [{"self_ref": "#/pictures/0", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 1, "bbox": {"l": 134.92005920410156, "t": 487.109375, "r": 475.66351318359375, "b": 281.78173828125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 35]}], "captions": [{"cref": "#/texts/2"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/1", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 2, "bbox": {"l": 218.8155517578125, "t": 513.984619140625, "r": 391.96246337890625, "b": 283.10589599609375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 35]}], "captions": [{"cref": "#/texts/6"}], "references": [], "footnotes": [], "image": null, "annotations": []}], "tables": [], "key_value_items": [], "pages": {"1": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 1}, "2": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 2}}} \ No newline at end of file diff --git a/tests/data/groundtruth/docling_v2/picture_classification.md b/tests/data/groundtruth/docling_v2/picture_classification.md new file mode 100644 index 00000000..8e233a96 --- /dev/null +++ b/tests/data/groundtruth/docling_v2/picture_classification.md @@ -0,0 +1,17 @@ +## Figures Example + +Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. + +Figure 1: This is an example image. + + + +Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. + +Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. + +Figure 2: This is an example image. + + + +Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. \ No newline at end of file diff --git a/tests/data/groundtruth/docling_v2/picture_classification.pages.json b/tests/data/groundtruth/docling_v2/picture_classification.pages.json new file mode 100644 index 00000000..744f54fb --- /dev/null +++ b/tests/data/groundtruth/docling_v2/picture_classification.pages.json @@ -0,0 +1 @@ +[{"page_no": 0, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Figures Example", "bbox": {"l": 133.76801, "t": 124.80877999999996, "r": 252.35513, "b": 137.54816000000005, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eir-", "bbox": {"l": 133.76801, "t": 149.67193999999995, "r": 477.47971, "b": 158.51873999999998, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "mod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam volup-", "bbox": {"l": 133.76801, "t": 161.62694999999997, "r": 477.4806500000001, "b": 170.47375, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "tua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd", "bbox": {"l": 133.76801, "t": 173.58196999999996, "r": 477.47571000000005, "b": 182.42877, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ip-", "bbox": {"l": 133.76801, "t": 185.53698999999995, "r": 477.47466999999995, "b": 194.38378999999998, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "sum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor", "bbox": {"l": 133.76801, "t": 197.49199999999996, "r": 477.47668, "b": 206.33880999999997, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero", "bbox": {"l": 133.76801, "t": 209.44701999999995, "r": 477.48068000000006, "b": 218.29381999999998, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "eos et accusam et justo duo dolores et ea rebum.", "bbox": {"l": 133.76801, "t": 221.40301999999997, "r": 355.20874, "b": 230.24982, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Stet clita kasd gubergren,", "bbox": {"l": 362.60098, "t": 221.40301999999997, "r": 477.48276, "b": 230.24982, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor", "bbox": {"l": 133.76801, "t": 233.35802999999999, "r": 477.47772, "b": 242.20483000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt", "bbox": {"l": 133.76801, "t": 245.31304999999998, "r": 477.47971, "b": 254.15985, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et", "bbox": {"l": 133.76801, "t": 257.26806999999997, "r": 477.47473, "b": 266.11487, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea", "bbox": {"l": 133.76801, "t": 269.22308, "r": 477.47571000000005, "b": 278.06989, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "takimata sanctus est Lorem ipsum dolor sit amet.", "bbox": {"l": 133.76801, "t": 281.17911, "r": 351.48471, "b": 290.02588, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Figure 1: This is an example image.", "bbox": {"l": 226.89101, "t": 529.13495, "r": 384.3548, "b": 537.98174, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy", "bbox": {"l": 148.71201, "t": 553.04495, "r": 477.47786999999994, "b": 561.89174, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam", "bbox": {"l": 133.76801, "t": 564.99995, "r": 477.47860999999995, "b": 573.84674, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita", "bbox": {"l": 133.76801, "t": 576.95496, "r": 477.47571000000005, "b": 585.80174, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem", "bbox": {"l": 133.76801, "t": 588.90996, "r": 477.47559, "b": 597.75674, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod", "bbox": {"l": 133.76801, "t": 600.86595, "r": 477.48169000000007, "b": 609.7127399999999, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At", "bbox": {"l": 133.76801, "t": 612.82095, "r": 477.48062, "b": 621.66774, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren,", "bbox": {"l": 133.76801, "t": 624.7759599999999, "r": 477.48172000000005, "b": 633.62274, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor", "bbox": {"l": 133.76801, "t": 636.73096, "r": 477.47772, "b": 645.57774, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt", "bbox": {"l": 133.76801, "t": 648.68596, "r": 477.47971, "b": 657.53275, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "ut labore et dolore magna aliquyam erat, sed diam voluptua.", "bbox": {"l": 133.76801, "t": 660.64096, "r": 399.57816, "b": 669.48775, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "1", "bbox": {"l": 303.133, "t": 695.720963, "r": 308.11429, "b": 704.567757, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 3, "label": "section_header", "bbox": {"l": 133.76801, "t": 124.80877999999996, "r": 252.35513, "b": 137.54816000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9627318382263184, "cells": [{"id": 0, "text": "Figures Example", "bbox": {"l": 133.76801, "t": 124.80877999999996, "r": 252.35513, "b": 137.54816000000005, "coord_origin": "TOPLEFT"}}], "children": []}, {"id": 0, "label": "text", "bbox": {"l": 133.76801, "t": 149.67193999999995, "r": 477.48276, "b": 290.02588, "coord_origin": "TOPLEFT"}, "confidence": 0.9869933128356934, "cells": [{"id": 1, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eir-", "bbox": {"l": 133.76801, "t": 149.67193999999995, "r": 477.47971, "b": 158.51873999999998, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "mod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam volup-", "bbox": {"l": 133.76801, "t": 161.62694999999997, "r": 477.4806500000001, "b": 170.47375, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "tua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd", "bbox": {"l": 133.76801, "t": 173.58196999999996, "r": 477.47571000000005, "b": 182.42877, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ip-", "bbox": {"l": 133.76801, "t": 185.53698999999995, "r": 477.47466999999995, "b": 194.38378999999998, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "sum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor", "bbox": {"l": 133.76801, "t": 197.49199999999996, "r": 477.47668, "b": 206.33880999999997, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero", "bbox": {"l": 133.76801, "t": 209.44701999999995, "r": 477.48068000000006, "b": 218.29381999999998, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "eos et accusam et justo duo dolores et ea rebum.", "bbox": {"l": 133.76801, "t": 221.40301999999997, "r": 355.20874, "b": 230.24982, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Stet clita kasd gubergren,", "bbox": {"l": 362.60098, "t": 221.40301999999997, "r": 477.48276, "b": 230.24982, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor", "bbox": {"l": 133.76801, "t": 233.35802999999999, "r": 477.47772, "b": 242.20483000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt", "bbox": {"l": 133.76801, "t": 245.31304999999998, "r": 477.47971, "b": 254.15985, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et", "bbox": {"l": 133.76801, "t": 257.26806999999997, "r": 477.47473, "b": 266.11487, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea", "bbox": {"l": 133.76801, "t": 269.22308, "r": 477.47571000000005, "b": 278.06989, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "takimata sanctus est Lorem ipsum dolor sit amet.", "bbox": {"l": 133.76801, "t": 281.17911, "r": 351.48471, "b": 290.02588, "coord_origin": "TOPLEFT"}}], "children": []}, {"id": 4, "label": "caption", "bbox": {"l": 226.89101, "t": 529.13495, "r": 384.3548, "b": 537.98174, "coord_origin": "TOPLEFT"}, "confidence": 0.9477447271347046, "cells": [{"id": 14, "text": "Figure 1: This is an example image.", "bbox": {"l": 226.89101, "t": 529.13495, "r": 384.3548, "b": 537.98174, "coord_origin": "TOPLEFT"}}], "children": []}, {"id": 1, "label": "text", "bbox": {"l": 133.76801, "t": 553.04495, "r": 477.48172000000005, "b": 669.48775, "coord_origin": "TOPLEFT"}, "confidence": 0.9862836599349976, "cells": [{"id": 15, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy", "bbox": {"l": 148.71201, "t": 553.04495, "r": 477.47786999999994, "b": 561.89174, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam", "bbox": {"l": 133.76801, "t": 564.99995, "r": 477.47860999999995, "b": 573.84674, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita", "bbox": {"l": 133.76801, "t": 576.95496, "r": 477.47571000000005, "b": 585.80174, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem", "bbox": {"l": 133.76801, "t": 588.90996, "r": 477.47559, "b": 597.75674, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod", "bbox": {"l": 133.76801, "t": 600.86595, "r": 477.48169000000007, "b": 609.7127399999999, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At", "bbox": {"l": 133.76801, "t": 612.82095, "r": 477.48062, "b": 621.66774, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren,", "bbox": {"l": 133.76801, "t": 624.7759599999999, "r": 477.48172000000005, "b": 633.62274, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor", "bbox": {"l": 133.76801, "t": 636.73096, "r": 477.47772, "b": 645.57774, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt", "bbox": {"l": 133.76801, "t": 648.68596, "r": 477.47971, "b": 657.53275, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "ut labore et dolore magna aliquyam erat, sed diam voluptua.", "bbox": {"l": 133.76801, "t": 660.64096, "r": 399.57816, "b": 669.48775, "coord_origin": "TOPLEFT"}}], "children": []}, {"id": 5, "label": "page_footer", "bbox": {"l": 303.133, "t": 695.720963, "r": 308.11429, "b": 704.567757, "coord_origin": "TOPLEFT"}, "confidence": 0.8646790981292725, "cells": [{"id": 25, "text": "1", "bbox": {"l": 303.133, "t": 695.720963, "r": 308.11429, "b": 704.567757, "coord_origin": "TOPLEFT"}}], "children": []}, {"id": 2, "label": "picture", "bbox": {"l": 134.92005920410156, "t": 304.890625, "r": 475.66351318359375, "b": 510.21826171875, "coord_origin": "TOPLEFT"}, "confidence": 0.9803217053413391, "cells": [], "children": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "section_header", "id": 3, "page_no": 0, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 133.76801, "t": 124.80877999999996, "r": 252.35513, "b": 137.54816000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9627318382263184, "cells": [{"id": 0, "text": "Figures Example", "bbox": {"l": 133.76801, "t": 124.80877999999996, "r": 252.35513, "b": 137.54816000000005, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "Figures Example"}, {"label": "text", "id": 0, "page_no": 0, "cluster": {"id": 0, "label": "text", "bbox": {"l": 133.76801, "t": 149.67193999999995, "r": 477.48276, "b": 290.02588, "coord_origin": "TOPLEFT"}, "confidence": 0.9869933128356934, "cells": [{"id": 1, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eir-", "bbox": {"l": 133.76801, "t": 149.67193999999995, "r": 477.47971, "b": 158.51873999999998, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "mod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam volup-", "bbox": {"l": 133.76801, "t": 161.62694999999997, "r": 477.4806500000001, "b": 170.47375, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "tua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd", "bbox": {"l": 133.76801, "t": 173.58196999999996, "r": 477.47571000000005, "b": 182.42877, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ip-", "bbox": {"l": 133.76801, "t": 185.53698999999995, "r": 477.47466999999995, "b": 194.38378999999998, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "sum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor", "bbox": {"l": 133.76801, "t": 197.49199999999996, "r": 477.47668, "b": 206.33880999999997, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero", "bbox": {"l": 133.76801, "t": 209.44701999999995, "r": 477.48068000000006, "b": 218.29381999999998, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "eos et accusam et justo duo dolores et ea rebum.", "bbox": {"l": 133.76801, "t": 221.40301999999997, "r": 355.20874, "b": 230.24982, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Stet clita kasd gubergren,", "bbox": {"l": 362.60098, "t": 221.40301999999997, "r": 477.48276, "b": 230.24982, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor", "bbox": {"l": 133.76801, "t": 233.35802999999999, "r": 477.47772, "b": 242.20483000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt", "bbox": {"l": 133.76801, "t": 245.31304999999998, "r": 477.47971, "b": 254.15985, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et", "bbox": {"l": 133.76801, "t": 257.26806999999997, "r": 477.47473, "b": 266.11487, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea", "bbox": {"l": 133.76801, "t": 269.22308, "r": 477.47571000000005, "b": 278.06989, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "takimata sanctus est Lorem ipsum dolor sit amet.", "bbox": {"l": 133.76801, "t": 281.17911, "r": 351.48471, "b": 290.02588, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet."}, {"label": "caption", "id": 4, "page_no": 0, "cluster": {"id": 4, "label": "caption", "bbox": {"l": 226.89101, "t": 529.13495, "r": 384.3548, "b": 537.98174, "coord_origin": "TOPLEFT"}, "confidence": 0.9477447271347046, "cells": [{"id": 14, "text": "Figure 1: This is an example image.", "bbox": {"l": 226.89101, "t": 529.13495, "r": 384.3548, "b": 537.98174, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "Figure 1: This is an example image."}, {"label": "text", "id": 1, "page_no": 0, "cluster": {"id": 1, "label": "text", "bbox": {"l": 133.76801, "t": 553.04495, "r": 477.48172000000005, "b": 669.48775, "coord_origin": "TOPLEFT"}, "confidence": 0.9862836599349976, "cells": [{"id": 15, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy", "bbox": {"l": 148.71201, "t": 553.04495, "r": 477.47786999999994, "b": 561.89174, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam", "bbox": {"l": 133.76801, "t": 564.99995, "r": 477.47860999999995, "b": 573.84674, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita", "bbox": {"l": 133.76801, "t": 576.95496, "r": 477.47571000000005, "b": 585.80174, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem", "bbox": {"l": 133.76801, "t": 588.90996, "r": 477.47559, "b": 597.75674, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod", "bbox": {"l": 133.76801, "t": 600.86595, "r": 477.48169000000007, "b": 609.7127399999999, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At", "bbox": {"l": 133.76801, "t": 612.82095, "r": 477.48062, "b": 621.66774, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren,", "bbox": {"l": 133.76801, "t": 624.7759599999999, "r": 477.48172000000005, "b": 633.62274, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor", "bbox": {"l": 133.76801, "t": 636.73096, "r": 477.47772, "b": 645.57774, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt", "bbox": {"l": 133.76801, "t": 648.68596, "r": 477.47971, "b": 657.53275, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "ut labore et dolore magna aliquyam erat, sed diam voluptua.", "bbox": {"l": 133.76801, "t": 660.64096, "r": 399.57816, "b": 669.48775, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua."}, {"label": "page_footer", "id": 5, "page_no": 0, "cluster": {"id": 5, "label": "page_footer", "bbox": {"l": 303.133, "t": 695.720963, "r": 308.11429, "b": 704.567757, "coord_origin": "TOPLEFT"}, "confidence": 0.8646790981292725, "cells": [{"id": 25, "text": "1", "bbox": {"l": 303.133, "t": 695.720963, "r": 308.11429, "b": 704.567757, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "1"}, {"label": "picture", "id": 2, "page_no": 0, "cluster": {"id": 2, "label": "picture", "bbox": {"l": 134.92005920410156, "t": 304.890625, "r": 475.66351318359375, "b": 510.21826171875, "coord_origin": "TOPLEFT"}, "confidence": 0.9803217053413391, "cells": [], "children": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "section_header", "id": 3, "page_no": 0, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 133.76801, "t": 124.80877999999996, "r": 252.35513, "b": 137.54816000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9627318382263184, "cells": [{"id": 0, "text": "Figures Example", "bbox": {"l": 133.76801, "t": 124.80877999999996, "r": 252.35513, "b": 137.54816000000005, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "Figures Example"}, {"label": "text", "id": 0, "page_no": 0, "cluster": {"id": 0, "label": "text", "bbox": {"l": 133.76801, "t": 149.67193999999995, "r": 477.48276, "b": 290.02588, "coord_origin": "TOPLEFT"}, "confidence": 0.9869933128356934, "cells": [{"id": 1, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eir-", "bbox": {"l": 133.76801, "t": 149.67193999999995, "r": 477.47971, "b": 158.51873999999998, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "mod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam volup-", "bbox": {"l": 133.76801, "t": 161.62694999999997, "r": 477.4806500000001, "b": 170.47375, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "tua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd", "bbox": {"l": 133.76801, "t": 173.58196999999996, "r": 477.47571000000005, "b": 182.42877, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ip-", "bbox": {"l": 133.76801, "t": 185.53698999999995, "r": 477.47466999999995, "b": 194.38378999999998, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "sum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor", "bbox": {"l": 133.76801, "t": 197.49199999999996, "r": 477.47668, "b": 206.33880999999997, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero", "bbox": {"l": 133.76801, "t": 209.44701999999995, "r": 477.48068000000006, "b": 218.29381999999998, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "eos et accusam et justo duo dolores et ea rebum.", "bbox": {"l": 133.76801, "t": 221.40301999999997, "r": 355.20874, "b": 230.24982, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Stet clita kasd gubergren,", "bbox": {"l": 362.60098, "t": 221.40301999999997, "r": 477.48276, "b": 230.24982, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor", "bbox": {"l": 133.76801, "t": 233.35802999999999, "r": 477.47772, "b": 242.20483000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt", "bbox": {"l": 133.76801, "t": 245.31304999999998, "r": 477.47971, "b": 254.15985, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et", "bbox": {"l": 133.76801, "t": 257.26806999999997, "r": 477.47473, "b": 266.11487, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea", "bbox": {"l": 133.76801, "t": 269.22308, "r": 477.47571000000005, "b": 278.06989, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "takimata sanctus est Lorem ipsum dolor sit amet.", "bbox": {"l": 133.76801, "t": 281.17911, "r": 351.48471, "b": 290.02588, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet."}, {"label": "caption", "id": 4, "page_no": 0, "cluster": {"id": 4, "label": "caption", "bbox": {"l": 226.89101, "t": 529.13495, "r": 384.3548, "b": 537.98174, "coord_origin": "TOPLEFT"}, "confidence": 0.9477447271347046, "cells": [{"id": 14, "text": "Figure 1: This is an example image.", "bbox": {"l": 226.89101, "t": 529.13495, "r": 384.3548, "b": 537.98174, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "Figure 1: This is an example image."}, {"label": "text", "id": 1, "page_no": 0, "cluster": {"id": 1, "label": "text", "bbox": {"l": 133.76801, "t": 553.04495, "r": 477.48172000000005, "b": 669.48775, "coord_origin": "TOPLEFT"}, "confidence": 0.9862836599349976, "cells": [{"id": 15, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy", "bbox": {"l": 148.71201, "t": 553.04495, "r": 477.47786999999994, "b": 561.89174, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam", "bbox": {"l": 133.76801, "t": 564.99995, "r": 477.47860999999995, "b": 573.84674, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita", "bbox": {"l": 133.76801, "t": 576.95496, "r": 477.47571000000005, "b": 585.80174, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem", "bbox": {"l": 133.76801, "t": 588.90996, "r": 477.47559, "b": 597.75674, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod", "bbox": {"l": 133.76801, "t": 600.86595, "r": 477.48169000000007, "b": 609.7127399999999, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At", "bbox": {"l": 133.76801, "t": 612.82095, "r": 477.48062, "b": 621.66774, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren,", "bbox": {"l": 133.76801, "t": 624.7759599999999, "r": 477.48172000000005, "b": 633.62274, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor", "bbox": {"l": 133.76801, "t": 636.73096, "r": 477.47772, "b": 645.57774, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt", "bbox": {"l": 133.76801, "t": 648.68596, "r": 477.47971, "b": 657.53275, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "ut labore et dolore magna aliquyam erat, sed diam voluptua.", "bbox": {"l": 133.76801, "t": 660.64096, "r": 399.57816, "b": 669.48775, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua."}, {"label": "picture", "id": 2, "page_no": 0, "cluster": {"id": 2, "label": "picture", "bbox": {"l": 134.92005920410156, "t": 304.890625, "r": 475.66351318359375, "b": 510.21826171875, "coord_origin": "TOPLEFT"}, "confidence": 0.9803217053413391, "cells": [], "children": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 5, "page_no": 0, "cluster": {"id": 5, "label": "page_footer", "bbox": {"l": 303.133, "t": 695.720963, "r": 308.11429, "b": 704.567757, "coord_origin": "TOPLEFT"}, "confidence": 0.8646790981292725, "cells": [{"id": 25, "text": "1", "bbox": {"l": 303.133, "t": 695.720963, "r": 308.11429, "b": 704.567757, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "1"}]}}, {"page_no": 1, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy", "bbox": {"l": 148.71201, "t": 127.85095000000013, "r": 477.47786999999994, "b": 136.69775000000004, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam", "bbox": {"l": 133.76801, "t": 139.80597, "r": 477.47860999999995, "b": 148.65277000000003, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita", "bbox": {"l": 133.76801, "t": 151.76099, "r": 477.47571000000005, "b": 160.60779000000002, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem", "bbox": {"l": 133.76801, "t": 163.716, "r": 477.47559, "b": 172.56281, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod", "bbox": {"l": 133.76801, "t": 175.67102, "r": 477.48169000000007, "b": 184.51782000000003, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At", "bbox": {"l": 133.76801, "t": 187.62701000000004, "r": 477.48062, "b": 196.47382000000005, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren,", "bbox": {"l": 133.76801, "t": 199.58203000000003, "r": 477.48172000000005, "b": 208.42882999999995, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor", "bbox": {"l": 133.76801, "t": 211.53705000000002, "r": 477.47772, "b": 220.38385000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt", "bbox": {"l": 133.76801, "t": 223.49207, "r": 477.47971, "b": 232.33887000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et", "bbox": {"l": 133.76801, "t": 235.44708000000003, "r": 477.47473, "b": 244.29387999999994, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea", "bbox": {"l": 133.76801, "t": 247.40210000000002, "r": 477.47571000000005, "b": 256.24890000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "takimata sanctus est Lorem ipsum dolor sit amet.", "bbox": {"l": 133.76801, "t": 259.35808999999995, "r": 351.48471, "b": 268.20489999999995, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Figure 2: This is an example image.", "bbox": {"l": 226.89101, "t": 523.21097, "r": 384.3548, "b": 532.05774, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy", "bbox": {"l": 148.71201, "t": 546.28195, "r": 477.47786999999994, "b": 555.12874, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam", "bbox": {"l": 133.76801, "t": 558.23695, "r": 477.47860999999995, "b": 567.08374, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita", "bbox": {"l": 133.76801, "t": 570.19196, "r": 477.47571000000005, "b": 579.03874, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem", "bbox": {"l": 133.76801, "t": 582.14696, "r": 477.47559, "b": 590.99374, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod", "bbox": {"l": 133.76801, "t": 594.10196, "r": 477.48169000000007, "b": 602.94875, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At", "bbox": {"l": 133.76801, "t": 606.05696, "r": 477.48062, "b": 614.90375, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren,", "bbox": {"l": 133.76801, "t": 618.01295, "r": 477.48172000000005, "b": 626.85974, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor", "bbox": {"l": 133.76801, "t": 629.96796, "r": 477.47772, "b": 638.81474, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt", "bbox": {"l": 133.76801, "t": 641.92296, "r": 477.47971, "b": 650.76974, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et", "bbox": {"l": 133.76801, "t": 653.87796, "r": 477.47473, "b": 662.72475, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "accusam et justo duo dolores et ea rebum.", "bbox": {"l": 133.76801, "t": 665.83296, "r": 318.01736, "b": 674.67976, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "2", "bbox": {"l": 303.133, "t": 695.720963, "r": 308.11429, "b": 704.567757, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 1, "label": "text", "bbox": {"l": 133.76801, "t": 127.85095000000013, "r": 477.48172000000005, "b": 268.20489999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.987092912197113, "cells": [{"id": 0, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy", "bbox": {"l": 148.71201, "t": 127.85095000000013, "r": 477.47786999999994, "b": 136.69775000000004, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam", "bbox": {"l": 133.76801, "t": 139.80597, "r": 477.47860999999995, "b": 148.65277000000003, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita", "bbox": {"l": 133.76801, "t": 151.76099, "r": 477.47571000000005, "b": 160.60779000000002, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem", "bbox": {"l": 133.76801, "t": 163.716, "r": 477.47559, "b": 172.56281, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod", "bbox": {"l": 133.76801, "t": 175.67102, "r": 477.48169000000007, "b": 184.51782000000003, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At", "bbox": {"l": 133.76801, "t": 187.62701000000004, "r": 477.48062, "b": 196.47382000000005, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren,", "bbox": {"l": 133.76801, "t": 199.58203000000003, "r": 477.48172000000005, "b": 208.42882999999995, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor", "bbox": {"l": 133.76801, "t": 211.53705000000002, "r": 477.47772, "b": 220.38385000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt", "bbox": {"l": 133.76801, "t": 223.49207, "r": 477.47971, "b": 232.33887000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et", "bbox": {"l": 133.76801, "t": 235.44708000000003, "r": 477.47473, "b": 244.29387999999994, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea", "bbox": {"l": 133.76801, "t": 247.40210000000002, "r": 477.47571000000005, "b": 256.24890000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "takimata sanctus est Lorem ipsum dolor sit amet.", "bbox": {"l": 133.76801, "t": 259.35808999999995, "r": 351.48471, "b": 268.20489999999995, "coord_origin": "TOPLEFT"}}], "children": []}, {"id": 3, "label": "caption", "bbox": {"l": 226.89101, "t": 523.21097, "r": 384.3548, "b": 532.05774, "coord_origin": "TOPLEFT"}, "confidence": 0.9494235515594482, "cells": [{"id": 12, "text": "Figure 2: This is an example image.", "bbox": {"l": 226.89101, "t": 523.21097, "r": 384.3548, "b": 532.05774, "coord_origin": "TOPLEFT"}}], "children": []}, {"id": 0, "label": "text", "bbox": {"l": 133.76801, "t": 546.28195, "r": 477.48172000000005, "b": 674.67976, "coord_origin": "TOPLEFT"}, "confidence": 0.9874356985092163, "cells": [{"id": 13, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy", "bbox": {"l": 148.71201, "t": 546.28195, "r": 477.47786999999994, "b": 555.12874, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam", "bbox": {"l": 133.76801, "t": 558.23695, "r": 477.47860999999995, "b": 567.08374, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita", "bbox": {"l": 133.76801, "t": 570.19196, "r": 477.47571000000005, "b": 579.03874, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem", "bbox": {"l": 133.76801, "t": 582.14696, "r": 477.47559, "b": 590.99374, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod", "bbox": {"l": 133.76801, "t": 594.10196, "r": 477.48169000000007, "b": 602.94875, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At", "bbox": {"l": 133.76801, "t": 606.05696, "r": 477.48062, "b": 614.90375, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren,", "bbox": {"l": 133.76801, "t": 618.01295, "r": 477.48172000000005, "b": 626.85974, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor", "bbox": {"l": 133.76801, "t": 629.96796, "r": 477.47772, "b": 638.81474, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt", "bbox": {"l": 133.76801, "t": 641.92296, "r": 477.47971, "b": 650.76974, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et", "bbox": {"l": 133.76801, "t": 653.87796, "r": 477.47473, "b": 662.72475, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "accusam et justo duo dolores et ea rebum.", "bbox": {"l": 133.76801, "t": 665.83296, "r": 318.01736, "b": 674.67976, "coord_origin": "TOPLEFT"}}], "children": []}, {"id": 4, "label": "page_footer", "bbox": {"l": 303.133, "t": 695.720963, "r": 308.11429, "b": 704.567757, "coord_origin": "TOPLEFT"}, "confidence": 0.888852059841156, "cells": [{"id": 24, "text": "2", "bbox": {"l": 303.133, "t": 695.720963, "r": 308.11429, "b": 704.567757, "coord_origin": "TOPLEFT"}}], "children": []}, {"id": 2, "label": "picture", "bbox": {"l": 218.8155517578125, "t": 278.0154113769531, "r": 391.96246337890625, "b": 508.89410400390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9837717413902283, "cells": [], "children": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "text", "id": 1, "page_no": 1, "cluster": {"id": 1, "label": "text", "bbox": {"l": 133.76801, "t": 127.85095000000013, "r": 477.48172000000005, "b": 268.20489999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.987092912197113, "cells": [{"id": 0, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy", "bbox": {"l": 148.71201, "t": 127.85095000000013, "r": 477.47786999999994, "b": 136.69775000000004, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam", "bbox": {"l": 133.76801, "t": 139.80597, "r": 477.47860999999995, "b": 148.65277000000003, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita", "bbox": {"l": 133.76801, "t": 151.76099, "r": 477.47571000000005, "b": 160.60779000000002, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem", "bbox": {"l": 133.76801, "t": 163.716, "r": 477.47559, "b": 172.56281, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod", "bbox": {"l": 133.76801, "t": 175.67102, "r": 477.48169000000007, "b": 184.51782000000003, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At", "bbox": {"l": 133.76801, "t": 187.62701000000004, "r": 477.48062, "b": 196.47382000000005, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren,", "bbox": {"l": 133.76801, "t": 199.58203000000003, "r": 477.48172000000005, "b": 208.42882999999995, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor", "bbox": {"l": 133.76801, "t": 211.53705000000002, "r": 477.47772, "b": 220.38385000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt", "bbox": {"l": 133.76801, "t": 223.49207, "r": 477.47971, "b": 232.33887000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et", "bbox": {"l": 133.76801, "t": 235.44708000000003, "r": 477.47473, "b": 244.29387999999994, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea", "bbox": {"l": 133.76801, "t": 247.40210000000002, "r": 477.47571000000005, "b": 256.24890000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "takimata sanctus est Lorem ipsum dolor sit amet.", "bbox": {"l": 133.76801, "t": 259.35808999999995, "r": 351.48471, "b": 268.20489999999995, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet."}, {"label": "caption", "id": 3, "page_no": 1, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 226.89101, "t": 523.21097, "r": 384.3548, "b": 532.05774, "coord_origin": "TOPLEFT"}, "confidence": 0.9494235515594482, "cells": [{"id": 12, "text": "Figure 2: This is an example image.", "bbox": {"l": 226.89101, "t": 523.21097, "r": 384.3548, "b": 532.05774, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "Figure 2: This is an example image."}, {"label": "text", "id": 0, "page_no": 1, "cluster": {"id": 0, "label": "text", "bbox": {"l": 133.76801, "t": 546.28195, "r": 477.48172000000005, "b": 674.67976, "coord_origin": "TOPLEFT"}, "confidence": 0.9874356985092163, "cells": [{"id": 13, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy", "bbox": {"l": 148.71201, "t": 546.28195, "r": 477.47786999999994, "b": 555.12874, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam", "bbox": {"l": 133.76801, "t": 558.23695, "r": 477.47860999999995, "b": 567.08374, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita", "bbox": {"l": 133.76801, "t": 570.19196, "r": 477.47571000000005, "b": 579.03874, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem", "bbox": {"l": 133.76801, "t": 582.14696, "r": 477.47559, "b": 590.99374, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod", "bbox": {"l": 133.76801, "t": 594.10196, "r": 477.48169000000007, "b": 602.94875, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At", "bbox": {"l": 133.76801, "t": 606.05696, "r": 477.48062, "b": 614.90375, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren,", "bbox": {"l": 133.76801, "t": 618.01295, "r": 477.48172000000005, "b": 626.85974, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor", "bbox": {"l": 133.76801, "t": 629.96796, "r": 477.47772, "b": 638.81474, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt", "bbox": {"l": 133.76801, "t": 641.92296, "r": 477.47971, "b": 650.76974, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et", "bbox": {"l": 133.76801, "t": 653.87796, "r": 477.47473, "b": 662.72475, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "accusam et justo duo dolores et ea rebum.", "bbox": {"l": 133.76801, "t": 665.83296, "r": 318.01736, "b": 674.67976, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum."}, {"label": "page_footer", "id": 4, "page_no": 1, "cluster": {"id": 4, "label": "page_footer", "bbox": {"l": 303.133, "t": 695.720963, "r": 308.11429, "b": 704.567757, "coord_origin": "TOPLEFT"}, "confidence": 0.888852059841156, "cells": [{"id": 24, "text": "2", "bbox": {"l": 303.133, "t": 695.720963, "r": 308.11429, "b": 704.567757, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "2"}, {"label": "picture", "id": 2, "page_no": 1, "cluster": {"id": 2, "label": "picture", "bbox": {"l": 218.8155517578125, "t": 278.0154113769531, "r": 391.96246337890625, "b": 508.89410400390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9837717413902283, "cells": [], "children": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 1, "page_no": 1, "cluster": {"id": 1, "label": "text", "bbox": {"l": 133.76801, "t": 127.85095000000013, "r": 477.48172000000005, "b": 268.20489999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.987092912197113, "cells": [{"id": 0, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy", "bbox": {"l": 148.71201, "t": 127.85095000000013, "r": 477.47786999999994, "b": 136.69775000000004, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam", "bbox": {"l": 133.76801, "t": 139.80597, "r": 477.47860999999995, "b": 148.65277000000003, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita", "bbox": {"l": 133.76801, "t": 151.76099, "r": 477.47571000000005, "b": 160.60779000000002, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem", "bbox": {"l": 133.76801, "t": 163.716, "r": 477.47559, "b": 172.56281, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod", "bbox": {"l": 133.76801, "t": 175.67102, "r": 477.48169000000007, "b": 184.51782000000003, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At", "bbox": {"l": 133.76801, "t": 187.62701000000004, "r": 477.48062, "b": 196.47382000000005, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren,", "bbox": {"l": 133.76801, "t": 199.58203000000003, "r": 477.48172000000005, "b": 208.42882999999995, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor", "bbox": {"l": 133.76801, "t": 211.53705000000002, "r": 477.47772, "b": 220.38385000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt", "bbox": {"l": 133.76801, "t": 223.49207, "r": 477.47971, "b": 232.33887000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et", "bbox": {"l": 133.76801, "t": 235.44708000000003, "r": 477.47473, "b": 244.29387999999994, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea", "bbox": {"l": 133.76801, "t": 247.40210000000002, "r": 477.47571000000005, "b": 256.24890000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "takimata sanctus est Lorem ipsum dolor sit amet.", "bbox": {"l": 133.76801, "t": 259.35808999999995, "r": 351.48471, "b": 268.20489999999995, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet."}, {"label": "caption", "id": 3, "page_no": 1, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 226.89101, "t": 523.21097, "r": 384.3548, "b": 532.05774, "coord_origin": "TOPLEFT"}, "confidence": 0.9494235515594482, "cells": [{"id": 12, "text": "Figure 2: This is an example image.", "bbox": {"l": 226.89101, "t": 523.21097, "r": 384.3548, "b": 532.05774, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "Figure 2: This is an example image."}, {"label": "text", "id": 0, "page_no": 1, "cluster": {"id": 0, "label": "text", "bbox": {"l": 133.76801, "t": 546.28195, "r": 477.48172000000005, "b": 674.67976, "coord_origin": "TOPLEFT"}, "confidence": 0.9874356985092163, "cells": [{"id": 13, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy", "bbox": {"l": 148.71201, "t": 546.28195, "r": 477.47786999999994, "b": 555.12874, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam", "bbox": {"l": 133.76801, "t": 558.23695, "r": 477.47860999999995, "b": 567.08374, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita", "bbox": {"l": 133.76801, "t": 570.19196, "r": 477.47571000000005, "b": 579.03874, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem", "bbox": {"l": 133.76801, "t": 582.14696, "r": 477.47559, "b": 590.99374, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod", "bbox": {"l": 133.76801, "t": 594.10196, "r": 477.48169000000007, "b": 602.94875, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At", "bbox": {"l": 133.76801, "t": 606.05696, "r": 477.48062, "b": 614.90375, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren,", "bbox": {"l": 133.76801, "t": 618.01295, "r": 477.48172000000005, "b": 626.85974, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor", "bbox": {"l": 133.76801, "t": 629.96796, "r": 477.47772, "b": 638.81474, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt", "bbox": {"l": 133.76801, "t": 641.92296, "r": 477.47971, "b": 650.76974, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et", "bbox": {"l": 133.76801, "t": 653.87796, "r": 477.47473, "b": 662.72475, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "accusam et justo duo dolores et ea rebum.", "bbox": {"l": 133.76801, "t": 665.83296, "r": 318.01736, "b": 674.67976, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum."}, {"label": "picture", "id": 2, "page_no": 1, "cluster": {"id": 2, "label": "picture", "bbox": {"l": 218.8155517578125, "t": 278.0154113769531, "r": 391.96246337890625, "b": 508.89410400390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9837717413902283, "cells": [], "children": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 4, "page_no": 1, "cluster": {"id": 4, "label": "page_footer", "bbox": {"l": 303.133, "t": 695.720963, "r": 308.11429, "b": 704.567757, "coord_origin": "TOPLEFT"}, "confidence": 0.888852059841156, "cells": [{"id": 24, "text": "2", "bbox": {"l": 303.133, "t": 695.720963, "r": 308.11429, "b": 704.567757, "coord_origin": "TOPLEFT"}}], "children": []}, "text": "2"}]}}] \ No newline at end of file diff --git a/tests/data/picture_classification.pdf b/tests/data/picture_classification.pdf new file mode 100644 index 0000000000000000000000000000000000000000..230f74fd41a83e270f9ec806a38b1da7814f6e61 GIT binary patch literal 212855 zcmeFZ1yEkgweausR)3*WlagWOWaCApYdg)pLFJ?5pmZ{~LlqIB zWLL6vv@&zC^|rF4$;6v-KGA}PTrI;A1m80cdiDXTLDI>=9qQ;x3C>&1#mdsw!p+Hrl9LOZ z7$v(d$OukKZtx$-26;zItCwH_A2{{D^AIOW9&i*Il-;e`F22ycDIO2nU3pi=U6noJW99klUO`ke7pt6T)j{&S@!VW+4Ev6cgbPq-@6`FYg*x%pK&F$}KSok~I1sotqKf0r>|E8b(Rp)Q|=^bqeb+iQQ+>QB#CDihc?f~gv z4|gk&hEoFRAP-wBPmmr5Xd0W|9#>?e{6UC{lhy-DJzJXyMr6$9aAm9ZRqYo>H613Wc`mq{J;F+ zgJC@w#}n`bv;wsWxaW01DYJF72AA8>($>w^$&u35@xQmi|BIhJ7{eX;w_Jk+UhWNm zZ^{N>590%HdjkMG9vT2=ln%au`DfjfP;`L1ou^B&@weQAH2D6n=f8WvMuJ&bS6ge! zyJATVElLY_7mqs{+!J>X1OOGl0`LK1;4wf0FaoRq7r+k)15W{IKmkw%v;cj;1h4>X z04U%Bcmlq_D1|tol1fv0?5Az(x8paXE9mW^t4NMqJ3``147EBRL zB}@a%SD0RyQJ5K+A23@mhcFkgaIomG_^{-#^swx(0t3&YF7Yr|W>JHz|Khr_497sA)Vcffy#{{jCC{ssX9 zfee8KK?p$}K@Y(i!4n|}Aps#Dp$4H7VFFL5$YaPG$d@SCD0C=7D5@xyC|)R$D7h$&D8nf0D3_=>s0^s0s9LCYsIO3yP|Hy} zQRh+rprN5rqY0v^quHVbq9vhyLhC{Mfp(6Li_VNLiEf1Mj{X6?0R0R44Ei4o3=DdV zrx*qpZWtdhiZH%mEMlBt;$gC3%41q$24JRQ)?$uf?qi`~(P2HqGQsl3O2Ded8phhi zM!}}Xmc%y0_Qy`eZory0MCC+dM5m8PA3c3!^(gdF#iNNw7sQmr(!}<}(ZqGc3ncI) z%p~e0o+Rlcog}-Y_@u(57Nnu1Riv|Iuw=|+8e~3XIb;K5$K;R6WyxQVCzF38-+fH@ z_~~Q2$8nEaA8%3MQHW94Qp8cTQEXEZP(Gt{piH9dp!`KeMkPn(PL)M9M0H8cK&?&v zn!18|fd-XEfCfSnN7GL8ijJfnJyXJ$)VhCc`5J zc?NHW5{7w33`TKAXU1&CaVA720VaEoZml))LkqY=mq|Y_Hks*!J0J*$vpE*}K_qICwc6IC44WIB_`@IA3!% zavpLqb6Ieua*cCiaLaH9aMyGH=3(Kn;z{S3=EdVx=6%oG&U?+r&*#Ed&bP%+%m17| zjekl2UqDSDT%bn~K~O?4K(JZxT!>G|O{hxfK$un7Ubt9zQ-ndpN+efgRg_xPOf*Y$ zS&UNbxmc#yvN)BvnRvGN%2S%BmQVAaZaiapX7{Z0*}epago{Lt#Hpl^q@Uy$DL5%v zsZgmQXDk~_*D$lFXsW__CsRF9T2q#>OVC&HGDO? zHSsh}HH$S*v?R15wdS-LwcWMbb+B}dbc%FNb)|G;beHwm_5Aeu^-1(?_3I6g40H_g z4UP?^4dV^hjd+cMj3$j4j9(h}nvj?{n6#K;nVOkaKSy}3`@H!1m6@tpw%M_{ym^}W zFAGVFM2j8ErX$e#9bXQ3F?)r0ZFtLg=lQ_Ud42Ro_f6wl^0$F+SKrCLD+$63atWGxFZ@0u z7(UoGcqoKBBst_J)H1X$j3X=|>?+(Myf1PmW%0#L}YDF4ZT1eXI zN6U|6=}*(kGsrW-GA=T0GpDm;vud;HvlDU=IZ2j=LzH$<&)%xIpZ+% zd)8z2axQQlVLo&Ldm&+wY%zO@X{lnFZ@J}%)Q^D`&6T-Ti`AVq*R`wlw?8p{CTvh_ z6m4>CHgCynjcglkukXCrx!euf!`VyQXWajM@bqBdm)@`S-!8vz55xZu|0y`)Ich&v zJ6=42o?M=Wo)MoFo(r6JU+7+JTzXz1T_s&JT{qq+-pt=ZZ*Ons07(E2_AcE$;lKnQ zf_DiS5fK3q1sN3;1sMee6&(v56%7*&1qA~K0}~4y8wVQ|9TyK58xN$h?;3%*`w|Ww z8T=3%4FwG>{hv&?UjQ6rm|5_+hM@*vabVzZU~W4AauCwMf$#xLcUa{vAt9q6BEZAK z-M!Yu2Js6V8~~0M6B#5BU;r3cICum^BxD?1JSu*7d}>Y?x2o#TC`8ue z&0IaAsA5>>;@JI9svdEZXkD6z-|%X5pj5&T`IYGUwy^pd>vhdgipowOj2EA6pu(#%Pgjy zfH3P9^_WEViq!2afDV2Kivx!PhyxRMW(wHEvT2)>sU0uvDp$5&HPh$pwBpf5wWw+X zc}2IB-{bP~MN)BlJw0J=2MszA6k3M^tWw)7q*fv|+HGVtv9!ALs=U8zs zd$=VrQsUxbG}r0JAP}D<*g2qJx3i7cBEu!VxwPMR+JlfK6?dVav)WF+K%sDad{~k7 zoc))^cpOR0+qzR>9G1ek-X&{)=Sh(uz)|yx+C9c$C!$0#1ytU z@6BR__EqOSdIbC%u{<27N@C_;e=*>H*Wc&L;lkN2pXTD~_Q;jMW+!7h4XX zS!xwmD$2fXA*O%cx>aC+eZV|mI5}51VYEpzzS`W4f()H-h-WRpmj7`oha z91ml{h%kv%yLny`srSVTcputhYIQ!lv53*za&fcvL^|~_-2&YZvn!hg)0T`IGrQxB zne~<>(=RX7e;XxB`PiZcx51egjqBl9J#mwvE-T-WGPRw(@_BE%Lu@XNWNM()*uhD zpQPhBOm;rI>B`bi*97 zsLdXJ*?-egeDmA%4^o%k`Ym8G5%99&{GAR=>MfuWdA5HGh-*q*);Rr4Jh=sq3^MNP zqo5&}Oc8irJ0d7-e-wQadN`Pv&(yImW%#%Y!kC%PqdVtAKEu8(x0^U(A(@6y;8Iz$#%AO;Y=hfbn8CvV+P&+i5`5fSZ4F$I_@pYkZNi3sa`ev>=7s5AKbX(TE zq|suP+Br*y%z>D=67wBy@yiGp;*z4pMYaP4`)NMvpXEC3(sq|#OrC{NW?cmx4l>yV z&%DQ$u2NnGkSD+Yo#XC*5^(-zwVLCG$FX8@_!i(;34D58s+#OGs5xNM_I7DDL$c0^ z_a~e)t(VO9^tkCQ@Z=WwgCRwXKGl~qL{&izQ9Bhb7&G*4NFEG$g^HDW9jnf|bxh6B z2LMXRBcOV>oSfM3)IYkE?$_8TR-a(n%02&@P>V69V6fW%D&f-6$LUN-TlHQV+I#I! z51{eq=QkzPX{h7vG;?w;)D_iIe0DifuL#vqhRvC8f&Q_=uv;MJW5vA;K0n(X5RV`& zIjz101_Uz6OzrW0njH53L5~x1r%8wjPSP zVwc>>*(xq9;f!P3eIUb}RbS8QF-g_$M3BfNBSEG_(| zq}j=q-7PRo<6lj%)XW^PHaEXov70ZR;JN2H^0Sr09px6#U%UnCdT-1Gw-7h`c$>qt z!hGh5@HgeM8&{#@mW`{H2P(Zd(N6{%oO#{PJ-Bfq=kiK!0g;G{0i{O0dd3?2!@S3- z>JZ70T!Cr@tkT%;T!y#6In|y_`RCqnol$djgK^L7ap@xp_V+3>#T_{fWhcco8pFQ~ zH~_qEMo>1jePewVwJ!JTP!T3{BFU5O6rsGV9a#ty<5IGfXlhJ9wf6|ywn8t0wMu+- z+q1vvFc)04q(_>k9mQ+e>G`%jN<6r>Hn?sWzIxw9cL`2tvdz);7NALo$v9u2`Axo9 zKq2qXVD_}_AaUpOPm`t{G-$6wo~_mtdYnuZ4Grtn>m^iaN8cZL7xs@E&>Gpb#h%E0 zTDi`N_hXu@y;5o9D$bq-0HdKO&{wIcJ|zvAGj7#Nxhi&gi(ej_8I#|rB1$;7Yt=fJ zv4h?HV6VT=`xWS07WQ-eroKHJm1pH0AuI2JgSH)O`rEqYj3T$Vaktcw8D+ig#rW0_ z5w&{7AN^?02n$xl4sU@9yS8TCtFON^yaJ|bOcz;h%(Me#0{*2pG-UTD+EPsCZh_IF zN8SZol^+<7nf@%KT=x2;?$GH{w#e6cJ{X2_VT2A+g5(94OG^EgC;p>53ZgS8f~|WO;VT zR>ieLHU2@8&BMv$$n==jMRUSXI<)ApNm|TwyGYNUlYQx8sOHi&;~Xno@${y;%zu94 zMpgul{7<9oig1hEV$7Aw`&Ha)P(*i3>jZCsXg1rG^?LgWg?{(OwXID%VFf6cB~!b6 zN~9~B>^LPA?^fhNi|1(aaU4DKH9hxFwUmwGyplcB*XdD4#Yaa8=m27|+`q>r2wp90 z*DCAP{$i;qpZ7?uP&J_@{6b_2$C@QYvu=Dn-$$I*ypA1yyzF_F6FOn06<0b%k%p{*;WM=4)Xu!+oL+r8^Pa9al zbH)EFWKLtKj7X2qYP!mlI&aDWVlJicewM$h$)I7lYb@KgJ-s1f8s*q{vGn=yUFJlE z*Y{+_;jRdl_Drou^D!=&t(LLQunsE%8Gr&mgCEva~2b8xn! zUP46vW~>_1jAHQ}cXzvGN#e0Fmv*m=?}(2Bk4o@b<2(9f?J|vM#KK*^DXKSI1~~$s z^Hg{g*_m*|EanQ&qTohBXddRgSPM-HB5Nw2<;B2N8tW_8oDEk=_L8Sx35!l#dt8lG zO_#9N<%L4Y+pExSLySSMsju&gBL=bXAc7}zr6-b{E{>~OY4hFM8X zY5-hdEzyCLUl@BUop)In@DN=XGWsAsf9@XUJ;n{fiZMx;LCeL#@}bp?{T*_~pH)tf zDQoB9Q}@W=^z8H_<0ejJr6K@ESzH!I#HOP5M7YXyJQ^-!Robtvav|m>_d_WCLQ)ov z9=|aS^`^}u0L?Zq5C9PEwms{@n#NL2Fd~>A9^(0zgsZ)Z3r`nuxY$E-jR4qId)cju zc-b^b6B$X~!@@to_B|=Fx4_1?K1e125U`uJ`8ZSz49D<}@r{vo_(()8wh1`Xg@c%HMgqa?7 z`bn`pDoED-Y;X(YvusnTmh0+yH82gzAFHhcfVC{~=3It=t$#{)xx{|xL$!a*ZcU2+ z(|xot4gi|SpMnkE0zZIrL!!Z=Yv*@Tga;2Y1YQyA^E{Hy#iR*X_Fc;WTyPc1vpkC3 zTfp`_=6df3YjCWB_{`1sKXjLK?S_Qgd|#93-*5B|{m!)x2zd%%x$t2Aqe|UZqxwIl zPPGtS%ag^TiwqDSyk`Qoj|OET7zYVRJAB|OY8tk1l_FiDedYFXAA&Hk|;95Jg(x8vKrEY*0;oLU7gm-J-C->HVo zYm-A+D*WA6EyUXpHqLby!+8Jo;Ve;n(6cGk%GP!J9Wy6gO#$-Vr6WjY$K=lZRTCohQOaKfW=| z4IqK`JMcO`7S49FW{y>rJm?OdapO7hq~)4R^G?y|kFJem%F9b8>;N`FTiuu&qUcDs z&OB4RS$x>bUDWYz?l_2Xe8z1CjW4FPLA9xmfuKl^TZ4arnTyWd315fDGrm|zx?xMD zNm<3Lz5*)(q08*xn#{Y=6xy}S^K(rqj$=$;{@_dEnwS_z^HU&ihB`0tII4sOuc@Ga z>aiNrDY;mikGA7mS+h3~l8|rj&~lvZVjKlKLWY>AY4@!reT=aIq{DbZp6PwbRPrKp zkyyzHq1Oh4v4_#o$He~6FgN-Y#&h)|lym2Jk~Hvi0%N>I=;!otT0i#3Xvokz{|Dnr zpZDHU^5z|iE1?(>q>a1~@ykbv&qD2aGa%z8He6_&kTIHbCfMMPEGIrA>0_WsO z>skDE?GxbDXCtXJfhu{Nfc->HCvvrbCW1j zoB8x^mOQbj_ZOcFKDyd$!wXlT!uV`DE$^`(-(*W-bIi*!%32hEQDdUr0?QTSWJI^X zSJOi8=d`W+%Qr%x<@oUy@co?8$A8K`@+U>&Lh5DcW%dPPQ+TS=I^G8M3TC8ber z-Z%sc!ro*3PpY?_$9Ccj7Dg}SKf-4-}^J@#Sf4-__ME zpdGD(U}E9riGe*=?D6y6>~HW)=+GZTy0;$?HotwEHvYjrg_l`7%7^|H9WkJViFlz9 zG)bjkx*;Y#P64B{kxc@^I1e&n)E8l|CM24_4WwixWCBbDo1dP1cq^<^<{v3~z}e|Y zC@Vo;qSGduewwse{O%=$mK?IcdH6>H3`W-^ae%|s94MJ(4fsxQj9qV@Ze=oRf0I;E z_)e_B*zD(80WZUZWE=qVk<2>h9w;*rH2eul+$!~6W7}*SZ%K2|OrDb2Rs&#n-S67F z1>VA~JDBnn9Cs058@4^jX#eC-d@+jARp_WET0t5JU{d$kBE|(&Ul;sTJgs|MORda! z3s_&O4kR8pp*R>8&LKWep~zqm?u!0+Lk9q&JtG3mgUljirp}59+XhzksbzMDIIePg z@U}&4-`KI9-cZYmvWDQoO}CC~-2zC`xNx>wK~G(#KWM2Oe=0O}tgX1(=id>(LYgZB zEg9j63($0hMTbcXkb3in{p^B7cHwi|Z_rq+7)iTXfSR7qJ52_h;kCxue-3SdEKBqG zXyDK5C|kZc#3_>q4b#muO{??F>^cd>)dxgA>RA%;8Uh%^sqA7qp>D};J*g1k zA>tR@T+gE2cV!R)Ugap=0%F$E{`P+u$8E_@1;*tZ)YnqH`<+lE60F9pCgs`NLH~jd z3#s`f1Mb{A`|0rj*w6xPdc|^~y0yWmY-*zrta`}mP>K11y?TZ^QB-g!T!Xu0a!G^T zLDeS+XRRYDCQHyw zP9@$npejNd&P#aKe!oa{67Y8n1I z&^uAsGZMSK$XuR3QE1~QpKF3XvA#Yq2y^v{Ab4N$l32|0=M;0A`uvQ8n=zc+jP38> z2t$V|!1#%0nIEqeOCv_4jioeOh0ewaYr|3UC(kVR|JB$jx1nqGN!LgO@46g_36FSE;zOZHj)O#`~9!tKO z*Nsvk`o+9bx&0+=BuYU)stV%9Araj=@~kHkiu;kjumh_J4RehrQ}OjYI!95unLp{M zs^%31$;BM1TIgq}-v9`pHwXbb#cq9sd3FQ$IzFtZ++=u@{Pz_S0t<<#;lf_0JL8|Z zmE{!h#zTjokDKZA%H^VJ@pQTrM)plN(c+<>PRAivL(2u56^|fv>@g_HvgDZ$^t-|X zx7Z3pVL=O#ie40li zTmt|?$bka8{WBN`7sBeN)=1_LGaaVtFN6wple}WJxW)klo@+vc2l%zDy=POh#%^l! z&*C345c8sUyeXZ_7c;Rj$pi?i5kb{}>J{%JU2$RFnoWd$ubB&`SV~3a<9_B|6uJZg z+&SS#(BU+mHf4(`Do<(ZI)3fhj#I;U~TLeH5xkg7Q8DSqXY#Oofkwz_K zHF@RlvatAube7RW@qqOf@O$T7>-h4FAp|WGfE_b?4zl4s!C=}|ZGGeOXLPAZg=m|P z-So)XCG8Qokd_drox42-)?69XY0OQ!;)%ir;(V2*TpzuyflBop`#Q@dhCK1M8uU~z z4>eYan?E;(d$A;$FCW{#Mf+!E#k1?ZtQHtatX0Jf^=G#AnaNYsRxx z?HZbEy4pF4#BNQ|TYMl5a>T)5G79UYR#{8W3V;@p7tY z6MK)8X_OAiIscExj_8ThTd~AtYgN@yx|bvo3e=)u7PQgF*NEA-0M}udIMi*)KCS}U zDaZ3m($5d!(VfP`jz)5z0=On6{DLJ1T47f6!bN1fNmcYxUk0Xijqw;%L$oqf8yOVd z@TGF*d-J+Eeg6LT529f*l_3c~wLG+E_!}#Rk*EKozLOK#mZEUe8J!j7*|k|bO!`!r z^!BL2U^A8($1M7Ygq08${U@hvQVPOv0n}8r_Su4A-Z}c{A|}0`(U2M5!aDpes6IEX zLcJZ1_i9X|$4Jue2FA(Uvp#NWw(>lJD)6$>y`3E=bx*^p|6eWhf3?j2ky<8X`>KRK z1TxCLv8%&Q8pMlQ;M(oX+NKy(o9-?%HnCE>({EK+sDIs;N84Xv#xC!h-Q}T>>fCOH z`eI}Z!(OMewO8If`3Ckv+N;T(C2W6?r#jBbh&@1?m8HtOkc%}$XV#>MJ+++6m{!u& zLLy-XSD9IT|FeUX|5F;$61kL@V|fLd10FY!mQtUfL;{zY3gt$^TVMu-HFrEHS4Q8> z6{XWbrkBS3kV_Shi>to2Mg!_NldDs#Mu2E^hO;hCV7UJ+49cu&-DVmJv6?zVgcuCi zaFZ?|MB9?kkE16acJj4O=fxKa8vvl}KUHhs8*VDrSs;}^f4un)p(87$h4aEoIw4jl33 z
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�e86Mn77~QWgv^h}%}aFb&1r4XVXekzv;L z%pZRN+?<1$bSl>-^sx(7x*DQw$@mRhZa-7wnHV9OuuhPQ6 z(L6-7Rx;SfU_)d(;qigjry>Pab7sbF5{>N)!+i@1Qbk31c)2=Ns5CHWA<+CJo3vf&`loT8J+$Ej*ji+Gy+d zhPN-PQ&{%v6J+d+BHoc}+n=Hiv+xD8Fv^iv9KQ_`=3V-82Q?c_2#yyr;ygY)mvG zh(C^djum_lU!o9|R40hQ>qawpji1c4Q`X!HDsiJ0R-UeK#9E>%3XtQ;v{^a?dV8d^ zH$4Lb+`^CE9{(o<`IbSQH7MQo-nD_sHTA4A)^xR~ewp)JPw}vFhRMZ`QTd&bm8;6c z1=){(xBh?nM$Lz(ti$DG**UfT*{w|@hvIS4s3e5^Eb4EkUCaGN zcFm#r@Gx~p|2bSD8(wLKz{w6|8Gfw=H5>W4u;aMZaoH~)g3+PC(oNag!Iv`6%QdHT zF_OXh%VR|RKtJF49JRgyNO62cdI8_Qf#{qK$Pu$vjygJd)hu;hHWrr?Z@w#^-_F#* zd4L`DiHz1!GZTuY&3Q86n6%{w3=>+DE=JRa;E_<_VzhR>$4FzZdwvGy!mS6cc3LII z#Uw)it>G(UFAvyaMV;M7)JpM3gzIf3h)h?FZhF=`>4opA?GI5amdvuJ$i7J|mc0&! z6d_4>a+5K~X|4Am-v!i80YgZR2@3^j2K;6+t-*hswG8@JSG&Pv^4ia)Qg|raEQrJQ zUh5BIc^Pr67<`~Ao3Fi?V8s z1eJM}>Fja-TL3$`+Y!rrN-t9bPkz!jrd4>4LQTMT4nigf><3U&LQ)x=0M|{ZQp`I~ zQ9&)c4I$=6X^Wuxk@J|=sQ!&Og_tt2bXJ0o3d)@;ipX`wy!B2w+iZJTQ=FX}#UX1} z@U>(^gd-2qgjfE9Ixtit+rn1(93n2}5JMjn=QAY^5k;?!g}t_c7uXyvmz$G-eP7TV zW)6AesNAS>eDU&x!%-Z3x^mVrKLlSJ+RH5@9hc*+P_MNs@AflL;Ob3p_xCwE_U?2! z-}{BMNroYd*WJo`i5u^`NK3J8e6~;r7=hs9%llc!n_3R`v3~Md!a!*93y&83fW~C~ zY#VB<>}-@OK46hm(D`+IxGQ{Fqn#p7Os98yo0^apDn7bsw%kl6elGy#GnV8@&z7GQ z;Yuyyh7_nA7&9|7$IQ0OmYHL= zWoC#WF*7s9%*@Qp%*@OTS-t0c-`U!#Jylz^wSRX0^o&%JM%~lT^mO0Pb#F>@HYBp7 zdx)9ar?=55<+eJ{?Y5n)rZM1;g}`f`#gpZ0DfiRtiMNC~LU^Q_&z{SCnZ2M(eQir` zbKrR9z~C)uD`??dw})r1#pMy)iX4%h@&8Z;0;nS`+SzPq=T#e>wi&*k_k|j6L7zt=>?8L76J$zpii2 z{R9=RGrC`@O4q(C$StPVaY?nE$ft*{Cn@s}=X$+|KiQbo`s=uGpi&uWOJ`h9_-z3# z8_M-*&B9h`m8|@1#LGo0c$Ss3+kBUk)%#89-5>2 z7+#4ksm*Ox{LK$oPhk+_LfcKFp;jkoP=|bjHijlizJIsd)!9{=welokIh`ov$-tcS zTG=zro;Mm6po_f?CA+erlqM%0?p2Dh0o)KJd1#~_^{TuErj|r7DQnEM^%a0ra9fn* zD(eYulz3L@gz;<&L&KY%1{;BRl8TW>=%ZW=dRUaP^_xc1=FK@}fvUnobx(5QE_>F# zN@8)i01EP?DeV~I;Mf{6Yw*F8BPU9sCkgtOgVp{NmQ^j25c45-XD}s_tv3Tt`>nCto(J4@5uX@mG;DFbzPP0$Ced{PReMxj$zt zp=(Tbl9_pq8<=ynk^u62a>bzCh_MkQ1rv%Wa!ze@qLVBTxU;(rls zqoP`gSEKxe5CY4aZ|7)HESSmXK@KZnNO*KHB#&wUQ8^OIdiS&gNcyp?xChg=_E3c^HOTL<<9U<`*9 z&n~%0l5=i1>8W&T%*Zl!Rc(l*VZak@FG5<#x} zeCnE`FIXp%2o6OJ2d1W8rvH)D3hrvK+lMLPBYRTLi0m_RmRfTFX&{(Gn{tne>O~rB zsX)1+`F#!Es6JMj5qD$}f2fhcJBrIsSv%4{-iesS7nfpcAeoOQ$cnmVH>f4rqB$&;E6%Zl8n95;RXj`yWm*Me3;Am zIwu6f!)rab1~BrIbh?!Q z0~z-hm3|ePXsUT*>EDom6e8(4S4{IgiTE?nej|ETeDLU2{|jWznPtyrE0b(vOpUUO zR)|YJ<7w%WEG^IIg|4VrECqLDj&NpQEcsa$2Blj3e}*fFPx|$KMHoBd0w#1(SUT(} zkL?)>;Yrz&v2!8p2{P^tN+btx<5D|8=r`_#Mn{iJqjt~%nfv?PZZ4;;@W9m~ecHm} zR5C`MRpXQ|N@RKKz2r74DurZ)g?LVaGWKDn#0=dx903s z@a%KeG-`6qDmdrI+(q&Dms^kmf&TXEx+IRWF%CzC=Q4;a#pi+`q`RNgv*rQLybdzu zB|5zEA--O7d@G|i5q&Y>X$^4741K~rlgGr&I-A>wEP^D_AQXdk=DdVKU_HCXhJZ5xqeyYLL7OBISD2)Z>IMxcroSh!^`CVQyKkB! z5&=&^9sEGX-za#C@{nB|Lp3=#qncL2N&n(Jw6=uq#-T>Sc;Sv%3R1c&0dULXN4FlMm@7~$-H5vM6w$M(1-O^`Mj2%nJ_MuP{4re$8nfi#PT znu$Y*ku0eW@JG|>>GXjM@+^S|fZ2dUo!?GNC0yip#=8>J0`Z9x->3gXm(NzG#FZ!j zISDCoC!9d#6m=FoM;UR>;)(0wuKcq~*)72hW%B0ALz-YwPf^T_gg^UoQDR zQhBqw(eFGdXmqiQGg8`L^AX(jT7=v)PRHz|hvtw&y?Vy-xe*F*ea|VMP;a;s4 zr&apWQ(-wB=}!Fb9Uyy(k=f8Jn|GA+H?4sMHMQ`9N(2I01Oh_?oNISDtA#AcXzi8+ zE9o6e0bcU41P^MJ;D>j#EaBj{!liSwr!RnJ5M!6YRJ^(9W$clSh@seQ z#f1W=)n%liI38D7p8JMGIVXn~UOSAVT+AO86*oSY?c^r;-?MV~k*XsPNEkJR#`tk| zY*IO0I|(gy#g@+f&LjnC0NiwY$vFT3C+itCs*>1Ph6z(^=92ei_qSM{=u#4;u|I17 zcSRm&oMsH}oEJd;-IV&la_D;)@9`m)C1i-7n%wSd)5YELrAi!&surm>P%B*rZ=I1m zVJNO^{PVc6G(&LL>y3?U<9(}69qw$xxLn>ozNFr(nd#KfT?q4X5g4aIrLv4#tm7&Y zZE+np>Ui`>fy{c+T(9}V?5n=X-np>mGE#1A1zOJ9Qcs*MYl$cA7qFw+Jm8?_c)TGR zbe%z-I@IzUt0w9{$m8FzH?x>(by|a@IUlHPf(~M!MCX!c$i^@m?FQt>IHB&w6x(p; zuJ@y69{6boWvkiX4Z1{30*6uPc|8!%?d$w17Kr=ETNySeW~}Pn`U0pMSx@$>aT~$e zE{9v`PzJ{fOGV4c>m#jBfO`uJQv><*V#F@4hV|e+AIf1|SMvMJ6Q$I6v!+;~fAt1* zGes@G2@hZTprAWtk(x_{&!o#bma#h?`LlQz6V?YK4D2iR3~9%rHbfMuaifN;Ojuc( z?v_j}ixsUoS^4K2qr(gP0US;*@Af0Dc6f0t@=DE>E?5Tr@$-CrQXIYKwunnWQG!kaZGA7rjy8vf z%!FW@D@p2{X;FESL?m8{H$jM8(Lr01mC?BIE)Qo#-J~Z*ZEV@mgmk_-idayZvJ^+V zba9>bMMeZ*Sq!Xm+#jz`Van=d$FtQ(vC>uIP-v>A)T}N+)hd~%sfu6aNY3*wmm`t4 zO4@CiX^;+|vyPn$_!i8b`s>w7_H)ebd$GoBV13z1Uh~t0jwWWNQl5aUR8dXt`WKV? zeCgw1hP?E3+O?)zQhOS$N@%I0AdKXQrjwao3u{{Ee(riyOmI>S8wZiPX3B-BV9~#7 z6Fh~MY@diymA~O`ST#mVyPyahN#lqp$_DW|PgvqblBg2`jt4_)~>ku}_(n|ruR9_7tj>BumXK$&@PHd8LOln9f@ ze4Z;%Z1;n%_blTuk{0p0xL+6xHhg7iY|S>8gR=&3-Ws|Z2NM1?ZESh+7ovAzzp>bp z%TQ&l%Vs7r#l_IQp@)VENP;(kmjE{nUl(Iz2}~LVFN;v%M$|ii2-*mSv^46BPn3ll z^FSS+J26x0Q$?fYbJEmA;sFlIEaMjJXdW|pI7v_dk{(ua8n%1KZMf>1R~L+k{1AO> ztny%ngz>DX zRk>JsyuTGgp4(R>Ixx{RaAil^$%0gVuwm6o3>G8D%GGe`NvY&MA?AZwrxOIU85y53 zr<^DSf+ZP_xnyjXM#AJPY4LO<%h_woTl!$My+)%J7Q>^B4 zf#I?GfTFQ6u%S5r)_*n{EJ@;Z0uhVR$^dtz8l6)SM**OaV%n?(f1m-(tU#i=$!i3} z#k$ID02r9Yiwx?gKI;Uu^hry*7pfux|#KL#rQIX=}0bu~-0uHhBaR8auZ5 z@~qs`pkh@~gnsm)WYMZKOo@}nIHgiwQJ3=<>G0I(SPlxh9kCpyE(sl#_+n!9p}!EY zpMi0Z*%1sGDtojN1SQhSu~vc60mUo{%@t(IiMiTVMRUd$tNt_! zow$jwPIWwLPRHP|t>ab0Fc<5d$CLDCf|?RzmDeE2e)!JzX1Bo5E@3hAP_U9BAG^u~ zyx>fjQ9gCLk0J6KI||WdqqTZdjiDf%N$VB%?hx(&pqq{P^E^qHD9&KSM^yD9(M@{s8*%xI_8eEfS`gt!7lhz64Yn zMgl+Ozr_X*g~v-s#F4VHvXViFzI4oUK*?zUB}7b`*$&ilJ2BVdFlj~twok$v$!H$Y zJb^Ru@n=7?7+zW$St~GBIBT5tjg{`9=;+5L7Xq}>*V=xYPlnE{igB${G~EkEk>5#4 z&q)AC70@Vf(fwF$C$b=If=q{I5B_X-dRu6{IV)1%hn%NfXe05M=7dnsF380^4Fg?R z+3zCG^2$H69*cfEZc&<0hY18W%{pSrc!GEbO7Ma<+2KR zi|kl7JJB)-tmY`6uZZ%0#nn;E7Ps|!VqbxWlm815Lqkf$QEIN0$U%U4pJF{rtg5pph{B>6{X!^Ir|+fMbNNk+2WnrleZ zw>y=&$?hZ4QqeW`iF3eEkW2VFo|j$wrHAa9U_ zj>#f>jbmMPqHdvUfIvnFGgw+!2dX-(*HWvrgwL?Xv0{8rB=QV@#$hlA&}f5=cCwPn ze*XE_xgcyJE2U^tfMBY_u55U-73$~_(%4rQ4lCw#BD3IG_s%pJ>Jo6*tp!x+n{LPe zS7g!?LkOzgM(-lW>U_H2Cl$c-Pu-B%JW}UXGd2o(c|Rq9l_M#Q_U(abE-QJ_*qpIR zHF(t}vFeg9=IW>JV<3BnJ;S#9j<#<*V<-6bRL*zU{u!7stZ3Xg)WH7_L@j)NXf%eY zFTqJB%GPa>P-hPD(0I6dHmP*FL}gV^$u16o++|HfKXw`Qn{7uSdVS%DgmzZ^&lUar z!_v&BPR9=G96+sR>$F1Q>H_faNxIlB=UXe-cZmok(^(!ow}FF-L*20#+W+fcH9-0` zzqFidTYCgka0JINPPlT?8mSR+kMB?-AahuG)EYq)+8fBF61!SCya2INZ(rVKQlMpZ zYHAglA@Yh@G62|Cmz^`U|CE%_~%Z`hgFHX%mG<#RnTbYsm;I}dpY|EIz z>6Nt$v|9|@+faU;wRIsXz?GT-Xhq;%9lVc4X3!M8|EZG=823`_8W_cI- z&sxX-5NbbKS{SO(fBeFhQJ{ULS0p2bT@w9Vw<0IKwc;`N6Kjw3CM5(<2E~>Z;i0wKf@T#Oc^}uK zi^Vw8BK;r^MaOKv(;ak2(|p?4q$;(O#_@o-2%HyV;&Gse+Mm0R z`HeVE@TIKBChQ5NVF}hs{@iG1{YMBi|=T^ii!APrvqO&V|BHQB|uHL z$sMLFBEINab`P)c8zdT$@)$~ZjW5g$O(hUFlMheikkjQ-_*ib3*s6Rd%nG|X5O9P# z@tCntZS%4ph)q$XEw3@%u1T7akZ+u;Wp{gXu^X+-vrv}Hwe4LLASl^I)HE2$uXkJK zU>7dtSp`MLPk{BbX|f5`G1+}qrT`8q6I3GdRFxmzb`_~NdfZvg$6zE_1Qf~fLZPhv z3Uof z_(TnB@_6zH2@rp9SlNG!PmL}Lg-w$b!eqn29aBQF7vw(Avz-r59#afr113~EgGaHG zWrH*SYLDwmyqXvzt$Ue^fCG2zfShn5q8#mUBB zh`yEK?74D;@kUV_hA`{F@}@)`t938=xt+2Q>gY?!DY|l6GE%kUgXccQ11W{DP#WCHtLee1A_Th+v` zEmewRv1=LoX6N2`5=aUroccaKb;1 zUn?0x?gojJ*S2Wp;tKMLo^j=9)k!7#>hg8+&VL+V+>YL@Dv%m}2`J%I=)Z@x#B8lW z{tF>Ty(Wzy#?=W)0Cu8%%g|9UE*i_FRe85Kk-r^er;iE53M^lxY{WchE*aBd0MGc5 za*^8Lt1a`-jD~XH4ohp=vtCDqeEa1YW2xRzTaOsZ1kyulV>!^duWA)4KIPE0lym(ZXY8&bkr)pu|?2YrW<&NUKqYV3sk7 zfl^u_JdR9RS_zBX_F2XR6+2Dn(~c%HW2$bJc)=#d(tK$kJq%8Xijl;XOa6#7T)H!Z zjVHYH+QVCi$PKd9|NM>r5B7-uE+d%O7&|&Sm>5|9vuA4vLSSJfW+wh;hmVh#Ny5U) z$;1I%S{XQ*h?yAK8k-O^$(q=hIhhl)u(7ie3kV?m>*H?e=SebAtDGpmE+6`RFwSyk?G5FhA4lnRhvF^FK_1*xk*X^*PqxskE z_YJ*esxxHT&Vlxkpw_0lZBo%e3Cd>Y#`X%wi@q#VXq}%Q~y)$Ui;mhD=gwrr|SKBslG1DyHSiO7e zw|$4VH>Tk6quK}@B8wmCQe76WtsS9ym(X8DHB;YU>w4MB`ChoO8+O%>jvgZGSXI~$ zZ z@7;cRT>ROz{oVYFYq0+3!{21)O{oWtR%yaoUXHxTMw6V`L>g(yP~frfSzTt8s6r1? z8w#&Rb3N$655qQ#H6qVCLjnv9kShB2%UQJof->!MmpN`l%#gTt2Z%YgH1I;wVVGhA zE86#2NJ;1q545vUb4=hTt3hqw9?04o-A`em#02mfP-Zhb5@kZ0={*BjFl#QVEVh<6;Rf-(NK3PSlQXk~C-`Bw{#^Pi!@ zgMv8&&?E`KfYBht1v~K=l9)%h55hSU3O)7cEZ^!6fLmf+nK8Rwr1-F0ceXWDy9jF0 z-jc31Ms6yc6vJaNMr*iLXM7pjnFd%o$S#6}R;=eh`h8b`)6kkWFz@2i)?v#a;|`{_ z&f_2Ab;ot(ggDlDeqvx=EHf5=Ef*HQ3!}%D1wcG1fqGq|#`s&C$k^7tqr~rBzY+|a zZb7899!C0Bv_1FsdjumZ8S*z&nqktr1K1S7vIgtQwV;_GN3 zHPpq`ZDGI|_^m!xL@`|%uHl2p=3{pUW_GXzA_?dsU6%8Wl?E0*C6dmTjXx#+w*~AG zzVc0>_J0xjC~D(DyAIAmP`h4d8TGwU?#B<)pS=;^=EuOrS-&rnkUA!l@R zq+CPTfw8f`o1D%MpUv-=KOfT9+u2+XQc?~ldVBulPBOr{RR5-K?c#5Gc600hgphhe z>G=ksr}v3aPtO}46BDWk_Ula&K~O)OuU$|}SO4FBMIj*}!beW==s|v^+0RIdxBj1= zpdmbac05UU+S(wz_4KMcgBjuMe~}J-L4Yy8ftb_TLUF~%{EVfp4?VZhz59{g`2o3P zwfxD`(2!K8v-gw31Pb&VCN!+MFCRYf#3R*;?+*wsEN$w(-bX>2C2|5jKAryGLbkTH zgweIUQD1uWQZv46A>P|T90{+Hz%jvLUzM8t!W_c6F|*|3riXxnEqWzF^1|Xpwnc%2 zY~t$r(}2?S>J?0d|5X^`LIL)u6a-PHOL8SRgzJOS1mS}O+cntx=-MKf>qFt&;{)qw zWv!d8D{QAvy+-&0Hb59+WdxUxP=HVe0tNpq49>T?b#2hEO-K=Y=pgf|)d@vNQyvSV zQ61Tp(3Sd3J*rFJ;$pB28kVk!n^$y;@PfPZMA@H|xZ%<9@$-j!v%DRa zZPQ=eJMi;gGz!h`dt+_=mEj0{t8TerWWM_QqQWoq*h&oB81&9B zQPj#h2Mf9I+hd96jU-9%EU*(35hg&?NoOs)GZPbni-_s+@6$!&=)&>Gvt8%no-Nj% zxBJJ>JhZii&u^BaPXYd)h@m0(!g_x)QFxP({1V)J=kX;G=v4g*anq&CcOeS#IQ|*( zOb3O#)8t$5&yEmX)8eQe0+amn17{t5Af;a zM+rvm!#unV4+AeB8_9{SM!7n$Z>-^w0psZL25`>SKC)2HGu5G!i_cWQ8;k}!HqU)L zihVhiwlb@^y=(kv9d}NiW}s;)U;MYm@UA zW&~#uYl#aLqhZHebc!h&;^*ym;r_x0qvfRRq7=mSaasfCwX_=e3+P_A+o>IzM9;LO z+4yj5!Zjxi{60wme`T}7xW49G*E`T8w>{(|8g%HJochx@rowm3P28(iS0xtZ6yQvD zCMt4-;7!t|ymD^xJ(GJ}9wx@)K;(o&fl^Bb${wZ0_|&szjg_5~bF{-Ctx9&dofjYN zu$pUxc!v*cLDs4;AYGjf$Y(!lrW(9kv0CjcbAhGKlHdoIbnJYyw74BLapsQn6We}( z(r>z&pgn_=j!#l`>Q#x}+_(PXS-0w}_PckQCvvTgPc-s}H*Dxo)aCEoTw1#_b<;u^ zg@=5^foSvB6d@>2q_53r*bA?f;jbQaA(!cSF&5I_29)Lqf=ZI+dEVhJJnHn$R{}@J zw54tIMs~8x##(T!+$6?+kB$-VhG<6afY$Bmgzrx^D81i(T}_!>1UupzNfL29N<;7u z(3Hr4s*sTF@?kVT@@+yJ1Q|M}vcC}(<1uBpg|T+ z_v9714L#QAbaCfb(FK~BpXDh>1nIanIE2cx_WqKt^@*z1?4C_#&MmdJM)?m!vWwhb?IkC?LyL<{OC89 z-U^caW5rZ%0?z3|?wjwO`Pyc*6E)n?HPs=6?WL9ohjgyP!C54OS4lyTwvE0Mi$qxN z%Kop`N1?g0k46nM-^R+2ZriY_YVR#*$e8YOWSMeJM-j*p*%QJsGDp#Xe_0b$!}x}e zU2lc*`LnQ6+Uc;b_pGJMo~$q|I;}skHuHH~bOe`7I~_5+j7el(>pC`Me)jf?T!M8{ zp0(mRgwRGv3O+j7oBCi@bv&eI$SWdtI|#GIdv!Z>S7|#?X>`GLTZXG^#;KcYP&`L= z71p>7>wOJb#?bX2Dnc7VwSp?UO}ooJUU!+_e&XsP)!x0c>kn6GRH4Wj+J;j1Xtz4> zr$A*OBmZnpB%t7Ay3X867?Z~w&N9Q09y~vA`YBILHVR6{5i^#7+x49|CSD@hGzDsD z4twH$jR1f2RF}@zRw_lXlNrdqUm<;3F_zAnsjlEyUfIJ-Z4MejX1!{o=1HC2DBmXo zBRRKO<2m8t-=)N^oS!f~-X?m)4kcw7i!mpg36_q? z`*tldQdwX5TA@bE6X>Vry>fs$3DPo3D(j18UJB6!oO+fb^Z~tfJ@iN-1R7I>V^^Yo zH~*$co{^wBffZ)y+fm6~lkCiM@DK{1q8Y#EE}E%nLta*Fp*{L^4MgEh#THMMX5=bX zg+4q|VVB_f8`WTZNPl#&KO`eSF6In6-Z+-Dn7#4KrbwCYGnnQeP&Ph1H~va#7MwG2 z?4~xXyp5S^#>Cja;Rg6l?W~znb^k&sY4JYPW&ACdaU%!f%eWLKeF|J+b|XRzGdaO_ z3bnCOo3cldOQy!gw3M*`mx)2Fg7k9iLsbRq>j7JMt_3Jq;tk%KzmdJ%vUA8C6elt2 zyk7WyRy_;d7bMs{!8o}wfY#{C_N<2-1|?bv@$gkAFUxKP3-a3yyptq%6mvgx_}eFf z;uiR-6y1c8mp~3rRB{-24|HRFu8H~ao6DzfAm`$4ht?zPr8GToDoo$fou_;gO$HKb z>lSY-j=Z({x6(pFVTf$@T5^76Q$P@30L5jv%gg1WFOLH`QyYO5j~|gff=~h^S?Su6Fu74OmpuHl71EV7}Y~& z2@B=W;v1pblS4I2pKJKVK$|?~ma9JWbSIS)l#E23Z%KE;E0UI-bw7rk`G*Pa$45;u zBBCc(#F1vGn&TMZ3*%bdDVT~|qYviEBj>osGwdafEarx!JvdSR%A15${z9RZ7uBd0g9iaY?l2{WP}G>T(8(wb|;5W$Eu#tCqfJTejcXp znTUw06KUwS#?bnT7gFYw}ptmQrr zq-6+O9Ylm@)mm)=I|III^A1NKlp_a#=*eQ`RZVAr6 zUc3ouhCAP=RRPr3v)*gxn1OlKhIkq+^8vUw)*I}r_l~q2?7ny+)TOsNyAzZ&Tj$^7 z=y-DN3Oyiy!?Z^ZZ`EWWcBkpgQm=-Db+t};xnLqhe0S!x_U`E)nX1QtNLx_JFmS+d zCD^MVKuyQI+s*3<=#7v*-roN9r3Fau{1D^Q}v$)m@_u)7`HWxbDT))z-aKbqb5US*hjP zk&SMzAQX}Xv9R4Oo>|6>?Vt*;p^(~IL|YV9RxdDxKG?elH3D7DMkO_hJGa3Yd1MEZ z5n2T@>}zy!gGTMaZQPcwtXJX;HQ<{&TbcXXvYa`I49S-fL7p~_dc@dL^!0gG7-tKu zlZuw!cb4i((N)Am9$bZIx`?7oRZugN0=XX1HyGEdp`c0LJ|Z83f{cAF{+NmN@B#t* zWhI3yGtW1Ny3ik?%*azJ6N01)Du&$jJtb=63wBG=k2F8untBoyB%N8@?|oqt3wZ<1 zmMX_~lC^V`gL+-3PRx2Y^);>WYx0JV%Qmp5*ItJs!|Xp%qo_P(OYgk!$>l*%&*+kH z9QCy452B&9HbW}ps>a#=NeHkd-Gm>#zG!njBAr*p{F!9Q?01+orglZW8|?m_^}B}W z)m(Pm%gzNo;C7EKo9kf%}4QwR+hREc3^mY$J0nf6Kk|@U(PR#d=!G3Rf?_DdUoZ(lWc%&apk}^kt$&)LqaGTfA>apb9_UIufBd z{F%j~JJF3himb!_>yE8E1DkwJ)fQ1oV|7I=?=6B%gG3t_(Zj<@F0Z+=)2m~U^r*j5 zneJ)vieJN9K;(K3iK;Q+^uSNdCdH5K3;ac#uEW;^A+Lj=KM-Ks4Xn0h7%GJY(MzkG z)e@&oMe==H98{SKe&;u2K$@}ubcqA~ywVU|xb*9Yv4!?MS#BeI!MDxe%6zp|YU_O* zO|dHuS!@E`6}td7iPBc;TVLx~;W>t%Dz2i{hbsoOS>trAAxZ+ zsbuTrH{w~FKw0{P6o%ZA;_DyrX;_!)C0>+Z~m z{t9N-Vjtg{7_FF6slZm;PVjh6Z7QT#`_=oHk6)#pm^J=cuA=9UFlUg0+p=WXX-zr% zgR+M?BWq329}AaM)S38zTM5}BFnPGv{roh3Dte@r)8!}m(WGg*5vC0~NACt7TdOM! zC8@Fy;fd6$`Aw4|y=Yyb4i*w=P)_P+-`q{}>i35JzQrJrI)M)lS=&U7v;4P|tNg4( zgJu6G{Kg7x-MS8(xg(30=&)05Le)gHj|(T2U^^WJ%p=>z($XvbDtx}FfO)Q;gzSxx zMe7DdA{bWf;{*x&6SwvLA)1)7`*FO94^iSF_5js#hgP-+P#}{6Zinzp5H0_@@on*`f^6oNek0A z^FdfynX~g`RF5+P##zkRUvQPV#1qI`XST%^5PB77NstZWkkGV$&VhM)^X;bYgTWY) z8{Hd()}(dfWc$BLI8b3`NK;E`OaNP=`f1laTiR8RvC9ak=oJ|7UY;M}o=Mw>fcAxB z>qevQ)COW*09Xl)l-A!Gu{aJtMEE>1*fE$^k7u??MDUX3cA9FRI#9yTWM|p4ZKapc z&#&Ve=*Yke>Pa|LxlXs2xl=hR`8rK|l8K@c(lPmxjR8;sx;+9jsMXR3c6u${18btt zwOC0&#??XEWwj1`hw{1~u{>UvvnHI$zd1jj(l>ZGXDgLnal)`iUfu7Od9nb3(;6?I z8AKH5{E{|no^Y>@hzRWdi0WBt3eY~NAab{cZ?&auGnAY4VGN4P!zdpa5vs;_VpXu; z3Cx$?&<1!tb^z#67CK!_wSMPcDfPryN_vCcg=XG&1o# zh17SWw^saILg+I@9zX^m$~S0ks&Qq~ZgPy>hVe)UFa_gHdEltpP2?kB`{4^!H!A*^ zLFCfLC~Y_mP|`h07fSZra6_Rf(ck<0Xi8`kgy|8rqemT`)_n~?}6xUj$9a(#%<#+3;^|PYq}475R(X@C0H-xcYxA2SgQsG)WbEFej`x zD?Cqn(*&x9g&p{hH4SS+fW$!O32);)%D&{Lc@Qra%q#;1YDfRCmUuCL0rkW(xdP1O zkv10b_vWU8evyv6FoR=$k!Ebd#oerTsbW&Swk`mI5O%HTEq|C=M_!8(#~*48DlT&m zfz}cEcJz}yWoRj$t5cT>TgWYW1RbvmM28L6o@u&0Mg$uj$vT0G4QGY4sFY3?h7C9E z0YB60+Ew2iq1f!-W52!NroKg6n>{3#eQiLYxT0|CviiPKnY2ZQ@=M7R`(v-6i6g=i zkB`vWdxqvLHo97$gJZFNUAFvA4;^5#5^nD6-&Ikuq|PbU*GG>WMU8~x2rFwfM!Qx* zsqRqjPyoZ%XMzO$BV$~o{bj6IA6a--rLsT4k{v^EGWXOm}&fYbFBrn zo6U`UVlyRmfLtbtv8a@FiddyjY%ygXGG77>u=kZ%5q|C}T`p2<;7R9Am!JDR%XmH0TrRJfedQuKLdFK!f^O|;|# ziRf>r{NIfIccX^#i!(ea3%aFr^Qq#t;6>ztDp?YQI(G1EUTl;~N7lQJGYv9?6L#OO zH?WV=U%da+CQ<5I4d_HB(r2t!0p^G+Mi!-SKCgiiTh2u=c13%^ju6vZt=E6DI{<>TdvSo*Fj?CHX{+}YgTJ6?6t?*lUTbG}v3U`1j zyEA;-7H0mJA7^o2UAtkr8@g^vJiOb?X8AH2do#LceDC~|fD{V-0*QhpUeY~Adbs9{T(JeyR?JL+gf(C{=jp&w<( zN7kySNhRU=jY=?=- zjI<-#Zsytgw@Y2iuC6X5;`Mn_hpUKzZZTQ%oNveu101eS?MgRhmD&e!mI9hk3;qMs z?`>&fymjrpxA1t9_<#DW^+ThEa4an6^-d{APHWHC5cw!}BQ4m4o&?4yzO`kd{Mz0N zvv01Xie*O61#~378`NSksqz0pd4t2W<%CG+*Q zFHQX$@rfKX42tXSvqo!kyRvGhGZ<8Lj88mchJHVOn?<>LMa||la}n~{b29O0|K=us zzZ=1(T|2)SOAHVn_1uk)rV+nL4q3%nq*P6eh1U;NU2J_A6$e4N>M84b68&Jx-eY;* z{!o*p&Rca$`;5s6nZTkqkkxe-#p#i0KCOYp^_z(Cw7e62+`E}dBmZNT%0w#m#of-R zNPJ%4(0?a0qHCcxu$udALvx9;Ri%iij)tMi1834pCuz{fNY7v+_4uBrom6H=t zrm1p8=BCGwp^quiQ}2!VnD-_QrD|2D54zn)+=#SE*3nxfna|Pi|La?Zu1%%`idU;8 zYJXq^$+r0E4qC5#SKs5=K<4ac`u#2n#Zb1r(v9EU073Iez8g(mFPk5>%UEfec%OsP z%?t*AOpJLp>m*1x)O~-+`=%~o#<6rdWms+fQ%z?o3S>Ba%M4;sJ>)hUejPr^&(F)@ z83^LSt=2x*x@k+HC!{ydGF1G8#pWLm*jMFsh!m%*s+d)`*VbJ6)I6j5xq|#x3GKkh zSIbl?RX?SH`l+vD^iqYT(wAiFZO~rxt!u~PR0#`nDLK=?eF6>in+->?h;w7jCM>4j zRzHBUN1VdvZ;9@G{FA1NAy5Bl~ z(>>{#%-f%ww?A1YXYYJ#tthSDW;c`*6u}6vuRw{XMtwG#9D`YWGJEysUtA84LBfa1}WLC_*(~EjJSi zg}7I@XQb@UiH_CH^#ug(I%+k&KC+@bQcP6MPm878nL_faU)DsDqF?k$Hy$FokJH-ALNXgHkb_j0V zSe=7RG}W$8V|Km=OhkV>Tf|HpGH5Cap93Db%voJb{UuSx@`Tj5VF>w(7W<^>d*_#4 z6B%Mm_0!lHaI8B<6fTtWVKX`40Uu7uX*TxwlS$zme0Zq#P-)Ts~?ly4w({ za9XBB3C(46JIc=mkzwD9L2?$6oQtYK!ZZ_MB5vB6C`yD>yoG3tq ztO5kO6^okht6p=ac_i5y&6IdNU*3bh%c8vVzs{z6m>-6Zs;8!7FTHOkF}`AYqTo~7+N*R<2neZFHir3T zmXzUt6$>oa2a-Ud;af;;%LF(;a6=Vw-V^hY^F1^g5IodP!TZQgIC)2I>9g=)ksAgX zb+tl@6>eP)4z_j(2Q#f@9yW0;GVm5d;Z~?#cmNR#DUjW&N%}E9wXNQIZy}1hmlyOr zJt=UB7A>1e(g6K7W_5mzKwd14^|+$80U0Hby7dA{Zt@TWxoj1~;(d(zPtzAZAl5rYQ;?nhhGIa8IZY3@Lf%v-yX#U8 zjt=myA+JXDjuUIheb+B@vh!T7pED@6HZ{i)qkvWc=Z*WpxjE8nO}NDO(mf zu|;JwmsWHc@BN$E+3<&1-cat$8)ZagM#82I4&=aplRY8hz`bL^^JqKFRBlj{*Mx6T zFZFTkU2?t%&FAW)QWe>0^c8r8d7$*n6gI}a_Ii#$K2*ZWsps~Fkydieynd)YVqv~B z9`502>X157oIwH?vn{SC7l}TtppN|l>H88w^H$2+b-{6w_PXShhTcxJ2@@;UZ+Vw( z?=BV&*=vMC`^hMDmvJ?kQ?75F;>Lnh+&bh?nTxKwbVWaKJq}q&|6UiYjQr@8pEBKD zf>MH=rsU)y#ro$|!4{dDyqg~l}f=t1K>jP_rN>}dCXUaif_~|o3+a+UHQCoi>S*eqz^Pad5Qb)x29M1==jLCRWoddr z{{MgkvHbrbK?Lmo2bpQB+HbedfYNnB-4!l%6==jw5(q`O4w=AVqmA0MK}}ME4T*#j z)b#c7^h(-h;|&m#H#*DwY;f(@RU=+u<7S4!=k#ngGhIwOMe)_n3+nE!sjL%Qa-ADP zDa$#Po401YiDJE2|KXBSeO}>Rcc`k1LsyKcv6Ix~S!*TV&v)r(>=zexa9tZ;xLwTU zqRP8ZU|(@HQB^DFv5xPqO|6L&{})maP?G& zy96rK&_LDUci0nM$O})S=bz2(th4+k7IIsfke4-XdG|Ke_9-6tC+$&N-seLnfvX9KNdd*y~K-MPo$fkz*t zgzhIx+G5y_UjbSANZBWpN(;mpQ;WtJrERz+U|d1j&YtdYP3%q9nLrf41eS`N1K~6ep(mkg=|a3*|Px4lEZz4@kTT7(5oT zlkaQBj@CtrP*q9FnMovAbB=8;yw)s&svg90I6fXJO{jv zd_WF(23PC@0kZ|F3oKMP4N?X5E@ibV&Pj}Utgw4s2>M=EB*Zu9+XQYNPjPG`Nh}B% zzMVehX-mGoRL2Mm2O-Q3;gia4$PzOMc@gu%9P$%lUxvs~WM5?JAv#t;woktKR3tpC zq?qe1^1k_LQoNjdT2zu;b}14cyVUzu+1!bktdE__p>v^89(Ky>7R8ZsAq6#*m&(od z9djP}6DK}~{{+~lrC$~~ZO^gfWUc2y{%lh2E6>^3iR37sJlCD)f^r@??}O*U#EGPJ z9(m3?&)L+8B)xC0%k@LDQ(mdcD^Kyl31yDX&D7WZHa)IAvfjc)qq@$9XfyDL0y zZd(Q0D*D?}cHM;UmNMU`yTM~3_z!@WU4_yAAQ#sEA{P};hhKDA-pESX#r8j$ICgf< z{|n-f8nOtg^%ivp0$(q+Yu4nS1F&)wE>ZJms&AfP-ged{QjG}BR($Me75BGl)-E}=!{`h>4`3C?-OEWQo=Pd_(SB;K;zh94F`=o>OM2FQyUWs#H@1+Zagz%aIaW zBVmFoZHfRX3PSvDDlt!h#Qp3)o(VgZdWd8(jgFh;co(6$Sy(Iu4gbgXuCSTk2P&ON zB6WR6W#$_V0peA;HBuL=6t`Z$D`Xm^rI-w!ypv7$}!AYXCF$ttN#gG0M9?R zj+{e;kD81&WP0v~-8!?eTctl&#`C0ninlW1<>cv)TL9EYGE82y=aa<`uKREm9XuK` z(1YDY#T$D^gN?iGJ6SJ);8VP&mGR4 zAHC)7Wz}tO8Exk(*5i%kdQW?H!#A5Oy1rSOY>~`v%4*2Zkr7U<^#n zj^FYG>Uik|rpDG6PzXjLUSYrhaSuq&X0`*BHGx~2}r{` z)VnkRPypiwJkJOy_u+>C-ixvI^`EA33}6p#E`~%nyiMH$ zVFKL%{)Yx$CNT+wViWkcH^}q{>M!_bH#-2DSn5ym2lq#uQ0ia)q!<~QKDHJy0(R+m z&c3MyEC_}8cvBY_*CKF?K$#y1mIgO~-Xm;IY)vg}%wEvX^>#!7Aq_}_N3mObFF3O2 z)RtJdKX9ol{t71Vg;Se!(ZMpJ{cLOk@rA(q_+OEl8^E&vTDD`(YLmWzfI0(szQN2= z36vZ8CDOUpnaTrcuCfCbjQqp9G7x_1Gk|dcaen=yIy^Q2e{lg$t&I8~#XVKowRiL6 zQu(LsVY+y1eh1^<=q~|!Y3AKc_=51@1ZIR?iyM%~``6ZkUPK~j=)R?eAw&ZhmR1nL zZ{@FP7?uy{UfiDUVrqf#H(75QfMb5XAI}Bvq%=wlldEU>*SwQSl6=B^ihRiz^n;&Q z5s|(c0C+GrGXP*}aOQv`_yospUXL$#Oi|*=-pyC_8kR8_nBBL^%~sp@yx5!{G=S-y zK|$!(8?F0Y_GKVImY)cnw2a{O!>j0{AI)?BlFuK?&p4_d_Jp6CFp})5>K~WI&$FMO zwip|l>g{hh59I2kgH3?3z?~6*$6jI90DstOoVlfi@ne7QV%(U2V1gJXc3*k6O)l|u zE})rIT3neLpT()Ymsb8V8O@{+We{$4p9fli3|+X>Klj}+spDy_m4kb-iT)h{_DK&r z(ow-OeI@>XFsQ-F`^NtL8-u;Oir+y1?+ZS%MUxGz@sGmj8-f7h?kNWNcj^f^)%P6X zpG`py9w7M&znB*h{U$5=Lm&r`bm@=4jvXL*gg*plp!5a5zX!yC`4!v-C^PayfCrE? z?vF5{$q@vF7pGb2_Vzw-`^@W^#i(dPy1c|JTf{ky#fUB zu0E7CeXoBTle*lyt9_&Y4Z4HX^o{Ow@$VS_l}$tDr{a@sTxQpQ#V^{o^YrJ)43uI0 z`@m0o^;!0A*I&`w+nZti3%bX#{s-O1dTUSrwmRT|pZjeksu22B|C*gh?kC7z_h zvfr!u{mkk7g8Y$|Ba?f6wr4-j1O6##{^|GE+Y$InJqO}wh-Nc@Zt=uh_f(^m-WO_U zez}Np6#GlXg2jP;u$6+Nw25p~xcsnwVDAm}(={E@I%Znuizb@K6_#kV#UFbVr;5*# z2WuQf=AaF|IbQbYzljgwW&*9MKnr$&8O3U$ z7by60V@^m}!G4lst~41C%^kP+d+=L_51Jv{F056iEXqmLo# z*AoV_l&Py6a2*cMkj)QrOA4mn%dZ6 z*p4R-DaBdOMOV~Abv?Pix>&?NuF{=*0@4HKIMR>tC(Fw_Inb<Z6}JS>WI_nX#? zDN)=1fUC-aqcG*tukABKp>`xrh}k?$?>#N0Fi1+6Zp@=vt6&|u zH>OOq%?D?Wv0eLsjQ|O8zSsV{zv-f+MxGz#0;t@{Q*R52f)TSVa{@i~u~mPbK6g-% zNI-$}SNG^-U5qi1@hhO(m$6zzh^febKQpv$D!d&J?NQPClh|P(SfhR%z(3?HXs=iG z7rS;t9pdA{HJJY5g)NjDE8^wMf?6^8tW#Ry5X?3h_8gu5l?a5Y!oB_Q`T}9wIjK;) zXb@Q&1#bnlL-dk227oU%0)^s2gKD9jc4w)wS)K*aklxHNrqYUTpgB5()pF6dulXPl z(E`z_jg8GrCa~U^Qos+=^}WId5cl}P#;0Vt#5-&bSkmR7R0@3irZRo?Q_wWeg}aG> za%Biaco`0H#66D#xsgnl)Hzw;%M_&C&|@=IHMtQoqsSRKqM-_bgOw|z9N*6#^>r>$ zEFIMHeK70NA0j+_Z9gx61m_hm$0h$y{uo)VFxFU~_Cw(N;QM47!-V+~l~{Uc?oC17 zC;=aLs*r-Kw?qGk!wNy-M|qrkoIB3+l+-lBkbWq03QWGlR7PjKqyvdar%qXjl80LN zdtl1z=<`ToLOdBv_r)7?gl4)l&z`d0n>L)yj1~6v$)Y+q?TmUO@G2FY&)&s(Mdcz0 z_#F&rZChe&T>^|)gP{x3W^J1;>f5@eSwsyV=XXa^kcNop@qvt`)nh}NqYpq`WKG|-OhuBJ1NC;cw(oP{Ib@~% zDhW=WXH40p()B~PPAZ!7n?zG1_z9NXK-IM_`)-bJ>b3zDCicHl?XnPp4>bhWDzC1q1Ws znL_C?9S*vlZZvd25hMxF!S^SEI8^9#%cL-3ODZavNVjjIJmDPqVHHMg7yt0IO7Uxs z@h{DI*--xlR_Li080X5GS~KX^SV47DfQ=u=#ou^@V6~V6QQtjQU!%cRW}^2AetR`Y z_X1f>LhePIHF4X{G29j_rM`b37i-ZLmUhr{tAXTc9qWqANw)4UKl0ZX#3akdq(4RSbPMTCfp=|kvpa8&hRRf zp#^r`R@?3;WwDi}Q>^!DWsETiL{B2{h$5U4SZF_pBtLgLCY{H05=2$b&Q7O6{lilf ze4^yDdHqX0Bm|xYsKfQl7gKZ9JWz_@v8zL(DGVZiHJ8g4=CNU-FOd|_cP3-UYCeOB z%Z=DgP&-=0gkQxn%LweiFN@|er1k>Wg|H@YCcVV#6g>O8az|=ib*v()c6A1D{UxH0 z@SS5bP4pAM8$bFre8hwNGCI8vLYT`M-se^O@4}VMpTKxbICAWsrObkahY;@E4T@Aj z*A)u0JU2|}yU~TKZ;8hW3(gKdW9=OSzPOYHM37!6QnpK9SJ$4m?3MXBN)(evDNwP{ zDOc%tHM{Eu&HaFb>s^9}D*2AQmC!Mg6?_wtYZd1|_`Sm|l^>#-iyB$#Ze}!C@@gVA z@od*=GbGb67j`^5*!9%)yDD)Wz!M&9S4+@X(PB^lj&Se#a!$B1g$n`{*Y!EK4yc~q zZ(WTc4H?%SUW)iL(pL!sP)^do*+;`0gGVIo9u!5UwEAWHp(oRjYyvCUcJYLHhy|o5 z=X7tT2yU?`;t!|=A)$`p*}(_CYUI_<<W0l<>(^>ENG+dKxJG`8DAy<^d1`J zGN}-$&`EL-BN?x{1rb|cyw?Ltpv;;!@ey`^(zw=ZWV5JaX$Is_i!pC(L;V@g>wf35 zMyyVfxeNdt>3jL3z}Ggk5F_Fp^?0vwC5g!H*2&k?HXGLmU7fqRW;Rm9Cv}b?YVov} zgZeqhMwryBM3M_T_8E8|%ZSh&ZFU2h>;?=vXKqG4&iNcW+IU_a$lIL7k2d%fIR&C1 z?TVEK-F&e0Ud~tlblg7SRf7bFFITSaye=>X|N6+7DrZ&q&Km7ch6KS9@$2iDEFF^z zpY_OWK@^-UC*~dPDGU06hZG>_r7}`2!ioF20}U%G5kKuISjKNrJ`*mT5-cX~DEit1 z2d;k`^80~cXqJ3J-&9oyiT1vQeUHUm7k3~`H9%LESH{*D{`!V;`)c%J1Y(rQ!s3MR z{y8Qr4P|YH@$Z5)!(N*P@T93qpXnli8uiuY&ildv@S>J7*y|wJ+85PCvpBQ$ZbiWI z5G2ieYM_kw^x@5ntdNGzCv9|F^=bqHkpS;(2ICsEp%UuvMtsDyS1#3A$QP2 zc4n+YDfm9caFPO4kY{;&ydpXB5+P611yiE_e(R9~lvk6mgi&?ZT}x!Neq|>A%U70} zTozvbPPSzPoAA&NcK<8N+ikL>TD##ZSZ#U3+?_fA!URAnOL0E`LZ!tk~M(Qu9MP?a>VFavI}nM4_Eh3f^myT$>8KzI1Vi5_R3>N!Ho2)s;1g z_mg#m9SR@T9dmn8E=**mzOzg!;SGCkEHzo0xJej(;p~7_QXel~wMm1-Q(i_P+4j3_ z7B}CD~TjebYw}W;0W1$mhs-X<%^xLRGLkN z4ES>_sU^+PP>Aq%Z0V9(K+1)4^w@)H4lwePrA9aB^bL|a4XGE3IAG3%?Df2dWcWWZ zemx{pC_G*{nTk1Z>{cnQNv@D~PWs{7jlh;MFg5hw)z3SY+9Fk&2cG?{LX>vs9LBihWYm zs8{*198xFhO+>FSQw($#h5i`dGS+nTQB0PqO=R-)Bq{E7rtB0z-T+@}yeo`(I7l z`IMV*`=2mhTtU-h5_}w}JeF>rvT8hAar60CH6U?~I#RzN5K0YGarUvTN3@h0ywOz` z@@_>_I?i~IW9XCkM`8h3dan*oENH1GkZRX~cQJ!VFTQnQqRYY332@~WqKIHcPoJ=ouCPNGp)W20+|X5QE03cD~9V1ZmNxb_RWR>rtfNtS}?GWzC&`rzP^_HSdfHM9Qqi+4%Kp$bf#!dYOTBsD;di*7pgHH_Z7 z>&gjjnO-7k;N(?TOuRjjwmZ#tgvU{pM`iolGd8~?VF+8Z)zj|fnyt<45TtjK+5!<4 z5s9V@{Xi{ZxkJIafC)MnznV(CBA?rpuO>G<>0zouBz3em+uiBO%p00z#vixm4wAfK z|0H^6e0B7j91pjoCcCldto4eLX(m4A8^vwN%oqaMWr`>Z|NfP;lA2!tw3JQ>f85;xzI#?Nc=FaibIp}0(XsQ@j= z4~OzIkg9D~gqD18IR{@2 z-7!8jd^wRYtMrN6yg+Ku%*yiO(md}8YawT&H2Z>bxF+8?E<{J;uEO3tZ^S0%`6=P^ zm^K!rM*!1|CA-9S{U2{v?XH`Xc1c~Yj8?mpixA5LQ~gEB!KupwnXle_*0={j+XaW1 zVqtB7jr&x|cJpCM$CRBq#JOfcIST;QD=va$S!?fF%%Bl;GWS*O3xmXcn4QjJ8@LHr zv83gNl2~O9$E>>m0&!fY{nCU9otHy??Ckuj~2R3bN?rfd-ycNFq((7 zNjob!X%o(Y`7`zIn{*-5f#SwfBXhHTFDx-&>x;&1g=qNRhoD>O}LTv@CP;-UooMFMfwNyNpazO@FGKt5QU5s+R>olB=# z@i7k?iU|C0cf6O7xzkJ7!+Vl!A``n0j%nQ+-IqA++~&fwoB6=7joHArwH7{2&V+BL zT1zMWCfQ6Z`F!)`JY2+3jlD-9F}iHzUNZDwHGsQ;Sp0wZjL9Q&#tU|A*eS>GY}z*8 z`|}xePF|tv>w`xLk%Q2mbA?pOMn#hKS4Mmo`n3pu8{cMFv-@iJ31(rnGRe-Gm!V>W zTgp^A28(7U7lYb@iB@!NkcF?*)&EFGtC8q#I=8dktgY+K)_(qTNzF@hUEzc7gA4ML z5H97;cYn>DI~pa?Xq?RdXfF4CkIn`umC3L}jtdhz;XDlm9y8=pH8!*eOS&T7&+ycx zd(B}O6&nJ%ao%#Lr8kWMa-8d~3afYl3&ndFaO?8&)lqbxWjQz8RdN#`gj3u}7sOZO zQK+Z_ZI<4u9Y7AB8wACAX_J?*!89Q+1G~q|pD}>}1qf>%PSy>RY%ite2gj8H&B_Va zet&e$>+$YCv57F*U7-ojKi`OALdw=GLbL3 zbvL%)YpZ5SO^xgIeqDRF>-#)T(N#!Nt)&j@)}V4_VYj_zQtfr#l0$>|&i$6XI-L0U zvK7?X;z;XbwAKGsjY6Ryd(d@u3}rxH4-D6+W8z1yJZRLh|GDuF&-t}U((^22_8v^# zOD&N9Wz+ZPmPWx%tGcl+a>g(*Y z>3c&QXk0-@$t^A48h#a^O81u7TQj?)VWhqZ%j*Gbi8vpv<>y~3t8@?`!E=zYwN({)&ZJ= zBp}l|imy3gnfahv{^I$G?HY!(8NirF?P-hxxrrJ%0byUBau=RNIw3YXTkjwPB+Lm_ zTY4t)d|v6N>rvyiEL&F%)Rbkend9o!vx51efV1nylGB~-2+7Cd&XM1TTi(~|gHZT3> zfnQ~3{=BkJh5-RQP^T;REJ3LG2z$7GM3m59eVfRVP?TyA;9{$@#C~R7i`*6Q;sjS- zPp^rM1E$cCqziUIhnpDq?-CR5U^(l-`MWR>X{f@o**wQ@{ zEYuXry-%{)^FVIJBI!f=Xb``#vbM`jCx**Lsswv5mgX3IhnfyGUIA(x8QvN^uICl6FM(UBzcLD z$&J7Ik>{0+jAs!$xeLia)~>1QZ_8Y)o{;%p=xHFbr*;&p)(CQk+Nq){93DY8KwSO; zVyR|{uCvcYKMXtSycW9aE9`Xhr=j7x1#jO8KnQz4+J3F_(Wq#My{JWTl=4>k^VLUs zefkJ8p~iVr|K2A~0lE~~gLJtDZCaMEdpqdy$y0D;(od=AqPSZfS zKy*W^N%<9*Y|Gy0Qb2#f?pFsV99ZRb`P~ou!7mDFr$q`7K}>>A3L`P_#QA=fWrC0S zu0<=0-kc{D^shj+?5uLB3REUmR4WB`HOMKhRReMSXbJ~5CeJt77Xs-=xY*Nq>TBTl zBALsBl{;xR1;#BndYZ76g+iLCht?<-&T4@FgpZ}oSvX_F(o|HQ5{XWEXJPq6}8By{fjBZCtj-CsNbRZyeB!=_ItF^=BQxV zPK4nl=Eb?;ZKfe`2(5?kQp&0js!R)srT}3T!xi%hS|saIrNM7biwf4pAjo8Qi=|ow z?7WwDCjAsqHwp1m3QJ+f3~vv4m$5lYKQz4#o7+Dw9+B1W+mWf>Q-oSW#YxInr9P7v zsYlIm4q}xb(-k3v_V{SkL3cyGWBSuaR7R*LORgLjb=+LKyqdZHu6layv3B0#gMRbC}Tcf>cbJEsG)(;UG>tQr&{R8_Xn$y!f zm@dvKLlk$RV9E>930N*KmQ5tL`AkxtWBu>!oc-Bdv+`3*-n=Wz@iN@cs=re*8bMy~ zI?GlN2lPmMoLArw7`<7a3B za&m1|8Rg&PKzL4Ehht-q98I2~TW+}>dEHf0*jThIjBqdETAq~#IP7befM|k%2+>NR zbBje6-y#@;&PhM+Lj#}K05~@}E?v(XBk(#uzpva8-c#QL`%&uf!OEiRt! zQt)$Y$VuQPMr*v+=3AD<&hyl(-^I^@-8r7kQndAF7UChx+{?&%(XDEx?~`fHai&P$ zKsk+V22kmZ|LVL%^C$${?y9)@SffuyaUkA)HroUQEFG312E82t=q9U#5AOggI%Pxd zq8oa11CN<}ZgyIKXXLx3_}eQT+(y-9Qjj5`%g5U~>IC#q2c1v(zG0{R;C&%li2Wk2 z15t44ds3LWg8QEPw%Dx~u1Hf`E^jM&enfPCj4_^|%B>hYRX@|*cdMvsi$Dp|P|5Ld zcQIUu9T0m{m*8FIUr#-3jG-phnYful{!@qQ38$YLU|Y`y#J-t47yCN}l?&Xm+1?&U z!aHm_$5R&tVbgCs(hn-wNiVvvJOvZri@)f7Q>*|xVwEV`5Yc#T+Mt{}j}BIJGAlUd zgL5Q0(pAABrlE5<2H46lj>SB4LIq4diqCH6Jt)KCkU+G-7Z=1{`;2p=qY&*YI@me|K{MdP z1^)P(8iypq#!1-VXltm4{r72RG;^a8xJPKYe)}8jq#NNfU`MXDvWl3D-%YKuDtc*N zXJ*#ED`LBaAk|HYB-oU)Az=B?6Di=HO_xDzKa$Klt1^CFsFqzI)8uT5zf zgzvnMb;{}mZ9q(aXA=hrO$;lWxNc#tMJ+U-7RUF;D#v7y}MxZWzs~Er=eqo z$tlrroK8cGXeRI50kgKoKe!ajgs6S`C)}AU>#qm{vg7X&jrJxG(tijZFYw6StSW=9 zL{x1M&Fxg&#O#Xtn0sS`oreAe5!o;5deQ6yushG1o+^*%OnKh4)sOgC|69UEKK~@A zd}qDcd2qm~RX!M;-4(hK8YeM;c@#9QRI5nDw9kRUr9e%?yeR?>Z{OQbid!*tX<1hj zAJG&UfCM}j7?tQ`Jb$5Ps$8Uq?Nf=0JzBXPiWY0tqqTP)aY!wbSSiwPOkRG&bmnHZ zl=xZ`FGP6M5wyhmD+cEAhnaQ%V!se!h1U|%fo^~SlAb^m57vPob{YNnIoZ7y*Pb|T z&2?I_Z70my7|pwk+137R9w(Y{#+Qib7g`YXR_ozWtcjeCBz#&Y< zj3>&`X!X-z_UnDu?Z{i5qyxhj?ZHw-lLTJ7+aZ%Lrew%JqlkCXmOTjaUOu<#o5L$I z0CyrgPsn%zjqA_M($9qO!x{Z1tvUCIE_QyUjOd~m_jgfaHMlo4A8de98lB?aG;_Y} z>*9kf9?YMRJ*yQ5nuLY~IB5p;dAoz#nmk@KU~f-NJ9;yhcD{mHy>E?0rnFrqYu+rL z*PgE=I96tHKDviZQ3G-Ns30iM$+IYaJf@uizR!{5A& zgfCgMDlpfXo@bD*-p!zM^=ptu7t2Cc{96}5(kM*(?5PwL9Rm1+iZPX&sJ3BS>_+HY zPFicZ3hZNQWeV`h)J-*C+e`rtB-3CLmDF1hELH{9^p%N{ z<{lgtvDx=Inx0JTM8c()utduf-UD2ZFiV=k^pBsQBNfisORGt0zmDu(IVljkX0n~d zhR25RQ^H3sWH8cE=T^$H%d$9rEtNv@llAN-8YvlllW@+DKOfqU`8oXX?ZLd`{!R-_ zhMcKs+XxmQ&_rSJs6Tq;E6lcIDtdqtXV5*dT8hP9Dls6=eu_e~-c39X?fK&fH%)yTp-Zb;BxOvi5a$xnfB35YkQ6*l2o9oi;V}G6iz=B5L55oF zCVA(s>{s1XHMNaei3Aaj%!kT9jH&m1>!?*2MG)JX{$640TglF@L`z|j;npi-CZFay z>JERSUOY4|(pn05FB%hwe|FRze3si_K2@@=^XK-%n~ zy=3YcXHt5K=DcvvB7;+y?ptv{2b^|Tf)}lOTjNzwlELx@Y}qrTk`D2MeWeC5cuh8# z(G&6Ct|5##2AY58k_WHLKS_=mjD`)@=GHc4BHmw&hu()f;!c%Hix|NdV)(SO_<0M` z4?Oa8g}2*PFbYJ5v&jv*Q%NH8AVUGcmGmdSew@ZXGKQKP@9L%y5_aaCPY}aY_n?f0O>zirO!~?l zN5@$|{PTn2RXMXkc2;PEt{f*!>&kKRSQ%jne=2!XDWW6o_(k|68`k3G4ZnwW zO%1b&52vryzaYHyfZ^Ap;@nzEu|B<9CcL?xNj?=^eUc*@ucg=Af^YO;3H`Di?w=YP zzpbM^7?y@Qwp?CMvCNxd7Kl{mYeJx{)3n_Eyd4(uw(7BTVSmI>#-TqvG%p^$zNc53 zy->PyNqUH5Xa-sZSdm`wa?P&Alo53W^URD)!I={Xuqsl}Bqd^h;e@jfqBhst1*D{WGn=;6+U^p!u}aFAuK{OATH zW~ldV!LV~ju9qdxTNi9esyt$8N~AUn-x__ zifRdCNix}0Y>Ulf0-Bo$T3p(09I+dK5EI*x%P1S-ZH!v=%BBY1VlyFgm?7mNuC}wPf3~EhYC7?{jVEN2p(qKKi@dp7=R|S?w+KY6`W21f)m4NC z6ybIhOyGkPsQA_H0D6i-AAda0{L6*1%X!-~?pJftzqR{n0Of)u7B8h&%r*KByK2SG z<;&=!Y*B!s;o`^=f1(xJC>ja@@nbCQtnRbmpLNPMgdhA;%kj}#1*Y?~O&RV{g!a!N z09@6b=Qf?&_D{E&Qqe(krU zr$xD?+%W)quCxp;b)3!%jS`->5bX+I`kXJ`#6wtkT^7U7VN{cY+J>%GWPSb?x$2Uc zcQ?#0PNWPKn&&S}DTgym z3CSe|20}6OT+nbELt$wZpgI9))hxFU04cgy@Ik}}AITg$0-!WS z&t8Du^$FYVJ4c}irH>SW{7^agrGK{)%x#l_tn9zi#BPyCJ!~h z@@-l55`qN_S@5d4(`dc3?JUSqTicva#jQmP+;Ye%%L)%d$%q!$HV&Oj(&#ZTLK0Tr zy7?7F?0R^7-8~zE=Yqg@S+@jtCj9`hZwasxV^iFApwl``+Nz~Uau9oyrz$$*-0g+4 z@mu%^X_iK0YgKR_%`4sUD0D0&S=#EgkMt<6Qs`Qfq=15*8!5Q?Z4hTSQV@-&vWic0 zjKRLli0UDVEb=$P@P<0*^hD+=7FX3OMPb|7hDFSBJwX}wBrLf7w3`TvQH)(8 z7bZKyy@}bg$7N6aY+`L2nX^Zad(ulHaAXlst;$ad=v{4nJ;!m&c0d!7)UPOK_37US zHb3qm?Ak#_Bam+GCeCOKE79?vH}&{^$8{u`Xr?*b)63*tsRdQ zC%?B)$#y#l4U7@A&CC&i+*0Um%IxsqI4DqOojGWY+@P1_ zQ;4xn4@RMAQwMjXnkfoKpd)}ewu2`)QoO(~k zJD)@&bk)9YI31tM<9xA+uU=%CWNC}t%l8aN7dnTc{Y~55fqIZk0D0isU#lFMDRWWT z%rz@3;f~N@=f|e~{UQ7??5mhTInN*omEx9~3wj8%@VM%`Lmdu{D!6>l0y4n-4X4@q? zK6&Wg@n@{iI7@yLmyq5N6M#u>YiOgo{hC1bU!!tqm1_vHSrJP8oYY*+@5zVO=dZHW zQ%8m6p-Cn$4+8p>P0V+2Zr~D3{4AcEZpl`xrzNkGAZH3zBMrGBQW$0V-I@Z^b>rV3 zkAZn`O0xXD>n{@~vLbnr)`PKctA*L0RU19gV!XWFPuA1ekDKrO&I zmpV@tZI8Jn{TiLuh>5uN&U3sxF=9F!r)c(9Z<1Ts18o%D+!Q$(PLHkkyrN!G!0Cwi zMMUbj{p|S+=?4a3n;ofdR6$`koabGigaqh3ja*y8EBu}7&`hvq09RD4-kb(7&86*& zK(|;nFP=KGxQfv>Xcl-eQ|my2+D+N2=Jvnhd!l#|8PoNGo+8T~^d{5}2Za5WQ=xpE zCk2LgAC1MMpk4A-C%=5C(uFTTdAAwVUf^2v*$#x}b3yLDK)~E@85Hu?L~7NN5r&Q1 z`k9N-2^X2L+iCzV+PnLs8|kuj8m@nWDWas}fy7)GBa(-yqE~5_q|2d7C37a8R|l&% zU%O*t$5Y0TRGt|rkxMpQBG)+@$79j7#=qE)3W(nbb8xhg|(4W45w*Ch`ZbVq|(6 zG&i$4DoQsWLaf_-LXwdNtEwWP!_=Z8@zWG|z^3T5ORG}s;(-j7FxYLPVcSHE&__Jh zEBo$qtvVO^Y44=3y?r+MO5z>j3dk~T^QnPL5DsQ5QBpF$U@Tzj8ly5$ten^$&IlkI z37c@HZWi=z`LwFHNR<5Em@`se4wO3#^X`Pk7F_yB+&>$lycY8>9nIv^QLuh>(#xBK zTiw!yaoeyezKNw8mR%P=-N8B7g!xf!c#AfTtJisM!MOgj#4C|T=Tb?@JM_FVx8ec6 z6cKi9}CUB zq1XzfCRmEnrK!t_#(fP$` zRE_oOD^(&U)|u0hfgavpDC+_M9#liAO+&~pOjuwg3`H`rW&|*j%ACbn(s^tR*0Dq= zqqT7EwhhFrBB<{W=2eu_o`8I=CNLZBz?dbOn4GOZw4x!?Scc!;q*q^N-!{oTZ9LG$ z^5)ZV_e8IKfMmm?1^%5W@m_&Cn||m&SlMl3o_Q7hjmkmQhts~yI5bq#@8Mx%J<1`gpzP_MF6A3`qg-T#;X`|$RSaw|CwE z1+*bl6-Z)ST4D1JWq)-+0==1D=zJ_e#rkOyBegP4gKV%EpS8P1+6nW9rg(WF30}l5)G1ar|&($(3LrO{*l4*i6p8d2X$6yxs(_+WqzM926a-PE_b#Gzlp-CZ z2%?}g0R%v*x$ftaoO;lbNhIef`^3bWe*PIni3# zCQy3GvO7<4k`m~CejzKuwnqFYt5rm>;QZADo59>3_U_}Xo=(n6iDYdGp)k9MnoXx; zm21~Ew^oxHBMJh=v{VI(s*J4f2tA0%0nZv5p9q%XPT2>W4|hBt6$jIOo?ORA-tj!x zV^U3x?@D>^W&-It9?@2C@y5+9Ua3hpOa^s+QR$3LS%R1zi%JpOP2kSw0z9Adjj3vn z+E3E%$r^}K;A=+>mvju`5!|~wFkd_CRKA>`Z26WWucPAnop<`5-$5NvibLbhB=oY` ziTr2re1h#$*eJz4mWiH7w?|`0r>6u&UCtyHY~QS>gG*@v0;cljz?o%b&g;#MMR)3wM9cyQ^Or{#FWpUfveHOj_%1}dtLSAs zaWv`nm;z5ZY2@|iYboqA+5%gvXYcI$3f?yCt5Oam%o;krd6FTW&O0vx!GCT2sWoZ5 zctb;jbYgCrP^@Pet<#q&*=F6?oRjm<>aK={mt(YQ?#$)(%YxS~esJ`J*vtxuThg8P ze<;_dnw0wxocH2EcazTJ_O(Js6fs`e>(vfZiR61+cN|jbm-;pKQm;vTHC_?Ov*y_H zzMDaq_~o*C<>imd;<&p>-meC|^Po>+gN^f6Oq{eeMU{rrs2V&5Hx>MhwRcm#*741& zWRE>r4y$H?bV`rXar32nH^8~0&zkMpQMSgfJDhLrrLkoJ@r`qHP?_7F0}eoVzpK~7HDNS1mUpPI-^wh2Yp7%o=X_~O2 zvm#Hg({XQw+4;^I6Q4b}uL?Rjl%k!e+3VfY!85SCU&@X$vtK;U-hKTPc)CI^nQ3wL?D*xed6`mIR&{zeebNhI&}iAZ`VIJ(|Rw*GcjE&C#Nk7imbly*@@Oq z@>4KqLiD|#)7y&sy~rngWZE|$B3FbWlM(h^>(VQu9-r#1a?a^0aX3K}R2uI0oO&xZ zkh}U}|CVj`d9j-VbQ-#$WXcN4E~8D<TPNC1u_sO2M~hIF(70#m+KI1C2)~UJiscs*Rv@%Fc46_k z^1|K8)~`B_8@C_#nz=6-lAJi>>BRE-a!2Om1HOfYn2^qA3)?FpEMHr4`YkXy10Q=l z>R?oCFZ4tvHlI>HBeHO!rxisZ_{sB}+n4Ul1xB$9(o3t}lJj3cy3WS6mPtAFT)o3YJk>jYOfQ1Qj zU*=n{+l(`wRd4FN%HKuh|6x<}tuC5RaZUwP?5HJ+Bl^-QHzUO7)b zektOc@w&dXXRIa-$JT{}duc^_+d@5Bd?Cf9o{b&3Sp=Kr#y6P0Chjq1{Xt8dR?T4H zM69E%@R1V~wUf?vPoHtvnP5TWmMSSARX&ASB z)~eTuCbParm!ruo>iz0ZLK5a04z9z3~LMA71jxc;p<$h0jKeEu_o}Y+&Vc$9CQ)kB?FJUk+o~nBrx!J1M z-x`m;^H=p&-*CmNpy=mHJK%8s^v3URekm;fpZ!u8ILSidr{Dkn(~~S#YJ^7IO0TCP zdGvC4Sa)}pH@JU3$-;xbz+>B)1~|#WZFgac-Z}B>RP~c-yHUEu8~G6q9ZC0DUH165 z2W8twkFBUp!!jCJ*hK=(7(3AjozWd0&zZs(W@VI(q0*sz?fJA9Do$8+W*6|YPSv_8 z*!1}i^^A@i$JX;U8;@BT@3*yaFHSLx`liY82fV%fPMatr?kRBb8Biy7pWKq$$|gxMlnbuDvHv_+;VR{mkM+XFRwM6MzUrjip2(cscD)m} z;aKf-PjNgPxNu^+yX>7mVQErr{HVmcjxck2W5lkXRVvb|Im5C0^EJ^A7wA(PzM#ai z>GxXoj75_BH|Pso=|$kKxy;i(aX3r=}O7NGUHA<=6voTKu(Z&5dh0w2XzE!`n zGOCeBH@L+^>m5VckSU_k*xujbb1gG>=HN7;HxXD!qcySeOL@H1#45WY2&`i1^{xL>zBb&4P z0Y!+$mt(;+gYVW%y$7Q{n71tI=w}_L2hOrc>yNz#oMo|szDtvJ{N4p59b8*Iz9GQ> z3veDqa34`eRs~LI`pX6VXy6cwP4`U9+Yh-ezzG(cfrI7!H%?v1{5S=iTX7+?3P^ad zsGkR90jFAEkF?lRxi_^aNUvs+|1r?OWlR~}d|}71bMlJ+$K56R#gau96nY<}j+!zi+Kr~PR z;B&y=5@0#t_C9$3W=>t0W7YG@<92Rc|oASVH#R+KLiwRs;lwW85&xe=6~E0 zs0T;5xMIMv(lTIiGhZjn;rSc-p4jHZzcpw9N_a2=OYMo@Rfi{2jv4s`2klHLclOM6as^bfHAIcumuu< zfy2ON7~tAMG*}Dn1@XanV!MEH25TeXJ}!YGU-R_bc)-A}5I;B=f%Jo;F$fo+CD>uxUMQ@D5D*Wr zGr*h=9Oer}AYH%^j3)~15K5DtJX$_s<=1laRJc)>jYT>=AAL!z-_Iusrl z3C94+;tsTn0z&~9fvzBefLeZ$30AUzFaXftXfd$4D*^xk;sx{p21i4E5Ke%Uu;Ous zL(m8(ga-l>c&Ma6&#){bAwB@_DCl96fW86%L6Cp4_G7c(krzD_*LNO%(zZh#JLDu# z3~U5+2m;{fgL3hKcmnNw?=K?gTjxB1`#^zCyMO_9ebHF;Kpld9$Qz(k7(m&OU_djz zclu9|zN3PrKh$Mx9p72|Np@mj9bX@ye~TwD+R%qu4!{G*7!V&&>`!qAej9>Vkpql_(x9x zvw;CSL;O%ahb>}aN3pvCC4d9K{Rp6lj69a<}ULCX6*VJ@4ZEB*UZ=?;FN)YIn z9w0>&E)@vm31}bIT3esB0TcCsa6u#>LXac~1c9QxjLme+u{YZ4Yiokh0MQS(+X8iL zkAi>@1R4_6I}HZ^koTWNsi9sz7!U~OG(aqkRc9c61&Dk2W4y5G>p+~&$sHTV#mB~d z00x0L6E^PhEiQ6M^DTZ78;5x!VE_%5XD^s13>$9);*oy7a3GFn1jNJr5O9AWJ`BWp zJbXP7K>QOBr}G2`5eS5T44aODLtTNm1Q0*wV{WPm#8p5b;$tp9#GQVKW8eV*pCFJX z$}7<4P>Tehf?!ESMFp@P+#fIy7}3)Zs5`_52F5-&A;>@w=v$w$r9d=TY{3A?a*~R2 za-vdV0Q`S`{$=K$RR21HmF+i*4`&W#hQrYFSK41?|4KvUfItdc05;eEN^?pBfoiXU zKujk5Z-DJ2%nY=glC%xN%G7W5GG1k?d~26_$}0ZoEtL2p3IpmoqTXb+g#5#f;I(Bd%TaNzLb2;)fMDB!5! zXyX{+nBttpal~=KLE`x0T)?@E6OEIIla7;(laEu5Q;+imryFMgX98yq=N--_&Mqz< z?lD|CTsB-jTyb0lTyaG&9h;LhSM<8I-B z@W}8O@Hp{A@f7eh@l5b+@SO2{@Ivse;icf^;FaJt;C12+;mzW$;C;p?#HYmvG+W}-o&H$h9J90mP%Ge z)QJ&}Z;qh-au^7-iUHWMfokgfm7lmM{)7 z?l2u^I>`iQy2ez>G{UsY3})75c4tmtu4SHP!DkU-Im6=5lF8D}vT~g6xbku6@oUE` zj=x~VWffvIWj)V&m$ip=i;bO4m(7bUjjfe!g`I)@B)c1X68j_ecO0}FY8(iTB#vf| zB``f$9qa*41-F6MIaxXNIDI*@Ir}*GxcIp&xWc$fxu&^ExfQsbxs$kCxYv0&c#L^2 z@D%dA;3eTz;C1D_$=k`h!^h8O#TUU>%lDR_iC>>Th`*43N`PG8gn+j|j=-=Wp`e1G zyWnlX=R&wbvO=yx8AAQSxWaP62;tkp10n<>iXupn9FZ~6W1{M!exikb+WU0l8NxHC&t#lgFqJgDVA^R$Yvy29V76_pVIFTj2^&gLFr>q1aIY zr~xlwuW+wfZzbmz*LkCQzdVB?ZulmmUsrhC2ee$>TuMD6LKnC;# z3I#?5E(YlY-8+we9(umz0_TNG7v_T1gR?_$LYzWcLb*e)guc0`d-1^~(o61_dc!2b z62m@Twz}MKh3(44EAv-%uNH<=g!_b#MJPvPMdC*yBKxAGqtc?jUV~kG8Z8l>68$9x z8uK((GB!2#AkI0iFJ3M_^E%;mGBh$uZ?WEry0vo~c6%`MWM)YgTUK<|?j6LP@oe4f znjF5Il)Hp?{q8R0TIP1%Q@EFZpXGk^{rx;--s}U@2W|QC`S}H`1@VQrg}#OFifoIX z7i$&Qm57#Pmok(_mx0QB%a+O=%SS5=D_SZQDod((t8P`(R$r^ZsR^uEuXU}Rtvg#c zP;XG*(xBW>-6+AZWsbZ+U*ve)w7 zO86@E>a8__wW{|g-}kIrufN&w**MsY`M~@k@1xAemaWrUGuxiqdpp-YF@JjSS>bc% zuGQ}1p8pr3FRA;2`wd?WzfK)^9vmF367rmOMPX2ASCki6T1*0@prLP!e>gE9Bxc10 zrVbzwD{cS*#gRt_I~&9FB7O2mqGg?r;p?HwB#Qs$B0Io4EkjmMWK(tg(c#mnPg5p%>%>Hw!vt4h?dL zD#ExafIFJQn{D8So!yz&~omH=h1%`#Vo6;#h=!K(p*wPNm5ctQr<>I{1>7h zQ2a9owS3UMcAsSE~$)7oeL6ra}zb6Ev2E6cb zfr|rg#GF;c|4RKqI6xu>f$@OamD1YR?V)EzO4<94{$O@K0;I%z=&(F`S96lH|ATB?r{=gtGWBvQq zf1vrhCC|Sv^tbcfe_QNdES3Ik+3(A!e@plGlWFYZ_V1tMKjU{Of?vS?*5v3sk5=Mk`@XIY-K`X^tIG{eGxDvIaxWFqKrIT6ecYtAu1!`Bq<6} zfGCP8Dgto`ToNuXBY8L#{JHE8Gp%p+>LY<2J;2M@KkJp(($-Lv(3Fx>RL}+{`3lm~ zI-0UliW*XiveHtDihtDkL%IL;^b$Ke{CkM7Isdpc!KNyi0Na0n#U*wLsRnfXAJTs4 z_+g$kc2}Q=?;*Xc#NkI=68qoxvOnhkTK4R}Df?souVw!#irr|ZCiT6!Uy^?mbFA|)p!A|)>ae1S9t84+1&3E(RU#DR1LX%Q(!IT2|I zNfBvD1>mbF0!S0cmjcp&dgLX5FF-4g{aY5u2forW(o)KR{%A={$Y{w+=x9kxYU$|6 z$f~PrXlqDGYD*}{%L6OsLmYqN>{qrA_beW6Q3Mu@*hThXksnh3w!pW`jMSv$ z@jdz1BHy=KnnAFe%zie5hsN<|`})%iTTS8Lnv(yT;#H~zgh|BPdmLv*lvUwq() zn;X^s=>LytzxMxd4Gp+?fSrK)z+NUFpz!x$@P}^wbBbT<`UWC)=jv%h0Ng`O`a8$J zrvF;*G_dr70J~k0&IlJ^$Kg+d@bB`zm;awxRbV6BKd~6toPV?!*i@y%E?R3L0IQ1K zN%~zw|2FG~{{EGJ_J^W}s`|HCzZUckaL9Txc^=~wEXMwhglf}D(qjD(_`#9;`G zXn9GgZ=uv-%C}G&NSBrTMk6DFEhT>#0;3-o*+2>q0x2>IvJ!_OF!F&oFz$g6uoUvr zfE~ex06h>YVnYRh5(u$vNdr~|8)93L2CNM>1j+*8VOhY|$Vkcnx!4fk76`wk$REZP zu%RNrClDUeD9QqHc`0nVJYbiA5U^e{l8Qi`*brM*Q2|?4Q2|S%sDPzWR6L|nlst@M zYg0U|4S4t+#t+M4IRV^Maw33*69KHEh@6PLhyw7wAAm+uQbbZpL{eHrQbq)@cmR>4 zya-?(0sp5IU^D@n37At^z_J2{5wM|vX;hYx(a@2RlK>uwn$nV*vYOJenvyay@(Pkt zGTI6f8o*FJ6y{G7`(Nw1*B`GD|Nim#XZAm8{GVA$huQ`>#^Bh|{ddVf=-^-3z}85> zkLrv7Ozc1G!~3zCAL#zJ9zCq%-X~D}4@3R;Cg58t;9Um1+v0z^xBn>f&4&M9g@3XA zf7Jp|?@=Sa1?~}CM{xZX0>4Fkq+LgF{T2ehMSP@PM{xZX0>4Fkq+LgF{T2ehMSP@P zM{xZX0>4Fkq+LgF{T2ehMSP@PM{xZX0>4Fkq+LgF{T2ehMSP@PM{xZX0>4Fkq+LgF z{T2ehMSP@PM{xZX0>4Fkq+LgF{T2ehMSP@PM{xZX0>4Fkq+LgF{T2ehMSP@PM{xZX z0>4Fkq+LgF{T2ehMSP@PM{xZX0>4Fkq+LgF{T2ehMSP@PM{xZX0>4H4FSU#GuLEO% zGw4;h{DI?O4kkgGhv&Rw&wBrFKiEqC+p>R_J9rGDCdOsJNx;M50^w5Q;8Eiow1GH) z15|Nwaq)2eI!Bd=n2>~k6c3*a7fawu1;W9{#RcKv5s(s+P>>Rl;N#*E5aJMlh^c94 zN$5C9=@}Gj8Ckd_Ev@|nZj3Q=tDm_!$|GfAg-A|G9cJQ{SI{suhXf`h4GxV+>v;QJ zN=z%S8{m`CH1n;hk(G148lGKI*$%YChUJ0i2S$LC*zoWP2#JVsNPui>YJgE3d>o*4 zJOVO8B5Dv2#U}s}0&Ea*(s4=Bb4#h8A%-L{@MxHN13w2bGe=)ayfHASW$9G@WF6}4 z6LvWzn~{l^k6+uuH!1mMPRq#X*v7#N&@ns!18O{K&5{KnfZPJ6- zdM6{Z>j3mr>}9A?Rp~V2i4)v;OOK|SOH(%XWCm1LgFDifB7ULa2&`X;|B|!1^YNL% z{s6jqkrh$$AoQn1?_Y{2+k5|q73GX^B+9Osk9imMtdN&Zu*j$r+`)N+RE-?9NFD3* zuC@2zJC#22_}V+9RBPWIm{MNSq*$@Q({uLT*R0eGYRizX&L>!~wGp0>-G0cS-Q;{^o#9TVh?oIOPgA4mqO@Ya!l{ao%V-sq_!#7uP z@|;km&xcn-%XqfEvbXC->kYWLCu{*_tl{1nN1j&2MgO)G3yoosAel~zV&OteIQK8_)c9KN|AY1PHtqSJA*>0<1-`>ynB|2+=AyO(Z;*KfDj@EKWB z#3see&~eY_;__BCNM1}AyN7XV=e)-|N(>oe@vY|dEY|On&N}~IUNzwWlw|klYZ}6# zLCl6Cf7`6`-qzwo{}6j>>pKa*Cz*Zw`s3uu)qB*8{?+cD{w3p4MQ7Y4FP`2S$xLvr zn?lODP@W8{_bq5|Z*A4rS3~q?r|tw!-(A&T4bOi**}{c7jnHgN8xwow8&Nnq&NPoq z9mtTPtk^C%Nmra;;QP+QUhvhau{8?8uI^VNZNvOIJj{V|>o#o8Q!WLjE5mbqPU77< zr4@yfk_$tqH11Pv6lwZ2Rgpavcr(_c1{?ZPgPj7drd9$GbAy358xm~0qdi)5IaSyP zp#w#npgU$PPY1e1^gh=2C%j+rb#}D*FqSzYtLDnneU)(G`MgBSh z6#1E3O5anWd>j*g+_z11bg=YwbJyo>#j$bL{NlGpLCc>;Ns?}G;_7t7 zZ8Y3YnNd4gdz_AH(lk;eg6i>V-O}K#l~=mujq&Q+5ocTcN%0Cs_iPyr_E3*X_Oc9@ zj>p;$IOMx6chvK+XcL<5l%p&K(pT<<81mS?(z`C=Zk)rwVk@H_Ck6E`Et&It>FT$< zT&rIj{yNt;g}-F)Wy3V+k(DdU#_d~T>w^}{Vk@~5`S>fs!RbK;H!Ag#i6cMl30O4P zH}u-roJk_oPE~i{#cW-l2qL{gS9`s4ARW?wt-cFMR;Liig9~@=biiofDi0^gMA2$< z_fR~XrhHm$U98U<9GH%}(qh_U@bu!QlX;gZ#e9lZEoIl>PHX_j!>MiEuV?)BcH#Fz z-q!8)_QOKoFru38+gPnd-;8gXc^>lAchb@Gq@#axC4WivswYkUl1{~{Y{OW{%ju}_ z_@Y`>Zc)4ZrQ3~0NyE=8e7dBv?3A3+DtNjQpfvE4a?dt429*uot?hTZ1r?6Pb-%)U zTTq*sdB>Ac*naDMeptvGTU?LG`#qa^yfS2O>Xdl|iO=fwLN;1? zUEl1VDdEj4?q@A^p(`eeuFY(0GaWwN$W>*!KU}Uc8=l4=&`(rI+VLPOEJ7H{^V5Z75n`(5p%qT>#yHlJ{mb9QV_vM*n6g-Y3S1%H0?o@Zr3WMAVF4cOsGtr73 zp|Wg_J5|HB1FaTZQf9p&sWmt8&RGG$zHx+WTIA+K zno>VGiTwb@9O^eV^lu-vA_D{!H$Mrps}}5j5r?+jdBb)ub8wXW*2+{GiLj>m+Q(gq zLbiow)V>LQM0%7ly_ldV$OxnwoO{83Mw)Hn=A4&&@!27G$y) zZeN1zQFSvjZJAqIpf^ZfQ&%L7?m$p>LnV=_OMwSxwlo_KbfUF z9_%?#dqGCF)Oc%inEqqB1(ywRp#CMn{GJRsWmfnx&6IXAt_!5^bEPi=CvaGuS1nLY zTguJ+T%G5$Cs93xj2CJZCK`^t7f}0h&%NHYOoY_vLJN;?+*nM^&9_ zDam^|i*JC#uqT*aTEXhN_;CysRQ4>VXW!*h-*2ylHuf<_oBq0^nQaKa0jPgznvMMVtEV* zR4GfDZcB=^eMXm~h6)S1zJ0Drb#mpUY0#d$)s5xtThk4dFIr8OI^M(5YliCG-F3Q$ zRWG|mJCqMhL{5Bk7uaoZ_EU@|NV(^F{YJ)(%bZkBJz8C4A6hFJn2pM`P8aru2x*h? zUl-qu^=oe=&5p$6Cqc*rVN%j9rz3Nvc_qskTdeC6xmyY3s$ienf+tbk^@3vwVbWSV zlI2yA7f|y{U$x2S^`Smrbx%}K;pi*uIe3QQbIypgl1*bESEmY|Y-)y(KR;#4-O6mQ!t*#0)xzD1SEM3et@@Y)3LO73Y7JxhCo z-tDwL+}1MFLdNkWtAw7gC$BkUi1IPZ1SF3fk&ld-nLti^suF98Le|py+jj{;>*3T- zycSC$9{r>b^S@XVhc`R?F9aL!>=BH|ohtCY8IygIgbQM4rF{fgCYCj51w zGL2JSVE!aTASgNNJlwCJKnodkqkKc~gI9$#g(k62uvn1p3(kki%C1W@`EPmT(n_b# zlMM%CzMH6_baoP}c@a`F;-^R)U~mu3asWDaPT7_(~567GuZK3-W@@|6md>{P9@aOz=6?p3YCaHaj6q897X-11&l^v9?#z8h7Sx=3h^ z5>Mf&2#dNWOAfV9ZIMYl3_s44b^FfH_Kb9kSx)?5yjdR8UGrn$sEdaA#9Ikvg3QNK#f zWtm)qrC_dgNDkS2#b-3v1dLZdc;s55!@ZM;CYlg1dHZC~{}S7YBF z@2=KZ;(01}Vms8*cb&<~r5de6@A-J`1`nD*iXbYJ`HaEC)bm+X zDLPTn@oUJ6UP@D4VSdD&M412<>x{M6QpCL1tlH6=YQb>Tesr3BrXU`U#KCtr) znL1uextsCIVusSS=Jx2WSzU12Sg^TE!SV2sdvnD$c~()?HYjMLLw&emTE>{{6m{ixi7K@Ofs-7Ee9Du7_yxA) zk{4}f^}0V znxcR4O!L2*VBFMjXs{phjD~GrxqU}iRrJaj8~t?3(<|snzvc$s)#K^aXGVODZ*ZEh znXg7r9@nbk&A&O`(JgRJL^?VlmYk)PDMn6j|ItnCLMP(x&cp zi*WAASDeKzSMe)kC~SpPC`HX%pE!<&`qR9;ToDG9hVq9u4U<29-O8K(MV^g^W`9yy zSE_SVu4z+qKYDb`*}A}Ere`9nM8A;?;@mVY>M65wtd(7@%IKMQLs@crcja7`IbPxu z<4-PqqbiDDpsyqM7)h%#bQoQ>9W$z6=S>G?7L zsHvXtG%E?(a)8aJJf7`nF3h*+K1mlSK&2tl$*}YSF(w_k)FBd_y3(OgIxFJLBUH?j zyrLOdpA>gl>vFj}l*7+pkmkODSJbF9PZ;M?sc(1EjvF&?HY1W+M0-1l>9c1P(^b7? zeHE`h)s}M*Mii6O@{?cOFF$*1d|pp-MfKOtT0Voru$t%R()| zxqc<(h2F>YJY#OQUaY{t#6A^1cqS2>y%FVNy{{EK-$1l?ir@lLWa+I~I@WJVX zQcY&txXGk|M$^KGhhavg`i)CO^7tFZoHa4PlRcs{w`0WlZoZ zTEVz_uz*{HRygxcMR?h8NSBIKVv*|bb@j2xCj+*Gr=K1#EaWcb&Mb+;yBmL(8}#&X zAxNF&Kk%U4d{8|?`LCIG?^77EJN@;i2jxOdQ)w2T^hEPOvkQ@H_+>1oWhWUS!u%1mIKmZ>{-Bmx@)H2qeXL$UsC3c73Sk)hT;^yMMh*- z{jC=p$phcDS1|Nb+Z`{O&c5>UMvDP4!ek=*RrO5kJw+UhjeD+L#Y?+-li-?MkGbBG0}K<(NL{0XnKaS%;PCJ+53_ofS78Y z=iXhfjB|PDLvmMt$wWu}MRk-&w-BznORZ(GVwabufZNB}lXMsF8Hyk4F)1rA^-<=NG~w(Ew3q*DbCSRhxo(SGu}qr0(XN|g_{w4oLIzDvQ- z2a^O%m8GjzqO^@$!(5KJ6K%KboQ6&}S=?K$dF!87FqB|g+O(GF<2C50^rSvGPR?b* zp;9!xWPNq#ye0DXjp_a2Wk#g@saE7oPK&WsUEjVPjf}A27o#~n55Kf&yD{80v4uIdk2;t3KVwz=LiFd*7Lq~q`6E_AMB zM4ZaLoUA~3xoFIQw)Iw8261CWNK7Dq6xXO1(_=DPs{~NW*sM*Kiob3j&EV(Kv;&Z{ z)df$bmnG94mHuSLM!wAj%Fjy9F`iQqyIrG!?7gA++$vJ=t&-Y8mCy%S6W>n;Q_5$~ zRM0)WC7p8iF_-gVWIP*T2Ys`eB3C6#v29BLeUYY{3@TmPsm5}~xvGNOr=scn&RRE) z*NjZ1h~bXs*qO2w586*fMbX@p&LnbD_qi~!5xq418nFuZsgr4B1MY>uPPXd#aX9C> zIMwnad1V$hmy@l|`m>KgA5Qt%&6k?q?3;G`P>dNTHE)u)c9?F`8Fa`e;&6baUmo3^ zdgR8#R5KoS112Z2))pi?wnu5+5IjavZBvvWPqIq?;N5QBvN_XL97e}>ImriSc*F5u zu4GHOa>eY;E8W}WDPDNKTzrp0Y-FR&==qrJ>HY3_4ibDq6ob%li;ayP?lOZi+j1I^ zuGjvXP5lqcW4QW8JveCI`g#zE_u+GW@5dl74?`Pf))1;^Ed(d&%=>bD2T{da(<5Yx z(C7-~sz&*T@(<4sXru^xpE+(b5cTOTEse{ZDlbi+>eL|9*Y?1dEztGA$Q|7RdG=Oe zJ&)V6l~9=jkW)i%ImLuh(6Up3*n2}&baJ4LZ>PfwOV{9YDIdCw_8<$0K{Js&vm(Rk zgu#T|`~fNHorpN~HHLyhsS9*6;G!-)*ZGcCf}qP;?>=68sJFjIauJ@YSD{p!P|)Gw z3yL;%NNK6%(VI~8FvbK2S|qO;Ki0S}(b{&pAfdRg4)Xy+)Fj8~p?teawq$(9Dp;R6 z+Yz`KJL-hqpi--8lp;4QBkWRa!;2EjXGZO#0k8GX@_YDr%yEa)DMZFa|M3Qh93Ne|vDb2sf7v_vlgxcRzC z*Jokr)9aCh>)9tCl;=tofR{PqjwQke*odBi73tkgnenPBj9t2{ZOVA4&ei(4xVZTF zId8ImT5PL`!Z}vHpZUyM=js_tmYxFkDsuL+^P$g~V~axvmG??%(k%-cK8oV@KDbjb zeQAVj(uQj*UsUYzEp4Hpv(c#~ae|nedv6gUY)04l`rJ0eZ>ZFIQro%AQU$6+KQf zq%5-1vrRWdH6U_6LSD2}B~CXck*WLx&+=g8P^PaQ&}7B}JJhY^;W4*2 zd_@VC40|LmGWs2})1&F0+_Vp`F{|E!1%144_=N`67LtBOoQ8i}XhQZ1_xdC{<$YY> z@hW5K?76%LA9H!|dILoV8oF?HX`yTudvQ$oFrvabE<>%dtTlHh;gcawu8y@fa*NB4 z!&k2g_nX>E5+vy5v9&IX?7%lhjnvP+azEh}GQJeo_H4mglkD>@qrL8=hFs(Ewa|SV zQ*BE*20`smCz*uXt#unViiOG!74lW>?rYP&eV4~WYKN-gT^9U3?-aLK+1+>9OIu!x z3XG}|{+f&eySlUZXYt&T266?a$qcn}ja!KD0_Sl0s&Ds#95=_^y18+?K!n z%j|jHZ2o8T>Ot4hgR-AFGYt!$NEWQ0QmkK7G#%0#BH8mzhLuYxUA0e~n4(^b0xrl? zXMS+E>SEY~!dbk>M$U0U>+Lo+?kv@3AJG{eyVX^}t3tb42X$&IHz|J|G)VEd9;(ct zKtt>RKkeCQSZcNEpv-TF`=MNB>wc8DG!0L>&?Otuq@g?HH{$SHNK=hKn-O)Va}v+c zDButy7Jt*X`hP0K!yH z9{*tA3$14HxAV2C$iVYhIXhQFky>TzUvn*KCW2AAY95mu$M0nIc5|R&TmL+LN`1yY ztkccMth8*DSN)i!cglP{Ee94G~&y$>5#}j_Zsk^JM1KCfq8aM}Xt9;5dWGJ-HG-KktkT{)ZI;4P; z611TLCyjOOhn|;gJOe!dnQhPeS2lEB@C!Y)V*IAe1=?s;RKobRq^Ix#0S=vo-{r!) z;w$}2Z(~hp?T(S#zc%`kU@Yeu<#VldRMXD=<>hS~6tjQ{LhszU@{fhE15g#e!LT4{ zR>4vy!Ye3o?%drM4~j_6-Q^29hrgT}*-g6iO8a_EmaFO+Vh>N&=-Q7 z+tl6o$r=Jn+{Hp2rN?YT2>5tHTHhFk~IOO(G||6DUXRNAC{Er zq`S2f%h&np?O3WX?yCmFu2d4jhrSMmMZ4RyFF5J!`f$~Q2dB<)!$)q>kuW3};J(ij zZ0ORf|Dt^B!R8aCvM*_rx&czNSEZf>Y+Zk3jm&w6I92BhEeQ_ENXPA#&i$BDG2&B0 zoZZDBh17^R6WGBF9=szYHZ&=I_ss7X!E?HbS_5F zoRsNuPE+Yh;>698G&>pc6Tw>U!Gl)bwICrH@^&l;gi zW!s-fWCW?_YwfQV6^Ea-NpyOhBK^+(xZ$;h{<_!1xF_Akt3*jI4c*vD2)@KOLA?4Y zm5&{<-1#AR>P9bIsb9EjK%2XjGex>Bw@33jQ(l%V`&<$jToCcJo$d1GUV#XIsyTT1 z{)r0txt#c=rkd4b@Fp>vuN-$$J@H_w0AFE10?m}|T7NdjV zH+iMG-uXlX33$fPoy&(;0ncvQJXRlOcw!(d-SWLig-V4y$j{%YZ%Tkv(aD4q#Bma| zJwV4*Ag&^Gl`ZXd9p1&WQ(bRf>p7TO1s{NPclTCX ztv>iq{pX9tGaQMOWpC*nob6x5RL&r_x*3&68V!+ZLA_)Y?qQ83GVaDSmw3q8wkYO{ z9!{coAJ$Y?EzuO^SI@KMhpaSQ-dlD@Z7!4^fP&C{x=SY_#~yM#KLFw7^T+AVd&XM3 zWKGN2HwzD~f7q*jT6X}t(L4X*~p=I4jfbMwHzEXwxG^A4CM@BMYb6K~8JcSBj@ zheN6Jh(4Zpyev1LYA>hL*r(zhd~cEY%h~q(lnVV{Z?W~ikmGCiMtC;%Dt0p7;w9Ej z2WFC$>n)~98Og$m{ebgT`qoC*zV7}32mobc=<+Vd+yN+bIF!v<1a8;*;gjjYLXkO80;TMzk&#wdTB0hzl2$$}E z$%5!)^}Y{i;BQ8H!C!L4^MxNBfbQ-GZ_gEeZd^kUz2OYjx7*q0Sbkqi?$D9`>D5Lj zE28usW49r(lHMNG7S{5Jo>RBxY< z-=9pyyh{Cr(F|(WO`jp6-`7%j$&UI9BXLA>UbZ;h+LE`lfS>CwVngbcW8^wmap{xR zG|VVJ9m$b^Yr}sSFf5EEE0P3w8*;gS+kN3V0*M~eKUKV)$#lC3YrLL%{&~cQ8bZ7G zGx#{~k3~(;$j|N9_0f+Yq58itz~omi=p~<%_p6Wu?ajYx{e|%=xH%3m-1667#?j`= z_O_v3q=*`;dw9W3gLPpVP8cT8b_d!(K!I-u-7=GVj+$zaYtjbldPxZR3-cZ7>Ejvk z+j0w)?8@lxF)?9HVZcQ@w8RNcy{l;n#>Tjr92_a85AH!IgsSz;OBXcV=YP=Dbt%gV z@&*|hum-3`$E?|0T% zsw@2Ygp`0GB*GZod19PwGm#5U{h*Nqjd5Uuz*t1~!(I&$FsRe%QzJ0wlRw6KnY57m z<#ebkB>RZ}a>_l|R3CF5J+@1kcOIfef9Ld5J)A2X!-3GSN$0^vBV^FfB(X=XO#r-`>BuiJm=XUycT0TfF#h zpP9U|%3R$3g&B}|8x`GMf;+6q7X+Gl)?V)Bkyy3FTN#TG4&P1UMA(o)gZy;Vi{ZuV znCD-Z{S%X$N0Xa#S%3Fg`Gds|a4pqY(KiG-;3072P;2Nf@9> zf0Th9cDB6^{VcbDgjinY9Swp;6aK=Sxbs1B{k3YYvdGU0|H8!GqwkjVE&YX|4|@d$ zU7R32=W2ED%;g=>roY`CfpGvI>ay9-5-pD)DIeWik+}Vz);Md>BehZ<8-Nys zP}iFn|L1a|<|d(*Se*REwjmnX@gU#5zxWqsW%w@)I@F_dqh_Lm9z0uKI@*JD`JV?l z=?N}+?@leC--gVnyOLxaaMVrc@=`wi>;rYZo#UXS<-agy_%8wjZ;?Zge%7%~U1P4j zbm^6^y}8Okc>W0-7ETM^5PoIVuCZz|DpwHpAAPP=V&1+4tr% zff@=z8jSnPp+f(w5p8ambW>P?AER<%{mXtn)`JjcX;_~>FRZdD7zFM#ulPv-CjNa8 z0AXEE*=}XZJ=>U%+8g>pS@pY((2ijGIc?4UCNfJ}6iamtD;&~~qzrZ8#NyFLS+&Y9 zJS)lfJcXIMK6d@spz(78^LJ?6BRvK^lh{r)?xc*ralL7;ATw(+I$zW#)sF!_> zYkv4GHnKp*A-6OjS_7t!H$Ob*xxZQrQZM0}f{hvebFCqz>Z5oq1P<+rGhLcRCvg=vt#6$| zT;Dci!|8CQ@r?N`%ZYepyTQD|51p!E6itUTX=FN(agBq};bT&pGxMU4?tW4n(bgqc zdGSN;K>e={(Hg(5G(+RD&(Y(M1B_u2*1A-CDH28s8($6Wc-q);N>4pUp3-UN{g_1z z*51cho#(x??%&eT48-64`I@BWesJAnE@J-ee&6OhD;KXXalEdjZgOUYZb{hzUP@Kl zyAPpUERy)Vb1zt#F$7w}av3K`j?ib^TZ7gelhWq-+!GsWt-aoC7{l9qy_#Y>t$}k= z=0P}B#@Y#!NP!@;42Cp1OZD0My7xI>ov93^9dP5v=gSNiM&~L5yL~UBF!dwo;td&0 zX;ga+KTrV7M(>ySqV0I-r*go}oOvimABSe!7)8;^NgfVO7^gV0ZH9-3$x$GH7w;n^ z$A-N)xYxAJ_B;4ML@UnqBy~Qi<{@KBT}QRd>7T59@{AKjU}>{YNg87kioB2td3T-L z4TeSK1t(vOyM-wE-0JEh(lY%oocSavjR?kMgDfX#9H9l-fY!&b^$3kvxItM(xp&#S zSV|lSO1Dp3_Vb^1?2cb6-{rT^{>=E6({G~?RhFMyfhAF?PklleS+Wv|XVltakxvEb z=Yi+Fc1nA3)^xopNSgt}ttvQR)A|U7YzHUTI1_Yyr)GecQ)9YQ=cj>D!POupsB0q9 zvMac}QTZBNepOyaHl_mS#nEkyPD18sB}iV!>%*zfGByXE3^>WB!W*#4gaWpB;5Y@R^QXtHcZ_0~fv8mqWG@)ISDi=Fh z-Xw=6&$MZhy?pr@i+jhppEGfIAY1=Wrd`)q#lqAY#8o!xxB0x#med0FtuWQ!bf)9Pzo)nSleEdfc_8BcL)WP z=<_ku`**m{MmE0Z`a5`M2Hss_nskv?4;88BGans<2`}Z?1{V~Ib*BPqog5^4MJ(&a(_D0uCHke!)No}<&Z_c8GJM1d4tFZd{E#dZlJ+kKT zPg@~*O2jSg*X^62nyw9=ASNDa6B1(pB%bG{;=ii_&!qoeaX{(5pZfC%Ef5+E=<#3A zOWw>xkD=|-gLbVaS7rxr(9CfbdgeJlm-q;C-3JMleYPQtI>GUV2ZZEluysNiOuO{(He?h3gfxN5c z1X46HFH^}Fx*IvPlHMn}9H&MJF$MZvI{wZ?o@ZyTO~n235nJ2nt@i!GwB(WaNpjFUomZmkP-Jil`ca#S>^NY*7c*G2`oJIV zrPJ+_L%bmbM4S{tG^%h`jr0qiDnh4C!z4eot59XBs*Hrb^n?PI8~Bk$dB0lwkS4HP z$xfUfLx^N{;A1DSdd zF)sJ-#ti2qIzCmSu7`Wg1`HJv6{Oq6vbeq@3;h`1Lbh>kMamxIlYx-@LHB)1Sg3$l z>2FxpC}A#aLC~)g<2wp8T(53?O@9X#!!vbOTx1iqGx|G*Cp7;VNC9u)7v z^=V=gvLk#r@6Bao<#8;-Dlz2YNn~eZDV;4{W&MWd`>@tOG0G2Nk5uLkh+B!Cuzs|h zX8vT=VTDn9dzie_QLyN#Lk#b_EkQ*OzA5X5QnH~TVu2AFEZ#(4xk;&b-l&AW*KZGIeU zMnxG+(kcU=?fbOXA%dy3&kFL|^OIFgMNG=BP<-jP_TZ{t4TAlfI!k;6fBTe_3s=#6w6_pzEy}qRZ5@YScD%^EX7TpHY z&qfu@ys=}AlBImJ{ z{er?lXZ1cAFu zHmTa|G|k%1Ny*m$@8jqt=j48JbF|Bv%d#I9r9Mvvrwu~sZfn(Tv*xn}u{RGile zCShf%zWdb+yd`dRrc`dopoxv`re(?-IFnhfF6C!t`r2~r7&%;*>fcG-VLeyhdQ~2e z&o;DUS95Rm3W_0)1bo#2m+Lc28QRrlH7IM{!?>JQ)LkmJ-o%3(3>-@_6u$t*aW7*u z_Ci1DEoVtM{>ElgUD))j^b#hv)t`52YPav!XW%0!$t_#@?WP9K<5sPn^-|r4u8cfY zR}v}ScmIRM6_MB`Ct-ial+u3^;KP|$Dvp%6f`^o}PIjiPTf6603D z)-xiNI#nLyTSh{Ip53DjdAest+A@f6fSMw#O;s`LpIl~@*?`f4Yi5_43BktW zWbG`gxj&T{c<@a12Sbw__8HF!iNDct7Dyo)F?($2<$zy$;d<5Eo9IHVq|_l+c%lU|e0QUS>e7?0xf zZBZ&CX$n8~CUmp2zoo?)&0n;%E6>?*!~3y5D=_{M|6?m>r9Nq98#|t@Mt93S$sfiz zB$OKi^wuA-1J4SS={QcvhM-!|V#q30?n2ibkKSG2MN2oL5&wDjr-Mp58Z%SIf=qsi z#oMOOr%db+vB~)ZDqf>@XMC0nEQ&o+AUkrx^YtI(L>VJ6N zN}qWo1lQox4dP{zNfugMYW|A;cKxnr^K^*_l8kWyUQM*7Ma3lh4UQ8KFVtyFXn1d| zG;^o=+;5#}%H{dlv6#Z_X_yTD+7o6uStVIrJcNaoLf`GY)K^|$ zU?2vomv^e?R`VI(VB3@}wfyy4Lp7V^&V-1-YjYhPjwPbgPUSVr}z z$vwZHv0pTNzzZuP0m_yD<@6E!)$zWeG^;aaF-+Zc++#`Q>Ln3rQhwv}j8-D~qLf-Z zd$Gatr&s?zj@tT{*0%4Y zQPxt+R5V$}ERo-`yRtp^QlKFw0T21rvc(yenM>e}&tODF&q7hEYW0_&$lMP(M4ENA zR3XLoIPAHKXpiG(`G^|1xJ;Ulq*Dmu!@Bb;(?3#%?~TsUm35qEzi_Ybg6os6_{M!O zE87Hi9S5T~)r)r!6GySq2#X?c4B&?9DX(we_&&%y_DFXZvjQc_yi|K#PI zkkID8ul49zyx<6LA^pH_Z(s@vr(M2Cr?JF&DH~3CWtBI<$LbZLq>Ke*(nsT5F(%5_ z;wFzwz-Xn^kKS8LV9*~Pt?LBhNpN%Fr^(S`eP-18)yIaJ)oAuESNFSd*a$Ti=4pq9 za{kSgit1@hd=(8c^DLJt&EBUfE^2bKE`G}lf5&ly>g1l@;7F?kkeMSt%)({{!=7>? zh295JKyO2RAmC5}g=0D19Eed4AW51CXg!Fzr@4eee_}f@Jf>+n-=x70r^C50yJ9b) zrFSraVnNH$?0WQP`u{tpCvt$q{d42*N)4jLKi*#ts-8M}7M&+KU7xBq`LC5pv-Gz| zC{Qi}1^gW>_n`RR!e5vP`d58u0?}gM{cqL?0onb9sn4CiIp%9|^8Ju9KgUBHU>;Ug zLT^ylC$Tx5>L%UxH9a;XH?~IOh_L~THolSwQvTpVgl?A=WEDq1ZSa&|IBDs;oR>+j~#3J~|-rnjfU!&vf>Fy;B5V$3`rEH~iGRGa3EWY#>WV)Hd9)>YX1@z#xU@w#qwQbceI-Zo>1jJvt8 z5?w2EbajU=6SHXfa@tnaI^#Hr3N)Pga^_z_k}l=4K&=HRKSCG7TgcA=QASRUCO(Y1 z)WhrsN+71bzDKyefAxTX_}SF{r~4H~l4$;lN#_xTHjGAngAH1uqTy}V{MBT1Z;Qc5m;vt=LI zCLs|58K-cODQhWPlCmqxuDjXhj{Z!te_`fesNRA{2=GK}5D8$PYDH&v#)C2oR7R31 zU*CAezXwLuX&-H`%Dy~elS7?JKl9&$_20^siO+B$?e54`+*S9plM5o3A)(%d&pX-U zZ_L3-g*F$py|#9X>_<`HX}Jk{{xMvjL9Rwvj*a$LCZYS6z2#@t>eZUkRC**N12zo- zyG!w|doXLgN2h?V6y`72iFT^e^i`K(%K9xwpRnD!(AKS)rSU?Iy0_4MJHsIzmzR^J zW6231KxuzDh_g?#Zcl)nf8+|sP*kBsu)B(e= zqxj^|+WT66`+vJBU|v~mW5~L}t$QIQLGC+C!pa`z1E9YaUq$E|y)mVNUx8&>&?06y z3u($I##2`XEUR9F&op!n%OUt7#!`O0-z&Q9+viCiXe9r#GQe*aOv!3N#zYvR*NCPu zHXWvtNwUR}V8Va+`-bb2-T62m%B5}E{7kak=U0nsv|H+-P>{;5gGm{=$i@aWNERaf zHj@FHd2_e9FXnjmoLUcVx#>XJMsS6FtBD=Si8^$s`CVxM0vzd_98LY(BOT-DYSM05 zHLx(5**%#+a!m$1FE_AgMPQ<{l2-4jU!PIgjx5WV4WD|^6^H{hv!p~)(LNWLv7yXe z`#c)nJgG4^2@*R<$d0>gF?(Xh3<+r#YW)7vmmy#{#kChX#c|}8Qp4C^!^SV~p6lSE zb_sZ$L|a|cW8!vR*boE}oX4e7HQ!!l00Sk2ead4rqiH)_Q!kSA)a!L>($aKgGcA^7 z1E&lcM1NP+Xb9`9w`FgUGyc9W(XKR;re?Ol{UG7)JlP+-(h9g5YAjv;y|e7L&sRvW zie=p(AtN0PYVL_{x`uZ>)6Sp9$te_Rw0`n$dZ`yU(~CTt*9AnX@G0; zkI_0La$L#pzf-ImIFX3?I62ice;=HV%p#WDA(CS=s7bOrQ!g1%8y5bxpKC`yOt2Gy zGbwIA&%_AgJ(SkzF}vkkIP3jsdq6d{(cW4t>pI)%o8sW_Naa(k`)9d8yUDN9vW`2! z{?u)fh>If!i-)n+IL&aSS4+&_?%eV$HJ zOv>STN!mqdb^v7<9DClgMgasCy{HOIA}V^|gdADmY+cntkmm?ZUEi6ZaE4P7$ospc z_@vdKbAcF@*_iZGv#+xcU&7S3T}(XsrU%GwPTvsiSf`s!um(P$VkxUiB4 z)w_Z)0Lx(_Y++Lcb*m1p3ki17cONJB1{u|*oI)Do%aOgz%cF&qCDo2GJ!h?$lfL}U zi}6l2u2tb~)T7?Yl@s_iwLkwiK{}9M$G6!-b=AxC-*xNbLOHN+t*OR955<#QYU{9QJ`60kx zVnjL~HNmUsw62q@SP^}!(X<8ngoWb9O{?U$N~o2wl3vTptg**Xb_ZOGG?=N-UgtQ^ zCfn>8mavvw;>xV#>}}(V@19AsMKwk&W|)pL#hy z`;{W}^s`W+Zlc^%^60(D(Z-1p48jcTIeIN*!?pKqwg>Y3p_5>wbwpJL7zO%3$1QpA zZg>b000WF*Rc3r2&FsWJ29@RdC^(f6>ZepfhWV!g&H+c^NpdvMEqRpYIZ5uGCa-My zI}G4`uy8QBnCL$m8lV3my^JU)J!-MWxh&hTmx$LMs@N`C`{M)C2C@sN)^^5*up0d~ zy>wgm^l6nFLVuiM_SXw+#`C;PW=GQ*d7Q1vq49lmI(}u^q_v>cmDY8`>ak?URAZ38 zJ{+Y}>NnSb;{=vkQ{<2?=3~hzG??FGF}~38ng@vo*XP~TB0WFnO^4Eso~pI&M5!X& zh9y=az6>LDx3nIk&tO=+0U$|DT>tmJ`MEQCQPOGCiupaVx%sDyB3PGYJQ5ouuXp$Q zl$=`EiF*w|8aG5cwIo@c9bp2Wc;^1eh+;QL%H46lZ&j=pP6wV@5}_tm)tnTQJYW~R zoI5*G$O+I30I?jt%__%hVlqI4-C)07XH^S?OgIN-S za7L$&C|ulgvUP2b$z67BTLi*_{!Sgd*Lu`!JWk&4R+BM(ri9M4W>_x`40uRahsqQy zsspyQk}+PscFX33yK7F9)N7XoePe+kcPU7ACy0`g**cx=XGL zqLr~@qK9PllYVHX+dK!REG$36;AK^JRq7on zAD3awH_|E5H#>a5e879MqtARRS!GQyQXsn^zl|S(Iorc4GOHbCBcHI7 zm)lfvT8srTVCZvUh{_VWC9iNfJxnOY#PN5&G7zVIT+jWU>kY{Z;Mcp)<;cpdg?1s1 zFtZT)`G<$e03{F+!Z#HXf3Dq^>;{q=za`|J=UZYAZVvZ7ErYrQK4Sb7e)bjY`2LC` zz=ci^I6y<@hYNWvR;Gv+tX&xKC0o@wU^TncJ7lWA+)od~P8u+fFe z1nx?3$+wA1v4~a8j#wm;6QidV@pF~=oJ9q4ZNC<}0;I?$+cmv|i>(TwP(UI+IE^9a zsgy-L@q6xv0ulaUDFx}t@CBe6Fq?SGk@6510%UEnLaRUK+JV4v?rF|LIwH5t7OG0J zBx2NEN3NR)^$5X>;DuC6Q?1mHoeD;nQ1m*ucj(I|T$y@$sVNnVOk+Kf+6bYQ=x`XH z;V?%;hV|FCpRv8f?#Q%}qbyd=_T@ogqK0Zzj80jPGq3;s{CtaEBE3dhyj+%K^XIbjWEB0I2^~)@HZ|#_J%Q(ON5~)tcEx5M} zQgufLj93)qopk%5dK4RHP3EC~zm4_FQ>ITmePSCj00WAolI0TEP<{?~X-U~QY?{W$ zIk@CKff;E=5v_+EH=Omh7x)Jsp)V2MKJM1Ocv$?of=h9iDIW1+o^vj8HE2^e zyov#S3pLZndFAu_B6Oi0t|F^9dGNGC0pEJ}BBt2*TRY{Zv@dUTzr76~l|9&!nR zqOmYAzsDgxzg?>Uv~}FB7x*fIjmj+0;N3q?CT<19QcagVDX2x!R4y0bV10rD5QR;% zzW>(t|8%9@Wknf39?Spf{`D8eB%sy)&H4Gi>EM^eU4RZKSJ&aU&XrnVwNlH|>3LAY zE63Di#|iC!uPhM;{mI$B{sUE&HY>9|Z>qfX1ud44gfw@XH{F%82<(26H}s9JZ?A6N4P+=iHKc;MXSlvB8@*oMSA z?d^#K&U;+_UhuJfiA*Q8I6STv*r<9R221 z+V0)R@8gp$TPvY5YTENIJ`;>+%ZJ5Klw`Wi$4Ce2yV&Aa<0+B4NlWEYG}K)uOpPNH#GT5H;QS2|9})Z+M#jg~6rggD2K3gk@)+ zJasTWiPf&Cj8e_l>8tLEY$3ll!zvOoE3`rWq^>xevg_tn!k?h|n>yFOFK0UQD0L^> zg745Qbi)T|Brq=I4IOz2C(6+u1BmIuIIGv_JI{Eeh{2NxF{gbjZDxK~u)%SyDG64mr*T79 zt(1Fl9e2FSJg}25_d zyNL_+mFf3{zMUtsn%>+2Tn-HRfW z*L|Z}N)l+3j&Se!hOP2nz#2PgmLQ*D(dg)MIvGo`TqMX^+bBvgriO!yj}**WzjQo|EdO^8L|npn7>YE^nT_Sxq?Z z5F$0yC>b6%xeTVNj7Ho~JJEH24^&tYJ69_- z)O{>Qi)3gYp%L#KDBFaD`cR`-LI;A0fnyARN>AidQHIyMA;`wof*-^yiOV9LNKH4S z{>Tc)S)Oehop=SfR3BRGFjYGwk&N!ji;^-6+tf)apQTM#4(E{*h(+WfK2N_VPTO== zQ$kaaww^sWEAJZ0@7Zwi&9f4B^p(mT6XDVFvS%PF(304Vu&#~W8+aj@9=l6`8}z%p*FGr7 zC%!eUST%etm(VT+V`;s|WrZhLjDTsO3T{?=Et%6BWrJ#S5Wl1*)eXxzb& zyu=ZaXr{>mZ{ddFvz`l>65H93G?x>(MK@iu^5!7+BNv`r|Ag>7s{5y=$bO9iH~Ynt zerFTf(Nx{Wq>em7UA@!E@s`kPj^zlBfuu%`=ohs|M^xyIO@D~2OZ}ii(>2w!4>B4} zqs1hCVWO`V9`8HUQtzXkllR9uuQNv9BUeWuWSGPqc}ea+*lT%6{jOA{Q%V{JBpPk7 zs`N_VtawEtEjC6e+UMko7U12c%b($8V(dSDbMi~SA-hWNh;-DXcD8krQ($FHE40*0 zH}j=6{6KGjKh~|?Qes7AmqB~yFg{V=Jx>X4I9mPk6_~xpaOC)8l<9al)UUu2&zh}Q z7t(k>(9X*}bn}|<0Jy}vY+CFtoEe>NrFpr3{oZ`h=NsX?p%#67j+}Zm>uFrdf?>a@ zHeBabXSfnHodxq|0WBUg-x>oeif8}A7~X$1tawvVtFz*z-AJ)P9t&VP`>YB9)S&kc z7cttwE->mo0K#|qFQ+3NP4-^=s}?=cold((GYwWa;>~1B=YDX8mq~=MIt3~Z+S#Dl z40gzV*L^xxP|)j}pX8&pYDL&KCiniV81qS8$eau%rq#?!JkYwMx8H(x zxZ4!?S@krRj#Cx%EowzR4M-1g?oT)qd~Tov!trljdNt`BSb9XcEDWBu_3o51ttxeb z>yYu)AhnefmFJ$F!p6a~VY5cjr!$*tZ{V}EF>bI54)fQAj`O`+uaqr1RBE{oYq#jm zvn^E8D9NfGQl21A7a0X6nZ&H(Rn{g{T6OS($E1YlYZ8)!KvNX&QoV znU8imlm^M4(Rt|REw<5IXEDD^3=ByQ$|PVzXJ`e>3`Wlp-~lKJoI*kf(`wV!Otn=b ziJTgD5yi2f{hA?;DVc8uZiiW4tg8=Dj1doQ_o@&~hloVp8TxA=gh> zg0&>zNhzBzJns(CNh2yJX*?XF*R=P!=LNZ&>6qkB4szva5YZ6{DDH@$@w3kU@jpiR z|It>96s1#fhK|LBTT2x{i|sy>OA?H4rCDSoGYYJcfrp#pLHtD|y=|6g6;84wrLiB1 zi12OY56X!}=kcS)O2k^8vsX24mey6tvTrY;zEQOUrJ8?t2XTzP8wdUgg_-yOb_#!Z z<%oX!0B`flo&a;M&SO!+e`AIj)8>UO86!=V#c~zG>CDoNqX{AS!7#jxG9Tnsrhhj5 zg+a-_n7O@M7C*~5Gk^~n7>rnLS0)+YhUm3?GLFxgO!}sAekB9kz`G)rFFi_l-`_mA zHsA%iPd-}e_)$*zyEDY5?DzX0`EM>^RmpzMD?3`AZL8Jw(+UI*UIvaGS)3)E*F?-$ zBK!T5aA-6{3aH#s82y}F#P5C3|H8!k{yH@iF+oE0d6w&qsXZF$n&s${}m`zj)@|2ZImcqBaX%O3A zn8Ty{6IO?SEwyaF!vZt!;jGDw&JZ$fe}DIbD|2aN>PcWp|K#BnBlC1Rl6nyEsCC#J zT_RI4Ew8h2dH7+aOrIvNe>@w)@0g{jkV^*Wa}VE@znlhP)u4k=hgs*I)PC=Ok64dG z5SBUOK{@(Ag|4vm%Y;b-J5u!1DikGS$ncxi-j zpSH$c@z|oED4~-v8NUk~mzuW@enP^48<}_qR|>1{!xarAZB!Wh=1pT-Y1HIKKeJpu zuN&-+Sy|O z6N?jgeNBRDgq1?Ua)aTP*3M+@7~(%KLDX)?QV`_lVm0C+_iPIqeKYAHF5nSiU*`_g z5g%;&kuRoPFNe4i68J-Sc{@et?}<0Lx1oYJ`13Sx@c@%Z_ZO2NZZFVyV{xfpVP z$=vTKy}*5~rL1@iLbP_jd<%-@ni75*w1vuLYCb1NaUHs&4+P)m=uU%hx>Y@W8h|hU zT97>Q1a7fg&i4UDCWk)DG>-A@J=FHu`Iq22|i!TkNQHXno-^i}7s*-4`_urm5k)6?;Xk9(=8*5xpm~=9Wwy#Ik~66{TE~8lL>d3$88n?EkERKQXJ?^Bgf4*DN!SfwLKr3zxLAn=2n|2$e0k_JBuZP<_V1lp@fSFMhLF^dlAF@bWB$ro*imzp!pWwOydXE7R zVsKN%3K&b`S4X-Rg4U`2d9RK^*ZZs%xIevS%M7WL(?Ytzv8V%P>lP?jex{@H^CjCu zoa>qF;zI)PbL=H)zmlo*mllFo46r_NH^=d}kdW&+s3_`eS{+$1-OjSlzCRkfrV%8e zChRY$7)IlKsxQ`p?4>aCA7Td1Xbv$?O*xdO_zN%9`#aS)wr11#<5Iq}P)CmKNB>?M zzz8O$hW(Ho0$1D3MN@mo-fZGDln!Jh9OkdK$y1Vp!$7=;b3;Ey`?qU6{J$l( z_5`O&q<+-WX9A{gfW-7-#d6Gr#}0^Y!3WKzF9SY7ADPfR5U*;p{dLkh@}Q#LBkCW2 zWLLkr=x)32q@Uizo~Fc!STR#6G4Vu}!01Cy=PWb9{Y9A#@WKNsvfziRamKb2F0a0O zvielA`TkD7{AHtgo+V!aZOA_~iLEF|o#*}D-9~wOw`Z)4TUkK%tqwgMJJmPWapmaE zsg*(LMlpvN@Q8kUI_Hw`BdY@n%z&CmWcjAsZ3fbrlh=AFSX}-WCU)SQA>GlL zQDy$piuu$wYWb3{_9-i9n8fX|%H=-^OEr@h2{8`M09*kg6R#V~Lkw*8+w4VQga>D) zPE@3SHT%_UHdHXg@vm~|3Zx;+e|#Y^R;8>c(dy)8=b)~+cj#b)4bK4SGNdPPowwNX z6Cvnxk76%`j1(TFLsEv;32(kSZc<<5$tvh3-nZU7Fr%`hM=81WtdsFy`D8NT0j^co zT*JG0SJAwGT5DE^-=K3q+FN;V;`=sBOxRShr?0aei<>gcRem+z{AtR}39N%)04Oy} zxZmatf*{S!^j{>i$HPXxUDuNBfwZ)Ft*N)e+u)^C1EMlVAj#A53gT`lWp?uE*}DYl zb-)^cvQ{=d;S^`(E?}$y2$ks!K_#VJxzYxrw!J5@h5PFXT+G~9VR6w_@19*06xQh3 zn=4e6keAD!B^8o^zVc9}H5KpYKrK$e%z><$Tj%=Kb>9KJ)#V^hXEI-&nfQR`Ayuez;}mmT zS%yyrUc(g_v%3xkzbYM?A;DY3(p5eTZq}^KYpJEJ<(u`xqO7!56RCzPL#IFXI9?Ol zzgCsA2EoTg^=78Q$L1Vytbi&EQjev)wGRBRJ~PK&+d5e4-OwbYxBRASPvAV0NB78;gO~iZj6hh-7BjW=QH61-hIQlnrQ8a&$cIdnP zJW=ZT#7DR~t$-dKB!`ND;%rgO)SN{cxO1qQeP}%W2Suq}IB7n0|7D_ovY$LXtx4dM z@q|IE-O6q4VxJFWoh(b;5e1I|XwIIo#&T7#I=ncl_J{QZduVu%l>l7cIr4aAGD3Ts zAy0j^u!ptubldM^^EKeO<(lK1v^TSbgvYo^Fq5FZep&a|Y&uwiINl4WHtbhK)O4&K z;g8|p4CVhHhA+$iheZEBbf*8B7?IU=m>8&zzmU2eH2c=|{AKaQt_H;R590WQ;h!Pc z^+;Z@{-X}?r_U)URtwM6i}8z*40n)rjwZ^-g>j*( zIcZ*xx^C~j`K`QQtC?K$3|+D*d%sOs%e&l>D#HP3Eail!#V|OFmEq!2pU{P^g8T!4 z&qh&`t^58r?U;`Rui?!sjSO<BREz&J$XiD2Q(4{ZZ3uNrPcgAx!!WOHZmSj9`$;(|TwFR#1h_pDCuK7p4R?cP z?W{5*2{2Z*(^dm4ydb7%cA1u4DWd}71%gT&qGBUvSxSU58qb)UO~2chq0rdKT!nh4 zR@T|o9G~SZaWA^9pgDombIg*6gcYLmz5u4t(aLeX2l8_;KhA1C?C0c_PR&YU`C>G zORZ(B){0+MWP<#y>={G^6<@K0CMyF!b)L>oZU(JlJzMAuY#dqCkqVb%cBlyAcg~FG+RT-k}`_KolHi? z;=T((AmjL1`P5*X2b^l(AK9a%J$ZaZtga4P@^xp?&8br#|IFH$#pfI955OEIHcaYd z^bzj1>ejN={a>8DRZv@T*SAeuibHYt;3PN{FYYcOL5n*@ic1TH;1VQ2u;P~B1aFH5 zr$BLO@#4|~rL?_2?&sk9=6g=wnfD+k`yex!$=-YY*IK{pDgk`-y$DlpD-WNCtp6)j zKncl8dwlk)|FX7xix%4cYC-!rM{uyEnJL=25S>i5IE+pyq?h`4I(bua64=shyWcn% zXPJGhlyl0!r@;2qwr)*v0YKb-I=D3&cQRmI{t2^}m@h4pZDGGaR^?Kz>(BV{- zH)*ibK!1Tc586K!sVW))2KE|$3iZzsCLGKJ$)g-6tBiNH#)6VJ40_0K z5@l!F-wz3tH=c>oYJMe)1d%#>OG;A|Pe*xLX6K8RSLu<4n%0h{9|$`?3ylyj{BLOc zzwvE(@svM)g|3%7(hne$%to7n)W}n~aaKC+jBinT+sON725$biPEDua0s}4Yp$BlK zO%r<2>cW8h2eDQnnqCHZE59OfOW9jcgpVV!H?AwW`3}jbOAY+8d|| z#LIw)8^blaDDQvCR3aEhs8z^k8wgB2M^j~Y_cYN;*t5ROOHn?eFe#x&t3LSN&74o( zL&^tPRrm8Q{*o7DNbQ*;?tWHlT4%1%QnXXOH4~I?D!eFrWypI7g+rFarGGA}GDDq2C+6$QQL^Lt&v(S~suVgB#8#owWES3zzC!vmDfk zvet6id9>GJ0}(=cjuxbg_q6Ik*70HGFR2_2rnD_LI^vg;-bX)C07%!4m`r&WKqiHN z)bHziuMZ;qewZ4$5=Su&1&ePPe>1KX*?eK9m7u9=|eQZFshhM4M@qJf2ai zt~a){>L7dUMV;$hEpTc;!{Xx~8RI<9@$_xW!g*1X@*;o$*{rKMphk#j(#tN@i)A8; z{30@L&2e4YR(nwBU6qv+irAiu-4Otbj*C`5Cqe7<_{E~eu0PzXujZ!a+IOj)faXE< zjpQoJUShK_O*LXFy&h7>1Vo&BEkQN07(y-h1DXMNqL?|d@(*dF(*=ZS%E6H#w5iB8 zwg->Oo^<2dWp`;<$h;(EPPR@7OkVfoSxS5C0l_A;(7=#^^#x5627?#W4h}v0b`}1` zY0C1dCR2K6=G+S-What>f_Vr(XC9-TZL^6luRB+qw)qj-_*wGS%9}!c<0mR=nymXv zlzUj&zaG4riqlxnzi_3h6X3%6J-b3+)8W-VLsU6*%Tg~ZT6H}=8@HdKT_H>xGRN38 z@0=@k_j**DB)dcV%@avZPBK=OOtQ-?E;l>^9}<(w^)R>S9b}mO?JmN!9+fH#`R*wR zaJW83A+uA{XdIqsefe=4x`GHyG(?;2*cbS4_JOOsUa}(7D(7Cl9BSKo>1t(>0jIAp=Pk|bH?lNed=$6b|vT13y^PKObR@)(EyucfMVct zGx8bT@&^ovaFU7Ip61eJ{~pZicd^H^pjql?|5gU>B{j(WNlFDp+lE?=WKQqnqit3t z{q_<+OH46mVZ;wVtn_4b`7<|ozWR1DtU}jtcaoj=dx;@Vt=Y0~B*sJ1Da{NqUU@IE zgP`SR8|6TOinB!li)2-KYuk_-gdC9M`%@9EGhUfyT{;>*9zyp*3JN*ui zgikxQ3^XGQd0nVF#K^i;+N?~ow}ONEpO=Cc3ka%usfrv<2;bs(UM}UE{hn6YGY3ex z6~0sik7bT9`;Zj8Y0w|Hcn%d*l{eo5*6^vP;^>tGPtSiy^b zO<>%Y)MH(6PBcF$b+Cu;bsBAbtAJ4!_wytT-i|&mCJLn$2Gv+2@Mm-a2`F&WrX8Uw zC_gw?O2{Dt**gCLL{(Lc-;s?yoV7(Q^8PiEOdxl1%-cs}uX2x1Yd@yFG_b(@(lzz| z+WvZAKAjmakZcgg0wx+KD8wv;MQX-Z?*|Nv)Lh*~DLOSyZi?Aty&AC;T(CH@+=diT ztHYd30m7~QnB^QSd%o}@^O0blPKo~~o~IKo@^PhQwA;vWqa5@8Zp>-cA~Op2I+#=I zRC!<|yGg$8UrSyg>MHx1k=dEfg z*5VdTCUn_bAM=HManXCigX4%SiQ&jfK}DHyzf92_?gw|x&Yn&ue_w-*iO5QQP{WD{ z1;wPiaZ7?jt|Lu!{IrPbu}Asql1yDaXRX1yAQ@Dp&c#5$H`F$Ud69KcU@&K-r{}2} zU0oteB96ewT)cxe&QlX@c@Nr?azvUrP7v21pV14G4cX}Xu^p3Je$2@9>vNa(o0UtW zFX(w@o}A@Zp-malov=$W%en!(!3!1zEVuhK<-W;WleH?5rH#@lT)IBM6gwdee|$$) zJsa2l1Jk<9j@f>Ay-&^xf&b3_+#(!r!LS9=V_^|rnf>KfZ^=G*>%VbYx~-oCnn`Bp zy)EM*h{9NVWxcZh-lcWL19`Hs=fH(^P{J22+-n&eG0Q0>tIoU%T;n!2P}Fkj1BW#1 ztT=;JeOiMcHallvCcn09lvuq;ql-^@2jj$z)E4$-Yn-?~zNdG8faNuHDDNsn>BE(1QRlJOFG-&pH3$8l@<5$j~4 z9;y+soClcNLpj2L9eg0mq?v#2q18YIm6E+hXqV=M&47ozOony&$1ax}`P`~h49Ti% zodrg|cHQiq*5|jwK72NCpnz0n)SL>*i6(V0E|0i0gNdq#wy)YMV5j`QYeSrkIW@(` z7(*YJ17MH-|LIlvzkdKQ8>F-yYbr*j1WnV_j(ZhqIj2~oyqx!02I9;*y+CtiLt+lJ zz2DB6qoIJ|_O=dr${edRi_{lr{sPYEsFr01=AglrhBY%nT?%&<@7YV^=UrjLAvhIZ zs=p@tPzs@OJHN$QsgPU%q)S`c>Zbw*UL}1f+P^5MI+1d%wi0~G1UKX3^aCo~@OP|Ls7oDGjA(k65Ph^PKJ^4cV|(RM+sHokhsUMvvFE z;%MQF80CU;PzPS($TKRd)%+eM^#yc>70UzxAYz{S&)TUB4Zq#X+ZQd((vX7@Ci-u? zru*N|_W!*9*E6 zH5(=Wr$4XM0-9Sj|7^Ep^gn{J4{0r;otJv_gx&6WrrTC`%};Vh^<9~t6fkzPj>|gK zJ0<7m@o3_80Un3btF3|w8cLTwOP@G#LP84(*5u^A*g+#%hYx&bQpdErUad_i^Eg<` zeT`@QH8Qx1!V&|l}47N`Htf93Hzo_4>Tc5~>o z2oCz&gP)XoQpnI1yf`~Zte=jf>XVZaWg%#c_}iHSo(k`0aY&!wdF(Zu8FbK$Qd=r2 zSqUgzt<+yxu&A2pCbV)DMQ}p7oyjpXp^U7oEz%K;kzg~ia4CnJ)9VPTg z5(&Ws9n))PIwtek(#^bHEe5K0mnCVwU#LXABuj>>7(AtaxiT*TKr1rv?tyHj_k2#f=jKR34htnQp_4EP!L zo?6G*Ad9x6D6M93%hO(7r)f(#m6%x~z%X-PG(}qXJKHnz1DO0d$nyf59xs*lZG$O5 zxJl}_cfEkSlWU~}HMFZs10l@D$t5)?*9Eg{^UyY!b+wuxNgI(fKec#geKM8aDRuLE zBVT`5*0xz*QM$!XqX`?N+ret3xixDpI7L{^IAts17^@ZYJY)mfQY^iL?67+C|E;nA z7xMAH`%xRW|BC{%qaWcH^5D5xnl;^>9Xg}8b0HgBM*eo`T+p*~Q}`!m-|?K)9&gbj z##|!26+{0YoIt0lRGcO*g}Gp^3VgwDX|;=_R$f`r_qJ_X=P4^G@@w0@1B6a6+FWEv zFw-EqcOrF9JFtUkns#+I=i#YLU3kENm2HhcKsLYYhRb0tWO)pY)Q&mj3c4vcopU!g z`gq3c@Q`X*AX0AICNOhsn51zY#Ve9S0)F0?@J(mEYK4rpH{fspngcbPMH}XH1`JXK zs#Zm9$N?qYO&+JLz|BW%>LhS{1OL#^?_-w$I(IGH9T!}0N>gNym#bXKZYqD6#l=>3 zWk;@7RCZr&ts1EEG1EBXTC#NV;gs)@un)Z>@rcjRzOg^Qqf}yc z=sX3d`}aL_VO-yOZ)lZVHbO?iwcB1{wc<7pfcL-mRbdEPw^6zJK z+d0K_7&%vWcxQ|7HS>7s^#m?0+*#qC?1U(mPs^vTIs1zl#o1FJLC* zii-v)zJ@Xh9c#AETYqQCk?Bgw&ua7Hcik&Yd-c@?4nZ|5PDmGeC@R|8zRU-3C9B5u z2y$uIxf}d;Y#A`#H=lQf9>XiREA!sZGv<_VmAi5?p;W4LoLVCyPx4ip==xaiq^C`O z#K|758-A;oF%V62x>t-qOis*AI(WBGi6o1vL`~W8$01})_IV6R5)!%Mb`X7Ilyhbs zw#0&#rfjMyXW#kGnbp^Mz%2^UZ*b4$M1c50w-TiBlb5=%W_I>BV7ECarLs))%* z)kM3&N%4KFu&x^@(v5Kt%ou?%mBXAG3AKWVOpPg0wP_{89;?yrs@&2g=9F;c7To%A zGWz}a%ik~^DB3kOexeVfdlG~*GSxbM%BAf^S@cLa+f9_(Ltg@KTX5DrQ{fPtTHGDS zH(A}4dBL3_;z8$H`ZKHU5%Th@Zym>({F%*dXcIw`Mswl8FbJPQ)-1&c@H~BcgR*JqfWn(%yOBFAFp%OJM)a3}Xk` z$eel#LLL%+{2pETQeX6K8H?qKfWj;uO9lqrT#FyL_uyihJEX~PsHF4RFXfFF>Y1f) zR#(G=y^P}7tXPFraa)#2;Q{iQ(Bfxt#i0!H5fV9FZ&8Z$fAnT!zn?KRR1$kZ2MXIQ zG~?Fg$}l9knaOhCIVqK0?S|TH>Vf?O0I3KAAXc?LEtnxWT@;!=R?+Q{JUHIOGkLPb zX)2i3eghiH6l{!HTJL@kq||zQIM>p`v^58%juUmLmA`S2a71;_BeDt)BKW*XIY5{P z&eZ=| z)}qT5jYA6P0EV3%CdHKpnR_)wBFqo0$e0Ij_&wq*j86(czrxmn8lzy$&{4~Y&rNrY z_6b#mSp-(VfY6O_`1`E)#xU33tD(|I)YCUStzt$w61oK=R%54ObMlxo?$mFs|l zdy@G}4m)0e-={k+X!y@}TIraGt0J!7yxE|$U<-JbRO>Qtll;`;nbEg;gD9iV%7J3E zU}d%qQ2vQkk>mXbOG(HQp!(2dpwX7G)n1WD`s?`oltWNEuriDeo~h;Ne0;`kmWK05 ztnA_E|ML=z4EkXH1ueRgSJeF6Ow5PUA^%Mr5whe_2^tRaSgaTtDHC>Ww@4wfhtz9M zJ{9X_R7E%F?@0_U3M99CT5b=@gcr!PFFHxS_DkuMD{I@W^ zRme4h?}{5X^8rTLL8a*R#xL|X~Js=v$yQV&RLm1naQZ0k(dpqj_k%}xEQ)?+pbzS?d%=jg7 z{4dc?D@g3!Qlk;o+~ce#P%%PPv#)j1f!?m9uhB24^)s@zuU5{xT|z#To~4@Ben-w! z+(ec@TY{3+-RsVGxugekky>)`JvHjLC&<7|_mrS?x7K?T8|_1!OG)Og*!79f8*82|OOW!eZ4GI(>j6U#OW-aJ>?n!^pDO+X z=$AL&^3oKRHAR@Ybl!(n8hyffq<*(|qR>T>U{vyE2>)Z#65>#!b8ys3inarTz+HK% z%4{yt{YP*2X}Tmwp{_B34kO+trXQmJ+8m#0PKlpYeUQm}87tPb*^lZzFuW;aiT5^N zN$5*7z>%7lSa)8s{>o=+Dw+r4Pt3`9+#~%n$lA2tTe|;qCJ3|5<`#=y{NWj@bwj*5 zGVxK1_LaSgC(Io#`pM490P9l1-&$Bq5-J@wwk0aee6{155>Fd2$6D_1>7zgD(vr}c zd|R7gkt|N~jVUj;3%&jX{io?5@hr?FkCc|T_1p)b4ZCU#ZX4N8(V zE4*ntp6&qe1>aoME(#m7`fgyFM51#f{@=cXS6!M z{iX)VGh1WV9wQR(No=$ZyR>}TIleGqG@QUFo+8QSQB&&vqgK~%&Q>oeA@p|LG%dr} zpi}u72wM_}1-Bm<_08W{{}gOn?e5d~!lY{$h%_l`Ymg)C(hsxY)cGjvwaW11IRcEneky-`)+gvnn+S-!@sZ2#2F8GU(Z-WLUo zfX~6O>(-V2gF$*hG8BJ0_M#ol)A)@k0a@D}wgT4WkPRzG*Zs25)f6Y62E~7zXNqJi z46D-uq?LJV(l>2DJAeCD9i0}98S#GL_j-`u2G#HQk0xF>^_p{rRqAJHJ<|`Yj>09| z6R==zwJ@gka*eVdU&a76Ey?eiyg*ZbgJ#wymY2wOpZoPzy7PMq%kDRcwxFpmOO_dW z&);32)i2VeHEM2xB#Tb%28mg(J=+i8d?)Nv26@)W0eq zD>q*a7%O@&njbSgpnn!?vzo3RZ8Y#?9I9*ZQ0lZ(MkIUrylJ&OH`W60RG?N%AeKPW zo9+c2G5-y+Q8p>67l5--iDNaT+Lp%vMOXP+f{Lvj8=C5f)Xt8Abaw@=>cy9i0D-ly zQRcd%#ciWM^}E9ZcXr4B$?A=MXShU_4wKyx+m$E$B)ekx*{8W4P84V&=!2e0Md%-9|2}ePItf>!a$hFb(f6+VZuh|R zcTx4sSMc?jJNomUaUyIbSh=m9d%Ez<<8_Y#tm#;9audBqTz9VrsGKf=JFNDH(-|*= zIMf~=n_{xOSN14D4%JRbzmQ^h}_rt$%a6!ciZylJ| zlUkIcYY}z--v4EXm!} zbT|enwo{WIw`@<~e$+nvMGFXEKA8f0&gvCPe1dTFCLA$Fe#scPYxsb?r6o{^^F3l2 z_#s|#U0hJM;LUlm!%@e$-{;%?l}k6b^H_ErjiBulAU5NtTNF=AR7Fovs6-gDRGgnoE)I}!!QF0&OG-q zf_xFgFP}NrD?H{hE9{xIv+uQ_Dp>l}N{nFVchljd(EYdLO-{6RnoOhp(J6c-nY3Cz zK3@wSBF7IVzZ;e zm%r*MbQQrc3kT?D*;z8@{>QDu2Lc1V8TUm0!J(cDNaux-kJ7p@s`%|1#u&v`voc&@ zv5F!Z4M{aCFm|u=wLabfG&85XrKlkoP*`z)ni-uVT+Kp5UC}p$%GA5Rq!p$+2ud^3v;+f)HfoF~upE z;vA$^1I_cVSa#o09Tnb!=*F&?TFnzneprVbU9P2=2jt|4jUz6VBYL(0*QiFlj znWYl&eo>f95@eN$yx%1?>Gu1s=aZZ(;>xYDDA*GhAv&Mt|rl1Tt0r49Z_C5P%yj{gm4! za5^QGF)mtqh|L&Q9I;@jvR>sj9i%G;ttk`$1bhj;?-3afL-AFd{vkREmeq2h9swOS z^`(E4>e}vD9*iBP(~BcXvrP1dzsCs{GR<&6&&PG8+cd8yAsFZK6OA!Bs`?80BeiAL!W)vC0ylWJlTS%*QL|*S z_n&VF+OQ4&jB;N=v(XY=rYySGm0~U~kB!x`C`YGJ*HW;>eFcze_|hlK4jz^6g;-Qc zcygGiA$04Xr{Z*=3BiQ!XEgz3)t(q)DLFAt{1V#zLdjcr45_X8lF!aus^151@n42s zN3uWcd8S&>$bX*7#}hGu_`Pgswxt}aNFsmwM32Ze_T}73m%T?_S&+Nrb@v~n>Zp)A z&XY*|m61-gr*m6TCu18$6B4cRed-O1p{ZkhSc6w;#O7G--Z!Z zH+XeVth~|48K_};)2w7l;8#}}JI;dF+)EWw%y>PN3vTGLY@3W>Ek>im6iLw(RThAa zS*uHQjt5z}4~to_Z9|LI0qRH4l&1g6tNA6d$ZCk(ZO>#Nat9qOYR)jk!N4oB$=}MGuf|PORrjl%OmMtzeUA3rryyvMNS;uiqmjyuiXc?wOYBgmq)%2$r74V#+5Li{53uW z;w~RK+ZR?eDg8Psn%3-^2}Dwi%nmFdFN**=uAi@8hNz{&q^s(-*HBs{=vdNjL3K($m-?hKt4yFcnr31&4mI@yX#r!JTv9PJ zT;~$a%7DJkD8`}8b~m1av1cyF>^}hA@fl?k46Y9S1yT zudg;=xFC6p8oL(o|JRky`Tzfy|5vkZ5Vn`VznwuiNam*A@@<&F6qF$f=uN>K=@IS^0~&@`X&a&d>J zp7Cq)FG0VxXkb&b$k<*Qq_Z&5k!{%IT`#W_&b#OniFj$(qbjtwcV}-|2(*2}cjXz;>6?d5K0o1EFDM<>dZ)hDRzr{JLg?YHWo_zi|YLb z)INIucG-Jz*`jC9O(P&7sIRD~D7u@dmNQ9BL)d6wSC{jkKg0O3=c>b~sq4sdc3DU$ z7Y31Cv)4JW8Z4kqXlb%Z6O^{e7HI+Jn}8VZg;Ji(ax2 z)xX@tNv2|}Ghv$Np&aOJ$)A(8Rg2=t$bg#KpUq!yHlIJnj{Z5)+0Eo) zo7<8`y<7h!JrH?P`^&eBf2?{I_O-BSg7PF~cMxr_tIMFM6~pERUO>EK113yI@=#2g zzEabseyTV|M{9lD#xyC}TO&fATftSfOsm6bvETm%^Y_d^njwDg6QQ7PHJmjg?}wtQ z_RJpBu?hOIAl;)#m6gD2!i2jVHfH$fXl#e{V*tWABAQ4C3v|aQvAbFZ3QMJH&j<+| zf{;ca*|)a{jWz*wiPYVcz-aEL`+?>OV_Z(JwMkn3NyYx`e%w5{4~-mn&|Zv|*ZZwE zK6=C*Qy-~y^igT^>Xw6mgSp}~F{!|#U$Ur#!Et$ZM>a)zSD}nnrGv?z!BAMx@7Li8 zWUF$(`&{agWWFELh*KfoXjR;Wqn$D{OSjhwHkHpt+)~t2t|!p!%q&FQH(f40MLi zMq8MK(Gm;eP(nf`Sl_d1;XeN4G2Qcw@;^AaOUY^B59*m~6^0q%^qs4_Rg3s^n0&+w zws^@Gkwse}7tu}u=V#hyj1x}oh0*wdvYh7vD;WXG z5F&WXGFi6R@~)oJrC5(bsh2ExrUBop6taEtS!1UkZ-g?w5C7rJ|2fSOi~ERODqxrI z3FFJ=!V#;`Y(WOBLKE_%%}HxJQd~0OZM~hu^B1pL`?$H`y1AtOq>rANqHD&Yn6zvK(b`oG@{zgi z9(vWwuh&QrA+Bk6>5OZohY;+XP!n5A9QT_HfJ_Db*5}OkG864#M>A>LcwRf+3KIRK z_{kL`3j?i`KIW6_Q7j)4Tse@%J6O_GD+9h}f{kLVbacpr#p3o}kVJiy?5oUeidV;) z^(0BA)GeQXM0xA=@WYQqsD4RTYp!`P2m78(yj2u`wAIUJ7pk*%Ed~g(fRmxTg=jF= zV9JV|_7iO|Rr)6r&G^Q*s5jV>N4*VE@?m+lima^kMKmkBF@q4%6%j5Ko>mfCZrdC3 zCdw(MakJWtr$Xl8l<(Ohl|GNOXaG*>{D)(GE^ChppTX&Q<*#pdvat9?zOq57#@UNG z{C9P`%n!o_P)}--g9jd0Ed&3WL+%UUk7?O{qCrA2<=Ibc&!m^(lL-Lm&pZuLkc?4n z5A`lnPSVwujmlaOhtcdxiXWLHp&#)RKzLnduOq#!*rG4Wk$xr}CPT8s8LZL%HWjV9 z)c$t>ZOY>3=l$FzuW^n0WghqN2)g+zn#zXKQc-v|)y(sXAJ42R0Fb}zQaDP0IP7p^ z`T}<5V2u=H_!B2g#V+?&e`(LkyMrLUC>cP=Bdg{mn}V)3MQplzQv)gp?r~)dqZ-{$ zt&~YV>pFn1h8&}4-5JWMI3q6Z=q^xoZ!<;}odPX?-^oqTxRI{aEFb{X-VOr^o7Cpu zx4B1*Lek)btMV9WT&mj5t!wfkx1jE|jR16_;*_U-5Bse(FZpgmOLk_n8gi(j(xjn9 z-A6!eU&Xz(6rf80xL7{dZ0j$>^gqbDzA|l2H16!R2SeJvRM7R(;#LF_d+#IEqeh7H zJix3|hV7nts-9V#U4`rk2gEs{y}txEH|@PX?2WB4{FAfbWm^;WHkYr(?pS0%<1Mz* zu_c0TmJ5GIb#fl!ccbi5mS1dU_(WH=0)1v@t+REkbQr0aT+J}s>3^up3HvcbqQ69S z$1__k9-9=7f0475l9Oaj31mgD1=emhZBI#Wid)KYp~zQY3=TN}cc^_MXWhm6$dMU9 z@FyA7n}&aDcO;4zs|5j}XMgiM&Yf;PY|ltVimm983AqO_Z1m)Jyqn$ zT{MPkfx{QiYgTp3uH9=?3TEtYc&2aOziqpYTP@x55h$n0zr^ej_0vu@VWt>SFHc2b z`@UYlwJm*KvVn?VI@&7ofBwgwQ)y?y!5xNHH$V43HW&qVN!-ZJ6m|3Tw|sPhn}Jg0 z4valy)@Y_Ff!!DO#|q(A%Pk!b!4L>uHsW!wVJfVO;JgsC9-qHydeK&Anq@wF-F}$} z{adW4?2f!nlWnqZ*8B3g{BuMllFYysPx;k7(!PAu+lyA&iNwsI!Y0t{Bu9<4|1HQM_nEm_#>GKEg zb3c*HNzqLQ_ge6jE2?#10kpGP3CZ}JB!!kPf~h$2rMWx8%0j!dF9XQ_00NynRtHW& zeVA`(63Ja_mcD_3$yqzJPblg?I0E8paT~V1&(agj5R8|}Qe0tk(!lGg+0YX^htl8A zy6WSOi_8Jd?X06YnM2nu{SL|LA0~$vxHQ8m33fjT{&YDs4jO|<8WaW$DxnaO-*Q=B zcL-2pTagbE$8WC@iygtwT^3HlFv_%H>Te(;L!Y<&n~;cS-*Xb3nLJp*)l$j~VM7e$ z&v^6&$DdK(JgjXr6glMdftbp44D4E$So$9|(nxgX3vPZ`Xl}22x*1tHTm&f{@nqcW z^9lXly@SP0>ulO~=qgEa$*WlpI+r+mn}Bn_$WB{<=PO*@%(_Bb0kmqUiR*-l0swn? zk}82~ zmbbC*AP{+~0a{g;{Zx6+e_~?PRpoC=L|4jrnMc?G5S#zBzd23#CHD5@IN>dasR<_ z9{;7-+@zDcd_;<)ANo|IjV-D01J~o?F`o`$lwh>Bng%hR(@Wn|f}t*hDytXL8MRa; zexF!>iXK_{7Rn*MJ_N-v zigT8aV}%CJQI*zS#c&j8C+05xZ>D`X6}4v@HTQIGO4#qC9a>5Yxgzlk%EU9&Ik{dHV(#7zU zgg;9NpNZAEE}|;Vz8B7;TW5J!{h+y9>@wl~9T4Tgb-{ao1oTe&9>XQ#g;9S0*cJ89kzc4G05G#GFDRUe*u|8UOQOkPoC`MTD! zSfCk?3gKi5Bwr>r<}(V{qY)xC)Z-a!m@cjvluZcsvelr}lL6Xlq{!&e8b8x2XwZEG zFAw6YP7!%=jYga|g4D(VDx-V*3H14tb%oj!8}l z2{*ri_=6|+VTNCLP|~0&2aBY!(QQ3xaP1di{JkUkx7+H{EHLcBm@?fa{XpKH^V>J| z;Z{_XQMpVPa#3Z{2O7QK+k*p)f48O3XnySYlB(S*Yu@NES)Fh^2)tqo7*I(C6ytDR z)EPGM{=_#nG)4vKE*3gEL7llOmRim%?xzC940`t+`R2iguipFFOa1dNeal)VFNYGz z#(XWhwbj+%Iu`;Sa71-1ZPW!Gt1l*CqeU#=SqAFqV@YpPOy( zIUv?3^swQ@usb{6TdsBoe5X>^#Ds_tc>5HhHqB{{^Jrj%`kDOB9@61tbN6uw>$>~Y|54FBPHHQ8IsD(Ah@EL8eE!_cCtK1-n+tRwzD#fJAYFY9ndPdaA2ZI`aZ<`g7I!c+ zT6=3gH+cZ0&!n@(g*tIPBBAp~X!${E>MeDHI2#$v-63gbVOT~!VXl@YT$IrW8i?*c zW)$}g*)aYRC^t&_uv+dZ2}@$M-2u+UK2^mMg9KS( zM(ys2m*S~}yIG?*kgteT4sIeDo31r((Z~Q$>54A6kEE;SUQ$}KZ~``CK1pjy1nMBk zjF$G(hMQehzwR^DQ_5!{_=&ns`V{1H{`^?GF1P!uS3}#H+Vo15jgB?PdTCoT3!|7u z{JV7Tgia%zG!{4_Mr<@0MtU%}B{k z<z%C3FBj&uheyP`SWVb5GI8|hBkW4q}J7=zROha39r?qg1>~fq;_*Uk=DNe zuu0Y@;g1T_oBitvESJ!E4ztef^3cTOw;) zsLc->MINhl$)~$ul%85^mm@6nK+nP)-T%KZ3Y6^u7;Rne?@Rmr#_9dIqY(9cS73*x z(N}Csh&ox-aI6J-fw4XYiA04tQ+VeXLY>;fp80E$T6vHO0lBb)$8<>p8346T|AYn z9Cb1w@apZiRO2jgpGX6+_u5mOar<{SBY)N?CG43)61tQ|8rDbo8jL05TPIT8#b8S(=uE}hgiuVU9=-x&@pS~5u zI-)eXOj75$7Su|f;J?VVhq-;pkcT(ntw@}RQh6%OBI%#yezNuMD{cmdqs4*efvOW@ zkjw{DD+)0I9*)Bw6yfpCcBgUB-3mv?)Vf&*t06C-IBbl59-~qEzRbb?6HP^nbz9pP zWHSseBqq@}$_{(_XL4Jo$+&~NH`~YpZO&2BlL%aF;x78*&`VyYx?Dh|G1#JGF+`l2 zu5jcAwm@d2zHppxh#JiY837(>F{Nh?r%4FV|@G;FVU|z&#?@@ z0%G%p+VNTcpzbf4MPmShJStFoJSu{J!PCVN*- zLJKK3;7T%PiKdE%2;TWYXWm_FArH~|Q2L*LSRNRz<{IN-n3aHEyBTYgeWuFurCgAv z6}!yko94ybcLm)w&_|_g4^fvcaD#}*!ub4$7t!aJ%{9o-LXPsv6dloG7pw3&&_q@) z#z=^$Ovb`}e9FfFJs2XWw(F~PgK&4$V3v2g2qhe1J5{AjfPhObUtZ^pnV~K99{kdx&{^rX+@W;D&dF8|turHmEn#k)&U6EOl zCi7TLVM>ZR_N)s3&X?f1tJ9vHBEk+#kgzxE#Z$?Z$~2zD{VwUIt9pS(<4y64%SJUp z8be&CG6q_e_bHVBET`2z=5wgKkWljdvDcEn(vly=W=-gB^v&45zkIlRCtJaN%1cum z6pnD7HRBBb_^3d>i6705mA?wepjTT@){pc3-U31B3N9~gS5C+~M*<&NH}Kk^PP}S% zi`rDX!7@4j+tzMTXN?lpe@+5Hvw&;?1KD=2wl*st(sydU%i8cqInNfsP_+c0fOfE9 z#`KSB?NxryEL3WY(9bN(4l^d5%++aGnGOnWTa%^ia=_~Q;>^a*Trdn7a+x-;%FeOr zX>(rmE_wYY+7ec$T%3jnu9PXxIW{D8xucu3++ZcPLI1|>|AV9NT@UPj8u#l& zWSgR}wwip@+gU4s(DDMMu(cb=Fqvall-4?+4&h|$ru z63=li!w=*S3I4nzR7%F7JsfEkc=aq`O|biDP&GNFJ36)8!zbKEeqss*^UgkW4LvkJwU8&WNci%XZ$QV8Q*wXx_tO(kmbZ^Q3x>|dqy`nZz z=aZJe9peK{w7+ZC0XNh4^VF-23DN)~@4VeM+;`<||G}wabzse)ls+i*WWTEqEr0Rv zpNGF_q3hNycSn5o!PZvE^NpH6!VLcpZ*LjYX7`5swm@;W;uL~gafcRn3lQ819<)fH zP>Q=JI4$lL+*;g%6!#XVxD{{vp1l9FXV2{aK6}pjbiS=wpE7yodDgwI`?{~+NRm)8 zcL*c?L(_dnxSLwymUe9iPY1n*`(35!pLZ^;&Xg4*I;v*ucETn z8U<8%Y(z%J;C*VS9o3z<9}>>t)Jn1a^j!2!)%Ixrx}n=j=achl@tLVa$N1t{_3*JW zd!dUM(|S!$1B?kEL_nsvnmLH&Pyd)CM3kU4HsIR2UmEG#8mDk3YKFk`t=M%{Q>Ok) z!#f1S@Z^2w@P z8n)p!YAkozcQJ;K=|O*5fKR`7BP!*o4IWL=nX)AW6PsbB zq*wZdy0f5CpS}%PA+be#;utR(2WhIDoUCc%-4QF{jo#3G_@gR^bg%GEvBiBK6R}8m zvoPx+*aUV1tIsi``m26TrhbqtnqYY!eI@=~1GQEuB`9TptCqx3d}5UJHqZ7DW+g$p z%YBbklQTtP(?Wjd=IRy7{pC6*tQO@SxER7TVgV)^G-6+3e?k89b?Y%Y-;0=pm@>iV zVPB+hNV>wu5@6ubUVG8R?4klF(crgo|7mM<_Wo>3v6LlPrEuEx0snH!oG~dUjpae# z%3Aiy#ZGrthx3m2vJ_td9st9kqX_#y&-zh} zz3Y7+x`IzDG>xIJ?SLo&_{yDH?P~U}TZJkmjB}vh6|p zXxnpgQ;$Ou@?p5O-Ka89uvo?>MKx4_Jfo1O8TI{s0G8lWd3p7NRA!Fg-eP_vWqM@)e|5 z_A2zl#Hp8adC5$~|3k+XwK{aWOh5^U1^|1T!$`h;({Y zx-{sR>|Qa^EI?20QU+1`gZB8L^D(_5K{488jDH;j(0V zUYt_!>@_j&wmh)+?4{bb-2KvJQP7b{>$n4!?m3Gcu2+`#g){z9?)F^X0~L*|yLIQ_ z+`~BOvc7G10`EL0;rC!Bz_rYp?M&1Cv$5Z6h|eUK0|5_v;t{R*V%yqg?(X~&MZjcH zAS8dueB4vRc#;pc794O|&vI5;;L0tCpmoSCTTUFe}puE?s4*8yXL9mC;O_L7aW*ZvTAyw-b@GF~wjwLfK{_ zy2eONVG{<0A_WsLfQVKLW{EU}mD*lg_zhtX&O<4sX`LJmxB3Mf&OaPLEUvdv*JrU~ ziQ_z3dMjPm#QVF^{an5ADTQk~dqwQBOGijpMib8O@1o%Wwraq7&606sFlAld5RgP? zL0@kcI%H{4hPo7-SokpfM^>03oVJK-TRb>QPY9al&7ssrGxlKQvr5dw*(7kqy_kk+ z&_$EN?5M{L^SBx5eDV$=@?;A~RjVN{z?q(c8`_{*#&L=$&=FZ4r&j4S9|$$G4E#@^ z3Y1g`Pz@jlgTbDvT;p;ejG(X*w14veMKEI0lrKl)S-b%(sfZ{Ol8kBqcaR_=tyHHG zBmA^#WbWY@BPpA*+F3;K`Y~?FYj$`Ub>dUX-9%g(20(ABkrBIN;;*)UWU3qNQ|C;? zJb1Z+P4V}y)+^<;I+x6WE=rWJn z(mCswrQ5UW0de`7vIq^|PTgv&u;AMr3CuT{5~k$MrIr*Tm8Qy zt*cdKUx@6_{}jLdZdAqG0&iGqfT#QN$_MJRS-G|16*CVCeQ59FCwmV3>ro-XMote| z!HJDvn|Hm6k7td1{>c`gf7-L;UiWC+Sr6tusdT*Od{D09Fx)TAbdu|^dS;Ba zCSvLH$1|*6ekj>2JPXKTE*h{|JWjfIwLOi=#~z0jwkRJ^8aGt2Q4*FRG<<!d# z)8Wx!Hg3kaSro(3ijQh=izS%svz4OUX-V!kXtErVet)S#(A|=gKIGo=J4~`C$KZG+ z4#(N+Vr8C*i=HNw+5{%+4}-INLW?i;OxwXIbFXzsi}w=B<#EfhJ@X5 zHSpuF#>nGFj{?8|1Eb3uLEoI((e6~Z8VM{%qI#P8lpv>R7-YKmIfMa^xKj%+bo5BM z8ng4nuH3ADJ{OU9mb0!Bx5e){tllJ{wp@&z5cKdkem3_!QR)oYpU2h3K_}Awd_HIs?7eaXY+MB3I28?v z8wqUBE%#@@K+;yC$%dnvemjC=ZNJ{YRHHWZ8dx-~Zjkt5Fy=SjeM`^G=DvN=v`M)Y z3FIaeIxH1kZl!F|`s#IWx+1Vf7uIqn``*O=U4zQ6#qY(0h~G<^pWD z4~!qs)E)L*mkU&qJ$bxTctxbqIv#IkIc#HfCWOehlG2zwnz?q0!?#Z@{z?oFXbvtH z**ShLkYl_<*3tMJiVRMOxICTwJFrI?cYR=oj))pwZ9L~AH zNPdR-hZv2RErf9hTL>U_ae48VH-iZkhI{{BmO?@=y(?= zg596D%=ImkxP(_6NC{(d21x@;s;T?a{}Yfk<(2n=PiUONY^<{-=d7wH>K9Y$vv~6g z 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 literal 0 HcmV?d00001 diff --git a/tests/test_document_picture_classifier.py b/tests/test_document_picture_classifier.py new file mode 100644 index 00000000..0ad87e96 --- /dev/null +++ b/tests/test_document_picture_classifier.py @@ -0,0 +1,81 @@ +from pathlib import Path + +from docling_core.types.doc import PictureClassificationData + +from docling.backend.docling_parse_v2_backend import DoclingParseV2DocumentBackend +from docling.datamodel.base_models import InputFormat +from docling.datamodel.document import ConversionResult +from docling.datamodel.pipeline_options import PdfPipelineOptions +from docling.document_converter import DocumentConverter, PdfFormatOption +from docling.pipeline.standard_pdf_pipeline import StandardPdfPipeline + + +def get_converter(): + + pipeline_options = PdfPipelineOptions() + pipeline_options.generate_page_images = True + + pipeline_options.do_ocr = False + pipeline_options.do_table_structure = False + pipeline_options.do_code_enrichment = False + pipeline_options.do_formula_enrichment = False + pipeline_options.do_picture_classification = True + pipeline_options.generate_picture_images = True + pipeline_options.images_scale = 2 + + converter = DocumentConverter( + format_options={ + InputFormat.PDF: PdfFormatOption( + backend=DoclingParseV2DocumentBackend, + pipeline_cls=StandardPdfPipeline, + pipeline_options=pipeline_options, + ) + } + ) + + return converter + + +def test_picture_classifier(): + pdf_path = Path("tests/data/picture_classification.pdf") + converter = get_converter() + + print(f"converting {pdf_path}") + + doc_result: ConversionResult = converter.convert(pdf_path) + + results = doc_result.document.pictures + + assert len(results) == 2 + + res = results[0] + assert len(res.annotations) == 1 + assert type(res.annotations[0]) == PictureClassificationData + classification_data = res.annotations[0] + assert classification_data.provenance == "DocumentPictureClassifier" + assert ( + len(classification_data.predicted_classes) == 16 + ), "Number of predicted classes is not equal to 16" + confidences = [pred.confidence for pred in classification_data.predicted_classes] + assert confidences == sorted( + confidences, reverse=True + ), "Predictions are not sorted in descending order of confidence" + assert ( + classification_data.predicted_classes[0].class_name == "bar_chart" + ), "The prediction is wrong for the bar chart image." + + res = results[1] + assert len(res.annotations) == 1 + assert type(res.annotations[0]) == PictureClassificationData + classification_data = res.annotations[0] + assert classification_data.provenance == "DocumentPictureClassifier" + assert ( + len(classification_data.predicted_classes) == 16 + ), "Number of predicted classes is not equal to 16" + confidences = [pred.confidence for pred in classification_data.predicted_classes] + assert confidences == sorted( + confidences, reverse=True + ), "Predictions are not sorted in descending order of confidence" + assert ( + classification_data.predicted_classes[0].class_name == "map" + ), "The prediction is wrong for the bar chart image." From a458e298ca64da2c6df29d953e95645525817bed Mon Sep 17 00:00:00 2001 From: "Peter W. J. Staar" <91719829+PeterStaar-IBM@users.noreply.github.com> Date: Fri, 24 Jan 2025 18:48:02 +0100 Subject: [PATCH 07/12] fix: added extraction of byte-images in excel (#804) * fix(msexcel): ignore Mypy checking for _find_images_in_sheet function Signed-off-by: Jiun An Tsai * fixed some issues Signed-off-by: Peter Staar * reformatted the code Signed-off-by: Peter Staar * pinned pillow in pyproject Signed-off-by: Peter Staar --------- Signed-off-by: Jiun An Tsai Signed-off-by: Peter Staar Signed-off-by: Michele Dolfi Co-authored-by: Jiun An Tsai Co-authored-by: Michele Dolfi --- docling/backend/msexcel_backend.py | 87 ++++++++++-------- poetry.lock | 4 +- pyproject.toml | 1 + .../groundtruth/docling_v2/test-01.xlsx.itxt | 3 +- .../groundtruth/docling_v2/test-01.xlsx.json | 30 +++++- .../groundtruth/docling_v2/test-01.xlsx.md | 4 +- tests/data/xlsx/test-01.xlsx | Bin 21387 -> 170052 bytes tests/test_backend_msexcel.py | 2 +- 8 files changed, 87 insertions(+), 44 deletions(-) diff --git a/docling/backend/msexcel_backend.py b/docling/backend/msexcel_backend.py index 2d200d75..19c25341 100644 --- a/docling/backend/msexcel_backend.py +++ b/docling/backend/msexcel_backend.py @@ -26,6 +26,7 @@ from typing import Any, List +from PIL import Image as PILImage from pydantic import BaseModel @@ -325,49 +326,61 @@ def _find_images_in_sheet( self, doc: DoclingDocument, sheet: Worksheet ) -> DoclingDocument: - # FIXME: mypy does not agree with _images ... - """ - # Iterate over images in the sheet - for idx, image in enumerate(sheet._images): # Access embedded images + # Iterate over byte images in the sheet + for idx, image in enumerate(sheet._images): # type: ignore - image_bytes = BytesIO(image.ref.blob) - pil_image = Image.open(image_bytes) + try: + pil_image = PILImage.open(image.ref) - doc.add_picture( - parent=self.parents[0], - image=ImageRef.from_pil(image=pil_image, dpi=72), - caption=None, - ) - """ + doc.add_picture( + parent=self.parents[0], + image=ImageRef.from_pil(image=pil_image, dpi=72), + caption=None, + ) + except: + _log.error("could not extract the image from excel sheets") - # FIXME: mypy does not agree with _charts ... """ - for idx, chart in enumerate(sheet._charts): # Access embedded charts - chart_path = f"chart_{idx + 1}.png" - _log.info( - f"Chart found, but dynamic rendering is required for: {chart_path}" - ) + for idx, chart in enumerate(sheet._charts): # type: ignore + try: + chart_path = f"chart_{idx + 1}.png" + _log.info( + f"Chart found, but dynamic rendering is required for: {chart_path}" + ) - _log.info(f"Chart {idx + 1}:") - - # Chart type - _log.info(f"Type: {type(chart).__name__}") - - # Title - if chart.title: - _log.info(f"Title: {chart.title}") - else: - _log.info("No title") - - # Data series - for series in chart.series: - _log.info(" => series ...") - _log.info(f"Data Series: {series.title}") - _log.info(f"Values: {series.values}") - _log.info(f"Categories: {series.categories}") + _log.info(f"Chart {idx + 1}:") - # Position - # _log.info(f"Anchor Cell: {chart.anchor}") + # Chart type + # _log.info(f"Type: {type(chart).__name__}") + print(f"Type: {type(chart).__name__}") + + # Extract series data + for series_idx, series in enumerate(chart.series): + #_log.info(f"Series {series_idx + 1}:") + print(f"Series {series_idx + 1} type: {type(series).__name__}") + #print(f"x-values: {series.xVal}") + #print(f"y-values: {series.yVal}") + + print(f"xval type: {type(series.xVal).__name__}") + + xvals = [] + for _ in series.xVal.numLit.pt: + print(f"xval type: {type(_).__name__}") + if hasattr(_, 'v'): + xvals.append(_.v) + + print(f"x-values: {xvals}") + + yvals = [] + for _ in series.yVal: + if hasattr(_, 'v'): + yvals.append(_.v) + + print(f"y-values: {yvals}") + + except Exception as exc: + print(exc) + continue """ return doc diff --git a/poetry.lock b/poetry.lock index c3905141..c3ab3cca 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.8.5 and should not be changed by hand. [[package]] name = "aiohappyeyeballs" @@ -7751,4 +7751,4 @@ tesserocr = ["tesserocr"] [metadata] lock-version = "2.0" python-versions = "^3.9" -content-hash = "7fcfc061454f229745d6f305e1fa593468a684059717195c6ae4174bec13d362" +content-hash = "08d30cee8d77f9beee32d5dbec1643367ecae2b4c4b47b57fcb337711471eb5c" diff --git a/pyproject.toml b/pyproject.toml index 6945e5a7..3d0f548c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -56,6 +56,7 @@ onnxruntime = [ { version = ">=1.7.0,<1.20.0", optional = true, markers = "python_version < '3.10'" }, { version = "^1.7.0", optional = true, markers = "python_version >= '3.10'" } ] +pillow = "^10.0.0" [tool.poetry.group.dev.dependencies] black = {extras = ["jupyter"], version = "^24.4.2"} diff --git a/tests/data/groundtruth/docling_v2/test-01.xlsx.itxt b/tests/data/groundtruth/docling_v2/test-01.xlsx.itxt index cab5f63b..216d68f8 100644 --- a/tests/data/groundtruth/docling_v2/test-01.xlsx.itxt +++ b/tests/data/groundtruth/docling_v2/test-01.xlsx.itxt @@ -7,4 +7,5 @@ item-0 at level 0: unspecified: group _root_ item-6 at level 2: table with [5x3] item-7 at level 1: section: group sheet: Sheet3 item-8 at level 2: table with [7x3] - item-9 at level 2: table with [7x3] \ No newline at end of file + item-9 at level 2: table with [7x3] + item-10 at level 2: picture \ No newline at end of file diff --git a/tests/data/groundtruth/docling_v2/test-01.xlsx.json b/tests/data/groundtruth/docling_v2/test-01.xlsx.json index 9a9e0d52..b6642298 100644 --- a/tests/data/groundtruth/docling_v2/test-01.xlsx.json +++ b/tests/data/groundtruth/docling_v2/test-01.xlsx.json @@ -4,7 +4,7 @@ "name": "test-01", "origin": { "mimetype": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", - "binary_hash": 9744611217659152490, + "binary_hash": 13665052226482254103, "filename": "test-01.xlsx" }, "furniture": { @@ -73,6 +73,9 @@ }, { "$ref": "#/tables/5" + }, + { + "$ref": "#/pictures/0" } ], "name": "sheet: Sheet3", @@ -80,7 +83,30 @@ } ], "texts": [], - "pictures": [], + "pictures": [ + { + "self_ref": "#/pictures/0", + "parent": { + "$ref": "#/groups/2" + }, + "children": [], + "label": "picture", + "prov": [], + "captions": [], + "references": [], + "footnotes": [], + "image": { + "mimetype": "image/png", + "dpi": 72, + "size": { + "width": 421.0, + "height": 430.0 + }, + "uri": "data:image/png;base64,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" + }, + "annotations": [] + } + ], "tables": [ { "self_ref": "#/tables/0", diff --git a/tests/data/groundtruth/docling_v2/test-01.xlsx.md b/tests/data/groundtruth/docling_v2/test-01.xlsx.md index 4a059c60..cfd30c5c 100644 --- a/tests/data/groundtruth/docling_v2/test-01.xlsx.md +++ b/tests/data/groundtruth/docling_v2/test-01.xlsx.md @@ -48,4 +48,6 @@ | 3 | 4 | 5 | | 3 | 6 | 7 | | 8 | 9 | 9 | -| 10 | 9 | 9 | \ No newline at end of file +| 10 | 9 | 9 | + + \ No newline at end of file diff --git a/tests/data/xlsx/test-01.xlsx b/tests/data/xlsx/test-01.xlsx index ab75b72d56c5315d33acd8aee12113609c1120cd..ea35b723b826961205656baa7e124aec0ef7ad20 100644 GIT binary patch delta 151944 zcmZ6x1ymhDlQxWV@r%1V!Civ8Yp~!BK`$O;aEIU$+$A^!5AN>n2^J)1aQMl-yZi0= z=bS#%x2m41>8`Hnp1KuX3f*6eOrWL+3x@-R00n}Af}(^HP<+ZCgNB0AK&m64f&sKg z9M{;vKkyGlK^=Hl**FYQy%2Q6IER1|^6o_QXm&p5^!}GebX!_Ew4qcM=u_$W-ezZ+ zteqz-bLAT-%;sqCf6!WtB^S;33nVBYM^*m8h1k+unE zIo3eV<(FLv#9h9FitA+dYowYnHvldue(6^R7*AP|w_LLZD!Px7*mJzXD7rXl+_+2D zc&Y?_towcCXq0M~(L|WLbrl=|Lb#=%f-5YRYvg^|p3kXiyPXHukN2n``pOO(s}CE$ z{Jqx58+y(&k*UgS!{zY9PtCfD-T5L?4fu39#wC$BAEha>h*+F!$Pl< zA@o#bxr`bP8SCAOXV@ZIIA2y^{x}T|{h$}je>Y+-VH7sPU5AS(mVg0p z^%;=MVgLCU3JT-R>t6P3o=%WYW=>9@SiKzVD?iLQ7V_ix8QZ=Qy|%K20^VV zoR%qYot|m#1!#7_j}y%mRqSsae1%(8k@;qCt!8Ha2;o0?FmQeG*1;RZPC~<97^ksb z=GIM#iqXN~x;kd6qbr$V(6?*^1Gt$PQCsqZdvQ0rFClclK~6t&BRBP`%Q zh;@y4Z(Q40envKs-!uRCv7F&kfbLb$w*&Nf?$P-!ud4^ zT}Y{MMjtM$rEqIxjnb7GOw=C*p^Q>+YqXb*&64CKBUWt6XRMN)Y)6bnKCq;Y=qb!*Y3er zVztyp?gwYr6erZ7IiP%pp$2Zxx#kA{f;t+J?MiIH zRkUe%zRA>Vt!nE+X%8?dNAd`36(t0Q1Gx!>J|~t$iPqs7N~UX@eyZTQvLvB%Y3bH{ zN2W@OvZi9MeA@jzYniaUT8N6WNhsGy(jQyt_DUXx5pA6`R4hYWzm%vc|I&StBaKJs5rSLtG+b^U*zg}66 z*x4zK8P0br5p6?0LRM@>Ud~LwBC3l0nq(|CF+qrKhRP#Jr(XYMKUj7b&RvzOLZ6@Y zT7D+hZ-Xv;#Z(T`kjwA2ZJ7T!CU@|Beht8H20R316J)LD5VYJuzPAZ-{N*&-*rF{( zK-4kC$s!|XPV3qFc31O)dsvFJ;nd@Uc{7$1v{D|?cZtW z8HBGLx4k33$&AQV=?`A}Uv9UO-G8xzJ>q9&=JLa$J$_^!x9!YP4A=t_+IZvWM{}Da)UJq!-DecX5jrs9@HOpkr+ZFxJK90p-dVV+R z1Tj}K+$fpV(ux=VkUa+?B3AR`PV*4n`Q$KU{L2?ozhti1@SlZJhS@)%s8tXMxV>(o zEr!D#6JoM&e#|z68d;?MY_34|xX6#nLT0AF^hjtBlKNDN+I^4>#EAzGJl?hE4Uq0_QQMs&c z3Xv;mwD{VDPz$|HF6N=(=c1dcVb2njI)X-s=QnR%)H7dv5Tv7|JOLahg4Y*skJ2stFxnZq?(E>8Zyy844S;0lm-+Obn#oO1|hsr*l`IR-fqyY8nO~l z)srMgP*4DrnWe70m9jDv(;Ei_1s!e+^%eaeye&a)lYf8$?zuh&>A(obot~O3?Y-&P>Z@@)cEnPQVWhFs# zCkIwj3n#$L@-4cY|6!osdkMaE9W32UDc%Ck(N)k(nCeZ$%u?{J|BuW@Me$!EZl8py zbd}X8B%L6Z6uhkLtn5@G$P^S5?;#def*MjX{|$fpB}`@G=H@KO#^&ki$?D0)>IAW7 z;}8%KU}NWG-~Xcus@Zy3+5>u0whnJI z^kzhan~VMZe*yl(`ahiiXY&6*b^i~NljHv){}1Q?kNn_j36XSicr)oH^3OTIf4uYG z=>N<8Z{&Nne`EhYbMc><{x9m=REr?LXZv5bi6DP~+O&Xz5`&VL64&yAJ~4z3Fj!a+ z`6+aq8jFYp3WN)4)fRRo8KTZEsQgFa6l9VR5h=w-6gJRx+LL?~b^s9QE@S3-vz-b2$ zNsKTh?-Q@*`)xbseU8a6yh>mQg%`J!;75lG=#UKKXCL(T|ksR%wBfx zgtMk0Ad8S&0Z33Hypi!|TG?HZU=%aykjxWH9(+W_eJIU}!a{V$MX2Y&*mmyT zxPyh>bB1{d_#H637mtFx9Py-16*5NXap(>atK_q|xF{gI;uXdp^E!7kLTPQXsqg8G zuLxP*ibsLNo!H63#Tg-o0amVm`qx7kJisi7BVZ8D<8SBXfwS7E4M*I}9Bdcepnw$l zkUNq%Y-d${(;d~fbp-mij^gMFr&DGqw-Lj!q0G?XU`H?Rp8W~0i7gb+KoQFyd}S?A z|H8--@QX+cJ2M3pinn!}5jZ5=)-yCqGl2#0DYf_iEL_D-+5kZ8DlA3Wi4h10(hj~m zSBUWYfE;=z`#_G@e&?Ogyz`S3rsp!KHnA)ajE%>tD3+yCii0cAV;g9)Lo^Ve@N`ZP zNhtcZ_PV`-#R3^(n+X}Ot#Lu=!wuh^2jZ}c7RoRh`Q^;4 z-6Qa$D#&t;BeQY)CrF9lboSKD_8_g@dIO7?8!|gBP=P$~ffwJIhRFCT8Cz=RP7yvF zkwrT=xX8^*JQOv5(+Lan-QJ&3W!^nJZzJS= ztW%>wbisW`RmxTQF^ZPIC1A6~Y}+An;DTdG`xXOvlY}ytpTev$ELy9pm|Okz+#SvZ zNxDBaVX~5wDqyjMJ?@OfD91EDSnXJnW@}IpK9L1B6&X5~S0q^cuo~gR`TRs;ElJwEVUUCngkaMwl88a-}5#olK_%-C9 zzH1+7>o3Mg+1OfCk8|`j^k~*Ha388$eZ7)!jn2z!^aJ~s8%t5LZ3|w zlhvT2qbe91=id34-M(rQFzZUzS&jF^8zYFdtfy=TTH(Q zzCZxQzcO+Mu24Wpi4eXJnji)QN>P(tIKam5FO-(Xxer_lrG$Tx^{QEbNtGyu2lbC> zAp>AWF$xSYlnQks+FdZX4^3W2HVtmgMk4@V*Q(WZ0GkeAQHYpCeH|x@w@3So5FUv& zwPq44b9Lr!HH1#3$U0J6NxY`6j)7~arCQw9me7DlkaCA$G68~-UQTO+0T&8tkq@8+ z-4l8jIBNxnIf5CS6T$y7%C$I-o@BxXahl1w+Gr)gvOJAO60&cmwyi+<>Dk#L^quuGaz2?-vwXam;-yB!_#NTp-E}5t0{xZj;jZ$m z*TvX-#gZw=fHYzr3kjp&C4P(BYjQ!j;%P}07w6~gMc=fnwp6aOAZf)X&V#7~u6?%G zDttQwd`kAtf{+8GjH+nt?|}Xw&KD$T077Hu3~t2>gDt_J>pLYqon2a^*A`{2g_$&^ z5)V0T?ich~HR%UCHO4Eye(((CciF=pEBgEy_Zlx^AF6M!X)_-6o&Y*9|MM;?UA?W% zT?Ttgmr;3Tr5H^_09Mi7Sn6097atrYGg;@mG+6x>0kQsLrj6a8d*C~~c@RejcN50% zPi8(;(kftFeP^*!g8qB5yF%|uM{sq#R|i3!ry9#G6R?5j5?Hu=icl_Q|mRcaq*GbwfqP`OpPrR4X2t4!dW} zPf7@ZRMz&_0IJME1Z$S;AoI!Dm7J^37k?kh3)(JAU(_5%44>FTE0m#6m~hBhv-;e6 z-wMCswCjT9^Sk<}Pgzd4#kRk|Tx3%J3K50|!@EiUq?92_Ahg92jX43Md(ZF{R6m_o zobtBY*A3v+Qn-%ohN8$n7d13Uer{{Gd?dYs^@F580BjX&{`yFju)66kH}>EyQ^fr4 zOUdi8zF{MYsSFa207p26;O!!W4pZMeHV{MDY0e`!LtbiNzKx`Gqb*eF@#V! zGk^2a`tqEcB>lE|&7+}>Z=Mv*cfMGkvnT6`8q*=RJqW)^aEd6D&)UQYj z8oY(5<0wpFlLbGPsA0GFB|yKv`j{f>VPF>OYXynT+E75^Pm<18U+;314x`oCMeLLWs0f_WzBL=Cw6uXbrJN(V-saykOvAz-PPHu9;agDITcKSU{4L^8+!fpFsC>!%I# zXJ3%Nxl`x;SKq4%7~ByJn#H9h*n*rbotzR5?jTd9x1@?}rrg9ua$kpQ4Y%00sk66p z?vZSTmt*}n?HETqg=Om+;qeGVV;UwLWQ)mi-e6~+BN%E<$OM0qZv{gcGIojA53mOx zu?|3%zbD%4@vusugBW;}wxv)Eb-=C3m5pZ-`8A1jjj%@(I(0o-87kdfU58ZVkQ8Xl zFbi8h$Do|p7V zay>Fv+*riTMxpM9C5!kY0j>QHd)0g%+yUrtZMQ!?9!(en{-$>oh1j2eQhSWNrcGZk zQ$J9vs(w%VW1vqIu{}D=D%d^cMJ+595m4tt6W}&?eEFI{)vTD~4eZj121&)$6i>yt$DfU<5#0?Q;1QpVX3d|zT${zbfQ5JWgKyBn(L|)VdQ{&YFO?^mo z__o10QC;9!Jw=tIVQM0GVxDk?yrKj8QGru6b) zttQR#MsctD_)kJ>!vUe6+%;dc0B+L^ANQ8J9#Y<4-#!+>GV+mmZHo&WS8@efTu~b}NLK1=16Zk18iJV;a7aOG%RCH{ z5rlF>D;O&!MtxAVfTsAHVWaFr53T*V{Y{ItW`7Cewz#x z#&2i1WD4le02Xx~9ECs_^l$rYPoD|kX*O$^DPnNY1G9?ft4Fux=v zK4`(cR=l7xDY$%#$``ZwBTj>uIl)M~eJApI!c}A=2AEKsyj*?QORed8(6Fw*ctOgCWDw4iGN2JR0ft@X)OA#Rj32zztb^Ep@_xmIN$a<*6E`yn_E(Sf ziASA{bJqy*%wM-mndSV=C!daN`F5H#Z5sTkBn=9JNZPebOuw2$=S7g)+>QdXub+~8 zXhmEwQX*j03Ai2LuH~h$w6bnJZV5qOp0F&Q-RJB~apLz?ave%3c_If}~hcg{pNS50>s$h*Y93vD8V%%#>4Bs?j5vUq;=v1xx5+R0YthBoNtW6Zfw#^N70 zy?DV+{6QkHx%mBSm#PSLY0ksDqodzRk7upqGEizA@gQk{(*f=_yf5K%kiU!GvxbBo zin}kn*m-ZgALwVnNS`jwySJ^$jT-{W$7p1B&+`+*es)&OT%x@pl>}x{&SGbm@;nst z8q&YieF258!m$!8KrMOfhoeUWyy$2tnzw97(uiha##KF^W)>?MnBVyH^L8& zqVRQnk?1W^8tYuooNEB%ni|09DdY) z=a=4ZgmRpd$Cu_LGFS&4!L5}z_9babyTZrWVAUO?o}521@` zz@2&F(1Zc`{?ZbD{N*Lp_e~PMc`hevqsMonecw8Ozp$pUaTGzP1n+S-NjXD+MWf6{ zw!`Fo=_;bX2uDWwGDvdMc;H;p{hGUe{DpTt*K5c$q;7Ei#McV4uBGf{jGD=hq>>sU zRZ<;z7|n6RWGJG9j&s;4G^N-Z`g-cL3m8Ge$@HqfZQ@!8TG4jd7HZwLb00nd9{Ql({OWl%0r zT#(_)zdP-u>99Vv#-j#uK9eG@)Np4V*71RW#R?)s<7cTe_7KJ$HM0+W40{$Q6m=fm zoioq%W5^@n=Rbr_IIoxZ*2QXzIB>|j?L6@Ja_un%N(;4UY_Vt{&%6a{-bgLfGr;Sr0Tk-Qi zfLief&Tf+vE?NT*eg(WV*pXd5i775PSeG~OP7dx^NVdpJaNk{8)=RW;nZG@h+%fZ^ znZNgM#`CKcBKC2Nw0twRqU~u@b9OSf6%g) za{%#yZ?5~}Tm>>V5utKiEB=As8Ylq|V{g5Ls3-xXtVe%Zg;732^RcFvIxm$aq-$^R z<7eCKz%3%>Y`BGVf@`Ww0fOksnnwp5iY|nMWicrP&P&s!#kM@jHvC(LAfgX{l2mdd z8BNePS7y=1(L$s{&H`?qisc5v_}PTb z`?#tZQZBN;;?);J2{%ScDaX-lb@Q_iV>8Ko=i|*ERS|Xd)A{l_?$a>r7pZ%O>&F=j ze|14#)tsUDFa9N(h+7=Joz1`&n}Z>H2vngIAMCmIgO|twZT1V!83#rD+L}Rt*&>)7 zzhl8Ec(_bQ+QIoIV3%K1v)5+3G5&W5tqfP1i&l+ww&F`Sc)C6z5MO^P@ofl^GuV^8GKO+kbJ%Jf%2euL%a+Tko1&Zgs(BrdKo{B{;)G7M-`m5z zJZYG+GO(^klw$^IU^gl-4=;SBeOP{zq_+B-1IQYL-%D5AKbO32Q*3rwz|4wKtH`Yad&@;|qB)_-MSrwA$PefZjM_BSkZ zSlM%{Ot2Vu|6H5pHb1qu;At$c=f}$z-*EK%cNB$!bFl8fd`5Z%SEk@SYPO}kuUx!b z=Y2lGkVFypWHfonC0plRB1!ElhUKlHXNr0J_@6A-$*{5sit1L6EgTnZ3gOlsY?n;S zgur}zprvO1#|72=oT29?>pLCh6j9@6dYT8~#KA$C2)k47H42(j_(d_EtXTOh{;RN8 z-Pv{&{L6nCU)Cw8*s3@-)_CHHl)8*-x1R(0Ga+v9;;|hjhxppq>a!O92%N?I&b6>n z>-u+gIFg{?<_UE>e0sB&N2-U6b(*fobtQ8C|KWFVE_DJh7+LN`&f$9~f^pJagw4 zl#}su0CY21{C!Fv7prT~us9K(@A@G@CMgD0{G1%cR;Vkx!>X3|-x2y>L9W15LP^R^ zMD0a23FMsea*)_5rtQr22xSQa$qWgVl);E6yTk|4Z+2yY#m~=A!1ZVAwUeKBQ=aDN zffDhb-@|d_Qq;?^=3%&}yEkHvX*F2NF*4_n(bX!ob(O4-@0zgMqJr2ZvUIzgi&1-~ zgZgI?;zs`v)Y(Uuv$sv8qtpSSVcUh*$I(+_Dx|sNnGLNcZGF|hyKsD#7`kK#F{JaD z#eWNIL$zM)H^8~@Q5privYTuz3xM1*LPgc3N=+a}F<713(NmTy^_KN>aYDnyPMx&j zA`fn=ca{}2O$JzeoIy+qD*#)ZTg;mxBq6aCvf`6WZfVn&YCHgsAu{5(hXZ*-$`bg z@Q?x~jbWFk%c}n-{FgDx3~kQGoboQP@;QA8HPzTYRNjB4_pG}8EMX;L`lYZBJ?ZgJ zmk#>-Lz8lN7c(QE?Ea%;#;=hR)w$tGnAbLq^fvrJiVQ_zP^+OT8?PW{P(L2QT~osv ztl5Akf;trgM2sVMhCEbMKs@hl5hD2_ks%nB4*$U3ZHrq(hXck9p>u2a$Qdu=A7J+9 zHRG!m_k*#vD5cNGt=-^M`S@E+&c;j!=h2cSsVp{M4q1Tv-Q(8^h#+(kRxVYl;!iaC z3!6WO@#XGG-^m~X=mbJ=lqKWEE&0};9Bq@@6Z}&5*0wgqshtiqtgjnra1e4~i+D%L zC>}B_hTxJAN$z?ONei@tWl3FQe)lhjVMqmU(a;FoOGxh*44+E)*?>bbuljU72iwNc zHc!k!>I{HQhnXa65hB@Vso+t^*D9y6V`qJT46}BzZu-ZQ_L>vrIp9=^Gs40%Cybfb zesuIG7l)9oG|WtBe+GHxl66!fH8YLZS=GNo$a2`@Q)$_kBqa2DHAuMFnJ&YvNTm>u z$tgl@lHDD`AS!GGH#mStCy3wO7K4A|Hv3lEs05ff9-I{1P9B7x;B*)pp-``V=^N`m zX}l3ei>L{IpCceRe|EF+V=wmBIIVdT(3C{mco-5YBDQ5=8ha=EM;}2a@~yJ}ngU17 z%|*arS2=!>`XOf~j*!fD>W?p?2#1Gm6{Q0e^HTcum#n#o<}IPsLR({MtT>aa#$0(1 zYCj++RifYP_4#(BG?yYu#=3O;Enl?ae!IbuHUJrA?9$pbjiOCj;9B**@$B1WVvYOt zQ{q-W?Mca-YzIrmM`VE~s1O$kSM=fBT;MQ|e6(rJktLe4WQ|VP=HpiE4(|T?RSAs^(_)G+jhRgTAT+NfTn5AU zk$2g?O^%UB;`LB-rLz*&04Ml+$)Q8Vu~$cPmk#EAc&;zSROe+3L_z22OhKBN(GDPQ zRaz(2IpiPP=kdg;PRes^d=4v1E4iVNbH;N#BEviy5EdC#HCI!zKA*bXOsZ<$)L)Nx zP9%V*Tr@>kjru)e2PMv-%^KmNkCw$52v^sfDsB&@FU0kSO}dJkmx8;^l*m{+3J0r+ zN-Ezbbj9t*)9qD_MUCHI^>B_u{MYo{_1A}lhj)3d_i*G$=r6PdO}~k@U6$S;=!eg+4xC9z(tPLRw4J2XhQPZ zX)5Cton10w95p{U(K5FxfPfnQDochutx}g6-`F$%q~&xHvTcN@;CH3q(wpp=$*-5qt@B`7sM+IH=sb$&!+iQc*Jk zKQdJ&jf@2;6VryJP&m~C(=v!b4YfpW(}4yM&=cuSaaJrX5^Gdz9)=L+?xHxqB?oJo z$>?0l8g7FTdZgicq^HA&5c+dI)%Bh4r05tWmXyfcG(WuDcCmeQ0B%`UtTI`|^Qdk< z(cE$44>FJ<>$cj$wTgY`e$7#n`6To{03()6@Ut-Iw&Deu)I!ZV+oIA3LKt}JVr1z6 zg9Mq8A6@FoRrujYlKwxSWUYdKsbt5M8;-@he{VHzpa=J4MzEZ&j^AYdg>Bs!PK&^^ z@^^MaMd?4yCiN%W`wr~w9$m(rWes~WO9R#u%W|wj$H*%tt6{UNn^eZEcQt2jTvQ77 z)UmfKh`(&Y%VN!8gh$GqH_N`6WeEDUk$65`d~I>w=?%3*H~9E5_?QtPw+QisJd%)a z85y;p>ZBsdt_Lb{5k+E%*BAV)HNa*L#z;%KkTlUehIM?x;v9gRv33>m$9^bmYeTAE zGTKV(!w{8lY(M2)ahns^l}y%(dzU*)49J)X*pxP+D$_KirNo$>(W47Aj z$KDurBtCC1f^p}ZmGk$>whCViTtk*(43}?2HMQ=nm4^W}^v+{LGrd5_DBXr?RWJyqgQ|bdH{z;R^>0zLI{I@8uaAlAhOZd z%2c$cY1-VlzoixW;W zLsgDwJcYCsRn&iF&?N(QI7}a|TQkR#;G?@#wmcaJyn>2(GlZR(&e^_y_Bgr@=~*C{ zAuGU?u|Lp!ZQGsQ8hc`Cibu1aOpe5+AMI!4`T&$lVV~H$&=g85iFb&6qH#39aN{x* z#)+`hrP>vWItmLzu*?(;O9n2)gW&zT_v3RJH~jgmO%svJSrleyZx}BN z7?aoinqrY6Ua-FdI^qn1yA{aW7vl#t0#Z%Hjm94#_1vJHn3$;VLl=rz&?_QFb>wdR zB@g(@N;>|IX96$uTZwmwbu-3%pF_}eGVYc$#4IV`>BH(R(dyF_59+mN!e&xPX1COx z_zd_2YAU!Qf%jbS?SfYtF)~!wQr)SdX`h@pF$s&se%X3hUau|7d~Jyk|41nAtAM+^ zeL?wDvs!D=)_H=n22Mg3q%oN?z??!?kpWB=hjIX|&HHl)!gJJN|MownyB)K;v)4$o zhtvz-7L86C1J|phvIu-yQKIgQ!jNEw;G~GOExxvvpS4C1H(MNW@*rBLXL@eFs*!pB z!laOwa-*lCt;La#n;ijNu>UcchnHIB0wi=2H-acGXo=j}^^I|COly!}mj za-ebj>Ri$cv8U^5vb}px&mz<56eQQPPLxTD%JW#@+ARXbofGkJr`xEg2J z?Civw)AO&vid*4ClnxV43ze zak@%H4q^HB-WSe+NLcqds)SGnG+%y;-yn;SXVBIha$zFUww&tw3n?0xYXwYH zm--UV8N-<}4F3Gj)KOmW1;BT+Jrg(P?Z3VeTT5G_>G*Z-ZgV(r9&R^^?$R6}Y+moa zWX6Z;UYGZ81#^sKR3rY>(VsjOzcg|;nUKRhGE%rv6Uf&iVr5NXbSkO2te4|N_})2= zcVfRj5Fr$G6e#tAHn0)s$|_*hVJ<$*9h1~fpJX)b6}~>oop~L4+yizyX}`AxtQSdw z<!?OkAnqo?HHTYesLhDX?+=wCK3-i_CT0BPwM)&GQ8`kclr1s7<5y;@C zd&b3nYE;AeS3!-{XL(oII(BMvm{|Rmf>p}W9bXQE927ep1LsxV!l2%3>_Il{{DoQvw-XG7;-Z-4Bs(z7ZB8S7y1?85<&?uUK3Msq!vv*hc(%RDTl~D zXJz@0vvHG8&XkhAeS+Tk9_?DmY33DG zkad@#^0+=4fKz^lQwE>lG&^gJrTGb$rPms?+k+wcG+awDp0jBCM?gkL>)`{_AJ}vH zQJr}h2-@ws-dTD%N=6VAr>tdm41w0 z6+(v871+(ALSoj>VVodXU^QpQw4A4cz_W2Bl}Eg1``Rr_;sAdu6OU zKCClVT&newrupatNO`A59b8LVu-hIm6XqO$$=gLIUW7E)Ww?9x(I2>S?t&iX_4S zKPxkXRjjotzW!2x53!@C8h|aJM$Fej?-`Ax{S;KBO8+|dR-cxDy!o)LeE*kMXta|Z zoCjk5mbjlOBc=EwCOodxD~!p8D(-7JPkE-Y1oJo|sYhv+e-C55^9Ubg!5c_yuWqMz z4eB3Fj0tT+#|@S)?=oP0$SFEZU+JL%wouO=x}PzIr&I;y|86;n-p^pl_Ui}HdOI?! z&OMyf_F<#}Jr>Uw^f~dZSG;NFUxd+jDaTFF`{+-G8SRkWE8$nI@3u3OzYQbt>$#h7 ze=p6r&-Q#lb4UEu_NgY--2cgZq7iyxT`v@twr`Mmj1bRi#|T zS?EZ#Taq8Vtem=({I39n0{sktGz>wO47`5Ki$TBgDD|*);w6wZZRz=kjW=4-vR4m( zhl-P$#Mx=Z)J+Xt{MbsR28olU^m)g!5)~a?S31BODi@p1GZ!Qa5^0xtgXS~z`g8$2%C9vcfOrH{BPmxjwU^Z}l|r8DTmU)t<*0{t@$KUGpG<*; z8;QlaF5Xt-N92A+*ou_+#^9r zuEsC}-rl8Hnx2`C8~}o(d);AnHT4ZELn2#!TZF7hntao;o7dpY(5U}t)MaWLiQm6? z-X=0)Q)-VjSp-N1H%izM&!^6V2vWV=HR;RZtmgNV0)l38frmBnU;;nduFhYm_rIc5 ze{B-~N!!Z0{;1bzKU4OBt|Q%qISVDV2l@+#G5>ysK_u2vk1H^|+crX%IXqvknJ`$O z;(4Eyq!c|P3(2Kct^cw@WsHzbD{ih3f7*4!G96d@^mIT!c2t^;Jl0;2#S1q0!&>Cb zj*`%hAs(g&O0q|}@x5JlWuxL*XP)|TP34=Q@8;*!y64+^hfQE&Yxdax2F5G%zp#4s4?(5c>tXBkdovlY@Kb|Ui1B`eCx<0I#O*G8BUMGp+Lc+#jScHnujD@UyF2BHhj#mF~!Sfwn_zqN2`N+`i! z)<0NEn0*T7Sw;uTcAh`DLRRm)l4-~A4;*lCia#TYjSJ8pa*2Q2ypGzbmn@Pr`a*=s zo;%xWol7lC?u}ZY*KEd@+o{I~&&@o~R99>Kq(-N-@%ce9?8ZbU*%hhBb13TY{{vY- zroYr)c^`R{?!D)K9y#swGvqgCo+Y1u@rB;Ud$TLthFM@(zye zvnJeEt$Y1BQ!sSUx#nVkO^!Dt^gxyXsp4%V1O@8pbedXzwpVBO}lP69F$6%Mf{yvTHkg%Rq zC!@wfF)E3rt<)mZ=1<`)Vk+&@Js6O#fgzag!+wyID#OA^-cKSO_kR2BZ-~RdH4cCq zD~BbXAsR!SDGVLdpaJGG3}NFEpG>PM1|sGb$0h@R2%*#3jmQ)Dm$G0ESjhcR*Z1Oc z&&#waQ?*~@G!)T+j(qv$SBMt}pD>mzj0C8Qazb}HsmcjH0&OA_aX0cssO6Z+!swVY zgC|9SgUFCeZmA1V&5u6vNSRPqCzoA*xtiUVm6gIL3Kk&gz(NO?{11^m;m)WTr3hP8 zSxygsL#_&ont!)<_amH87DhwKn;f|knJ03TY77HTc5nbztwqK9o1}@Mh@uOPOI&c~ ztu2SCx|w7%?w;uT*N5XY-iY-840stsa131f0R+&nq6s3c0c78%kAd+r zR!^z|(ykDnV+a;rekDlewTz%O%Da8nKmI0vmz;T-)Ya4pQ$RGgHfh!GeDsd=5B6u& zOu9F7mmGpudq;hzh8*H^BuwO%!o}D#^QDQvAl*8De)P%Ei!srkO*Y0E5I*M@Ny`#EEtC(krjX`RAW6XPk11{O3Ra#x*7o9OY%mpix@1ksx6hFy%++ zEc_!eVCkksCaJ(`E*uNj&r2`ABAwdL;YswMc$c= zO9JkKb*yMuAuql4f*ij8kJKPw$%-X#^6ONiha%_=veKEP@jj}72gDB*lgp%kYI=py z4xa02LnMpE$fOHX=26q8CmByNxDe4^c=AZYSWC2OoS$cH3uNNK8WnV8NH#qyIXF%`LD9uuDi)jJM94dX8@sv8s&|* z-;~2(AxPw}B@0f;4rE?e4YO%Gi4w*KE~y@QlT0SbsFz4HY6A4+=zpL|0nq^ugLjP^ z5PlPJfA!T@s*WfJU%tR4uLh593YSjZvSk*&35d7Jci4(K@&BwFoEoL&bDHN%38Tt=oZ zt5%le{hl#(h7u%-JU;n<;$ykt&gm^=Ay3=H(iJMX-W`iu!795>&5Uf$tp0YNB(Gnk!hAKGGj zekkzzK#&+}Fqp^n8#BnLA4RbAd;85d#Q_fRx<6kJv0+GV`17CT3)T5W-H1a|?--g3!hIHm<)Pt25#+)2VNwjv3NkH82orTkPrUHBJP+dl`uNad?X`cts*w>g zZ9?x)13^ks(%fyW!ZW$UlS(v|GtpXPzmCA9|>K{ontp9>hed z@#9JSo9l`2!v37>nyEA38SI)f-CPin|Ni$E$hUUf1?#mKx)Eqku=Cz<_GW4po+jvr zyK0KHm{-Vu8TN_WMUDpHcoc@a1{v;s5i6Xoe^>l_%Pl0y?5Rz zk3RSSKoF2+i@re^Bj|V#x(gBZjJngPH@-179*C?^3;f|!cZcZTZdlu?ln#~#ov#7Z;tKrPyQndzx+~;I^r;Yx#7Ai<+YcemCG+VPqy89u5@=c zuhMil0#_PMF{Oq-=tB17AUJaqA8`chS6MHKk_8If5VlQC%bE>2JXdRqLSz)ehrUWd zgaBrE9u_NnMkddiBo@O(CPgioU*2Pv@5@=gI9sm2{aVQ8eX`>=JISl>ypnlE89qS- z*wcxB_;)Z9XW{rust{PREcbzWL5R-2@+_H9GeIu+)kTV&$(e9}o_2}5m0Xc;2%KG{ z&|t#>OF7dt*gQYlH^(>t1V+Ckio~j`YvixD+@d;=3opGieevQdjX?1Y(O>FSw#tJs zCpag5xGRJaaY1+3;54~;ut4m_?;%7>;60gtmJqlL41L(Lkf7!7Y;}FKe2X!iN0;V- zE7}~XKxn;q&7b}R>%ko3K(UVs1&$Z+4GxJ5M4}qjc4U%RKr*0z4d5LI%s8MtmQ}!v z`g!h!7haIx{qAf{3VH4IH^~1!`IP+pm#4_4^R|$07A;BH1HJ=(5I0R22*M5dP0D9~ z*0mefE23l~D5Ox4m9VlK8e|4dGCo|sqZj5&;>#As4rcM^OC{u?$*BQ8tJ5MI%$*J- z2rp06+jqL_t(I z`%4PP$t|6?`8jbdV18L;8U6|pKyYjG7~{Fm}geV z4Qql#Bh1hUkusd(+dPrRH`mrR*Ip~f9d)F%HZFsxjjo^p`Rh$L4s*}h^pE3zcDswz z>6qQ%^bH`Ska5H_nH47Oqwed@JMJ(xedzal@BUND%F5)4C!Ung;4quXyd-N~i4r&# z8;Eicd8O(Ql-Eu!4Rg-|+a*L$z&noivwkm=HIDPdCs$p0CF%~Tcyg=xTgp#<@)LRN z@yF$V{_+=j_PH13k;k8uzu*6Vu$+GSZ{*k?|74Wfj7tpTM6|-lV%6d-k!vs>`K+|x(R1>zS(lh~h*mw>4 zEzC7`-Sfdbsjrgi;2x2)M zrq*ExUv}*FeHLl@s#PN>j5@|7V=?R37YuOoz~6?MX#1dZSh(~X*<+_Y&0Es@j*P`5 zD3iCCBrb^HfMJpE%7%n@eu%k7h{0%;n(Kr2G}SMa>CgZY7hWp6?)qK%#mPUH<;#|-er|&eH z57!H#r2gAjq);<|$jZfy66i6+6~;S3f?_W3(P!GckFPSRkhRz<(>9(WR{H)?X8?vP z1Ru`&Z&pf}(g_N-c|Mbp!4^a}%xaf4b=(m^1(&bC!;C&9sr1p_})5Hf% zWLQ+;lIfdH!Eiv-!AXSrfV97C0Th7vVG^(K7^!*WD9KoVMsCQ%QQSD(wQi}KftYMqmfG-0v_~_%0Bh_#XL=l1E z%A*fROmGjB>m@}<2?FFoL_?y~(&YtFG6;S26N!&UFd2z&7;At$dQWe!l!NAoCTsHD@0#Y>MAgH+|TiY7`3B+>}Oh2Xi6Fga`eH5HBVwkPIU+()fb+B zULJeoQ5a`z12Ntfvit7eg9Rt81mh+zMRyfbNA)NSE`tB)-!rk&jQ$Oz4n12(pI`ch zjLo8oI*04lK@R^)`+!s;s%^Xo7#~f)LvrH{H^?V{AAcgZBQnLJg$v~mmt8KuJMUcC zYO8Gl4~D$L`~WVTo}}+eq$7rdvVo7dQD$#TVAacDzSJ@(#Pm8YC(=kL%Y^sG~&Z>EzE_FN~hB00<%)+P4hE540JSyC6*rij))Vu_d5fFtq zsu{C?nykJVCAGK4;ThKq@3FA_unc9?R~H!(yS^?<00y1JpCT=!=%=Z-KZ6g zkanbzE-G=$Q2&r2!UVC(rqJK&4}ZB_KKS?pwJMxBW2Rj4+sm+PM*!S(3!9DtvcKP_ z9D@<%9lK2`7&6H4N~BMYWADB8K^leGno6O62%;?~96XKR44qjHE*{np^0L`pbE z#1tJ7ftw2=tmwW+JsNj7LST%YHXU*W#Ig#617#TeQGkf6A<<9D38={{Er#e0kFq;7 znf4;o0KdsMk=%`5*tpRF5=ZvHfk+KrM8x=J!PoNgOD`io($;e8ZMVx^;54_|in)@1 zco#pJmXWsjq#7Hbf8{VV8lDpbTlFGhgU5>ogDiJ2vEnzyj)>_5F#f+{7>6>DqOR%`uM`(iwJwg!jIGw{Xfy?TYQ36CcIE5xrzG@U71C;CaOf4qy`e@0{Rnh&#!HwIW-pFF-B{I#NA5 zS}y<}lT*TNbn0zbu}r>=n0!Zn!EfrMlTVh{Uws{sCg#e|acpo;h&b*jO13nTHx}{f zF>fHLE^|9IM-h7qWQLUO7DyBZ)jur=%8^PeZ`PIaJ0e0ghz!gR(D)m#y&^k&dk0yx zc!@d%f4yjl{0sT4e)XGQfgl044rI?w@-C-rFX{#hq!qe(fT?*o2osloyK=Qr_pD2Y z>oifK{)mgHx3OOs(@ha7X3rM!N7A<<3ZZ2?vD{admX^rG&Fav`NG+aTuQYzqtYRSc zCG9fGLZ-s~_}?5Ww_JIf{PC|>X}F&6?y##IzTXjPS3i7X8e>cXDT=( z=tXplVX6PRNy6PAP_!I>Nmi1KWo1*nyzn+(=EBf33ZANlEn6-HKEIhC+} zErm2DKeeVi__4izFA9Z@ZNp>H8j%oVZ82;PeClI&O(wGBw|Sglr%VT1CnB2-L3goi z@p9dfbI(bOK3ADTHr!-}8dqdg^(ZTj&XV-&x%|e<5L0eHx#{woRrHk+(K9=f#<R4rfy=p(JDZ7#4)v&EMYaiGFi`3_PEnpd;qd;UCm_8CI1> z!@#>rjD`u)@SUR{gsn{eHu4$$?)0y+AJjvPhr;Z}PM32S!I69Q!hG67*;E#V(Ij@* zVFyib{_?9Y%hIJw<&c99l0}Oa$;y?`v*v?sK)<+7C}u4yg|!{tGg{kmDfdBSH~>*? z$m+mv&OhOQoW>%@UFjAt40G;)RpE{p=S?@?EHA$NvPS+m{=^g1+&#wFB;86=+(&Z6 z$l^?`&ZrcA-}qQRDY~8Y8LwXjN1=KTI$Ly2(|C;0>{+Dvgc24qt!wHF*-L(mg;Vw7%=;?$B^U?|k^Sa+Zmn8TDLb99B3V4t09a54^+xH}Pw! zN;heL&g}&EG-@rw7cC*gI*j@ZJCBmf(obrUshPwL{2Cm2;UU4Y&+kt^{Xek1 zZ@E=odG$5fdDq=wCI<&sa7bBkNoYC@(K}&(My{a(Mn>?HKJN>&%u!gM%oZD@B(=931^JQmU0WnJpvS;?n;`pk#Oh4l3F;^)X@GLUMFGpBif^BVXjrvw~6E((K|GHxv)MWc)%?7%a1nB}wN zkeGvv=IZ_Z{os(6$&6{!Y{ z0pacK^tD00P6;qH7LU+k&SDEz2in0p%_EtN{>;HUB%1g^-lUZ{VDKxhk z(ZrKJnCL<(nBW;x{59C;L8v8vuR)lwdT5DPQB?u#FiIr}2<-QE-UC)&rEGHR&GSBL7G0X;G6?mX|w;v$+7)w1;SSsB774}Ynni+Svfia zCP`N(`3k-zgHaJN(uEMGmhiskp1U>G2Z_>uKl@a6-*Zp7|A7ajx33R>)^S)LXoLB+ zaw+5(*we}~#I}oAd@`0@4^ouimCu?3i|>;ab<=mt0SQ1)XDbHimH&l9?1?A+Ox}9? zZMpus>*dhH57)>aRaMoxwz3kR$2XkjZ|cUmhL}<$N06r3;@IA{&Jm>$c2X@3t?;G6 z9txp=qRnuLpwcdx+#9KXl%gvu#CBA$w>GwGWNlvJBBF&_4Y;N1y6W@^Qvzfj-~YCb zHdx@zlP%`Vm&cxa1lBo30IRQ%(6%=lfk`!$G*(dUM2IIxBT5OnGkx-OJ^R9&&&$hi zy(I5{{GMi}U9jY9VQ^N@5aaG;J_&}-2Bs%SRA?5$e@zl4vmfJs<(qRwF&hJy63HuJ zLFcldNjfBQ5i>WODTf?#2(t7}kt?peO2Z-Dar^Budp6AKXU@vY(5+xGYZ3jM>F&uj z@!t@9(E0|EHw&V2a!vUuVQGW=#bJjWDtmlqXL2Ecn zdB@b3Ier^?Jj=e5AWoWDXQaH~`+|B%G@F;VN>5X-l!VKaXflyr(vqUz)W=+U!^JXh z&OABhz~houlh%cF#t9-ugup_S#{t<1gQWA`%t+P!^ z5c!-srH?=VST=&?-ThDeU7A~(<>o)!g3vyY)2Ca|BsT`^!_+zGUq!?+3+*l%fwdb>jkFhchlbzroF=Q%K}_YYPGm zM3{!FI1!exRh1QR8pZ|~%ZINO!As^*XOC2i2Wie_&K=Bi1-462@?2-)>e5^5iJwj9 zEGDO~r%yVN#ymbJQaX>PyeG^4cO%?NF`O?Q@G;PWg`)m0h%v+9n#MUUt0W~wyLP;+ zd+fY_r_A4U%i#*%{ntBk`UR(|p2-b_KWC#&hp&x#kfJSpmg^lm)d6G@t(s7Ybq_8O z7mDzL_99UkcdwanB_-|>WF&P8#gVP;E%MpdpJ}Re5+rv~n!#V$??~T?ujs2}gSoJ~ z44Gad=PBM{+G+X-89g2q5_%7jBfhS8R~De z4q}oqDV#WL7Qn@mJ1T>39Yfe~goIrm0?~qw48t*1mki?uyR@~pOAvuzFTV6LB|N8} zdYUX;zD#!6WoOid)apevEsvU@R24^ES1AYj?7(_sN{wnb$>LDgmjwv9t9M9E{_{nD zkSNxqSgd}~P1*IkyUMg_(`D1Sn@JV)M$DLd$RP(xDH2sC+;~OxKVOGj zuOvp)r@0`CuC6SDQ#gIF3~@CNf*?e?QDCE7^yb3PS0~1>9=<2*L}ij zz0aZ!E?SE68kRQ;eU^Z)bs=-{Oxb9Eq7)(RG%eToQsqn6^vtVI%WZ$ZMXvh&)$+(K zkIUBcww8Z?mS&*SG{#61aay(oJVEJ){|}Swsm`RtCgoF+9v=VrKVczmN>GU4{Md0b zMaR+=OXb$9ZWkAF(WER1aGgmI84%R$2z435$?sBDY9KvkFSTN4Y6JxW0ij8MEU$U2ovVL zszyq%sn}<~1LW~%o|CzAHkCcUx4W+C>o$epu6NT3zKVfBQd834yySm z?4vOU*m{6a&z?O;uDIfA)fpXsd(6?Y`ySuXIkRB?=Wn^C)FI7ElBJxF?yOP=ooBgr zim|b+sidPbHPs|l(4E4vvu~&qu@oD@@gg)7Iq$LT+$z1z{lr>Nl(25W$-|LzVS|K` zBgJN<*+JDSqP6LFfkFlAG!w9A4oR`bXZEG5J9OS0%O9F`~V^F#Z^f#MZNT99YJj|s$ z2(I1ehj}J-t%NiCUs+it-`Qu|E4Tu$kgZRM>bQ*_{b0Go^+Y>I*qkFpQB7L&k|Fta)fxalHSiClDl@ujlaW}D#q_wcn^ zsBM|!&b7@D%g>7}lEvDaJ#EEH;->2n)VpX|v4OY??S+ ze8Zq$fQV_zh7+ZK$=?P!_8?9f|KjV&sVL>x45CBg zNn0R1i4eeTR8+rN2?vme1u_QhH0AY8}V^}M-~R#qezI{9xeA6joFFF z=uElBW4oHoK|GnDZH`a-FjAfVMpar2u8HlkL}X*QNE3A{#GTyeQ|!W!G^So82!tC# z{|#hoRBT3l;4fCK!()|EgpVqcnEMYt_)sQIo-9+RAjmSTKp8~!lFKibGfq1dL}{^X3J#F-W0Z8q zl~xZD+=O<}z8!0@3ejSU5qDBuU2rD@@`hnm+|%EGg>1D0YGF)~x-aOFUQZW@coo(= zQTyudV}fqy;nZ4d=s<%3BA~&QURc|~FDOwl*H5Br`8b!woQDt}Z`Pa*#OeY9APxYo zq6zzwua;3RfrSTgSTdz>8slNEqHB=ig1V-!7k?!```wB1+BOFmwnY zq)*L^YN@KNQe?)KyE=zJ0I;7gvLfXOq5)u2Kn98=o0|ugWH@xyF7SZ_1JPQ{KYS|o z$z)F$L(-`W@z6Vg!M3(4qZiPA2VtAQ2|+A<{Gp4B^eg$Tt^PY@zsz5fEyT ztkDS#xjJ7W;bluZ9Hcd)FdB!rd5x5~5JH5l4a8z%O__3= zW39)Lpj)igJt8RM7F15gRRn0Pxa-G!NsAC=s%Ch->G9cQ23m z8N`O74RQIz#?knnN=t9VqvSPtX@Iy|%eBpAj`3$LQLV0Sx=3&9{^9e|N9c zJxy~wtcc-;rq7?O+>-9jfH0SQxk8|K6+3qMw1y1W<4mfPjU$70*|w3Wkw*w8REn@K zwGI`JxsWB+N;W9E=q{9$$vA0bf+cameGq?`O`F7v@MkwES_?4yt{xkDAu=ug2$qVU zClgUPfHY98A`Z?4#e-IV%soXiY>eW>RcIaB(A_^9Haj$Oz%Cd>3oI4IWfc8Uf7XxW zi#%4aqF??vgr!vh;nl!2y%<4jNt6PpgL#t}5qvxmCBl>GH0nwi8yoP)p8(Evba++V z83fQ&+=y$2IF?Y!t`LE@Hm{KL&OJvqm@xx!`!1Ec@3~han==J}#oW1bjf$Z|9gCs{ z4KACesi4RiTM_+7pTHhZrwsa#%*sV zE^e2Bb~spK*Bevxt&BM{c0Y!ZNb)90P}%1o#3fE3&Z)@7M8c$c129ouc&9fnXjPp; zJhB_Eb(AqKTe(z!W=!1xSzH%tdhzlyB&dUEV(0C4kzXM>;B9}r116R57o;I(?Ux)?rQ=VgC9F_67Udzh!D|12wV*b43+J+U_2)R zVi1WIViF;(6o1Tlb70(tDAwo*IWxb-1F;N{D*CT6@K8U$X?Q^W71UYc0@5MjA`xR* z1@Yopbd1yq#W+T2LJ&_7BaDG*;rp?%2}JyN*gw`pf;h3p9nr4^#S0?VjyQpY$9N)2 z6r0r`v1BoSdKSi9;u=wT>t;Ia+^z2ZAClZ5O*A);F1og;oa?t)?nOj7wH5hBNBM^86dm$tQ@u zO~SO>j^9i5=*aan#}NXOut85V6Cz0s-pc+0|1bZlUc`e+fH75UIZ|`dBL;R2f^d*< zy8;w{nE-hMSyODKh6gaiDu!8Xd2OlK!EGAocBDE*TM>j!qC%~M7Hk4Sh_=xOOS3^B zG9O$Bh?K^2QPXV%s4IqrAB|PWRgr*k)H*7_hQuihqN#fA=)qv~6GR5telNxg;zRgB zm88y~CJ}9c6R!t4nh@?q&FO5wqg%-9F}YTMhWDW!sRpUpi;y%E$O&%)eBxll)D2O6 zkYa7lZ7v0Ms;NKLR1hidzx?t``SW#umLrZlQhxA*edM0I@0P_&m&=6^-x2=#T_cu%yi%r4oQn04pfB1g zb&Yl+jd3U`g|4i2dW}>}BDaJW3-3^WUu(ZKAu}&id&JCBg7&QBDu_rylt{o-f)2t& zt0E$Yn%ZiqoQM!gc4Od-%&ylA^gLW6&DDuW{7_DN2E8z7aEZGVTn>m*5N&jH0TJUF z5<8Ql8Gd*i9&r8H5TTl5Vt*MM5PrBo+O!hHwgsCR66RIKfP4na2b>0(34IoSpksYJ z=65|)o|ALuCV~bI;G}fo)&LwZYv^o1DoWi*+DEdhOoI3@h<5nHF~(g;xs@~)N2{>35X?1+;Gvk zy0+X6gAQD$To{wd1d)Tj9_WvMI#nObzGPHTr$(d)j+{^ljt}WPB3qe^s#y~^uN6ee ze2GB(W%(ENF#q;rZjG057-*Qwe3Vz;eMO#n=}D}OklcJl9{hV!tR;$@0{E0xlpuR8 zl=8q2TJVkz_IhOH(gxKr#d8EC(CL)r4a?-HQ;w8p?s*P7(3*4}iM=O(MgMuT>i9@V zTtV4*{wyFuDr5+B~qdesCx zGIpkFXWJ}(Z~|SOUDDkEML4c=&9IbLm&xRr5Mdw@VHkcbJ$*sx0{5^s6{cK?E)X;V z!9;e>ya2G3L6qqR7YQ7Hr-eKQ0YROF0U@p+<04^0&Zz~dR(Mr)4j@c4eISh2M4^|H z8?wtPNDkOb&K~w=(%v&DUgk(*KjS3^8FrML8|siOAV?29@SyCy_g=Da;X;`=Z*!@s zsgcVN_4{1tmh28hl^=c)Gi+qk+cByLd`V>ZaU=RjbvZ=O7%Mq{LmfDXQ$Ku<=oCwF zorGgW$D=k8xk&iYgd77A7YI^yIixX2+{n!h3E_AyW23#x0|W@nw#GII_F?x7c{^V* znggdocBz^UU>C|4^s(n3)vz`@ZM%~O2t9b8LsC7O-gR9a$#11$04JfhyALt(T4d7n ziJE(f`iEjH{LRnA3Uj~q{*JVOrt!NKY4k>cw}(SP1foe_ye z2ymoBZO!y5ybB;qaHyO(V}dk;TUy0pIj$W)5N!}dt)iw}s_JTmh6;vg7CS!F&BB*V z=Nod3Fho<{ZkPwR_d*os6W`DfI4ZyrJHzP0oLUN~$WGILcp=v=q7b_ue=FED;7vgx!qWqM0TvVo*1;&m2g!ri>qmrnB=>_=+we_%W(*5C zrE+jd5wfZM?S-ZzS)bVB6Cv%fxhctqEqPDg+dH=n4<$xa^sL2RvdVl`; z=WC)qiZm^M$o;fB3-MV+MX^*mC{E-?05}cv5(p0<9Zd)Hec)nMoKFrXn}VnKA2`w< z7({^Me)xM8WiBbnrs*7?8Q(++?-8x5s1)`g&2fJN1TRYEDKNq=kUIghn1=@bGS8;` z{u5G)Z#ZqH{9w0z<;z81U>9MR#mg7Vx3>QF@Uw4!e(;9uvfX!7bTWK0lLPk2>|fk- zH1lQn5(obEx5M1i+A9^)%M6YQZ)oX+5=Fo*K=vk5HjO3Xs!I5iyTdbo{ySap32(^5 zNi#i&gF2h$eyN^VB{2GdSvHid*!hzCvHFQfxjO{f#0zQ1Nt%!cZHSxz&(zvU)l!6e zDQ@F`hJ%HoP3nYn-1vs&E(nnqsi)yP0>|9|{JWG>!uqgLsX`%qgn(%U_~Qq{<(50F zMg!1O!Jr@n7LLxc+8N%c>&R%+d~RHQ$Bl{nPyB`?2!hPQXaoa82!@IejU`|hsbv=AxjTxjchE|)*Fp2JL_ zMzn>_R6%@2BM%m~4mA>xGup;@jQP*9T@W%G+6qE6NSlS<{_3~Vi5QF5Tz{Qh^QWuj z3FJregYez`_xrI7kd6_)VOHG8KIB@+rLvHe(xrgoC1GV$hDvZpF8IkYrX2}K2;pUa z0|=+o*^fW~_y+aB(|BjH?1(YdcvxRME3)$TU_IddasaoGiDu!oaahK;_>RECZh;Pu zO<%Q0xDPvt$V)OREHju$hPdfNqP)s-I9cN5xbT|uW%`uqa`Lgi9BzVytFfg~uK3-R zNWqLr&80*khWKhs@j}%G6-aS`kob6iNma)LLxGNlPR-L~WX?q;CZftI`n&rgJIj!X@~kBytCJPbET zU7;%DL*hn%YOxkP*3d40z3uQv08##b z_PztKt@3L7c*s-UdnC>dBoIa*?2rUX*gK^Z%1LUk04gt#UYMHv#FX~Cv59ZCCWA7r5&skz0AFopovdOww+7J_kH&p-dX+HgTh4eDCLhL7X-NuA|vbOkOLTQ?gQ#4~o({-bwo%GD1m< z+Xk2SMtnCISP-v&2>4R2Mh_Af+8{Bh(@_vKGT@hl=)w`rl<3yzYIcjgqE$W6`t#uG z(kJZnAUmEZAG}~XS?O8&sQC$f3_<}R-p&>y|5YZ4C< zOXROr&%0K5M=2lXC}DS(1@AU8Cb~>_mLS{Md0!a5m;^9?wmnW7%bTzh_U&|0|6E}F z#Uxu~{NCfFaB@DLqG+)117 z2(?-9TZQ0BAS+jPcppyAVpwpm;!ph@9pKn2uLqPE})U0LIc+-XSKuC4mBbN-8Xl7 zxxc@|=J;a&Aq)QbPoyi)kT>3XOJmw@z2z39k4cp0UwlDwa&o|o49OwX8x=BqhA|LG zHYFh%kU>ac0|^nMfVO&|utR2BI5af1)?rMrLBKkHA--QYisA-hy|sE8fUe$*_k`mu zp?RiHjtkAhLjDvCQYqqfV!ZL#RWOi_h|NLvCNJ-W33RXT+?mH}T#w7+(!kSy|K}OG z`l3H562kV9?Xq#}2FcCJ6=qA_138MujvCkf5rO}0)~Sc)v_q%QK+4h`WimRdP~xy_ zRR)WHYqJV6pjLr;1*)teFRXJ9_3d5{G8j4_(0eYHIk$07Ork}`OdO*sJi{Ky6^K)O zCcN&L&9=D?!GUOdgcsO!k#XXN=aI=sjPW-+t@|7M{@dl+3CF`LX=5-q0Da&2{W{Ct zvVZ9S;ivhirrxHG4+*e2B*EXDjzsEXPSqWM?SGIaX!EhcwZ7g)#~{N!oqaga5(NTD z)CLU_#zQEnkuf$yf>TUCGNpkHw^oVHOR9CKX_V7WKTWQ_@+vTcJb5fsXyCT!Tc|~`+iC!ys@H1+|HXA!2P+U_w+EZ7bah2`U?q_HlB`1t-Z#KRQWfA2LVw zM2d((mtOkDB%Jws(w}qmuaehj*VqdX@Y2Ld=I_f*m*-xdZ??~y|7szV!JvV z;2NqKXk?Wm0)2u;w-k6Z3q$#O94R`H?2qm+f`)( zm2g>I3wU9Ss#Q>H)Fw=nDJ%^N&qJfJRj1*dxfK%-D+G-e7z7<87~uk^5|w3tBH;|s z0dOj!h$Qb1v5g@8`X*Nc->m=bZjydfml*YIe6JpvV9cobTXlzq&s+lz*FaGy%y! z(=7#9ca-La?)`zZWn?iWlX2j;3*J@bYbr5u%!7e6CxB}Ld|Z8FJ+gBm!=qo?2OAtB z=Kbn)x$>f`<(Qds<(B(ylIwo=m(Wb?9_9tx&c)@jIAzR)B8f}%Nla*eCRJU7ramV-qT6;)#awdAjxYfTBb1(ukZJ_}>icj(BWy^G z%s1v=2EmlJZrvjJNI}8b_nV7;E$5tjE?lrv#D)~@bB;a%$3tH@x9Bq$g>@SbyavS6WYp9G zNdU$gHjBC&rG+AY5-K@o6L9^uR7uHtNO|?h$l3;vE4Yyx%M}d^Lt!6!Vd!pZ+Br^S z^sz{Ex4U%f0Z;=6}6V1z2x~ey?5W0pZ@qPX=!PZ z#~y!N?z;VU1Q*B4QAhu%`!Wl~YxNl_9pUMTSd*#flW1^xW-g|+jNuQ=bz}#I9nnQF z1)=#s4{(tTL*W`|2HH5Xj%oddp$fgeazrsD!v_l{2H=x90jD3f668GiV%g_%`3;xK zetYdFmtS~)g`9uId2-N+2gnIWoruYo8ro`hV@!NFG5#3m!|b{Y_QlFJ78d68=<#4o zKouU6!hY+a@2Iv*%Se@RdySD4KmpM^kWMKiLM#qYxAM(ZKy@$CfLAgjix&(D&I_Fq z9@HD*DqMiAtz7|O=@z}abnO93K~%+3mDzzfG9;0I$KNqvND**|a7cXvT=LCnFKW7}wLf-))kR(HThu;g%fJA;~bXP!-6jMD-C-8z^aoqLh@D$;l_3 zEXN&xg53AeLvr?6XURM7yd!_Q{(9L5smuwk8?HhJkyJQPq`>wT1!>ceCux6cL;O)4 zq@)&qtX}{-M_uantNDNHWlp#&4<@ zVgSnM1;Haya2t%J9QZ+%0LFrh;HGi=z-}y_%J*=VZtIj15>;dQlX9gk z(Qx|Ue$xZkr5)=^xW&~Zdm*oqUp>e~Ojsd*;?PCMT4dCo!0lsjD*h9mi4re!w{{?% zLfzH|X+>O67mvY^SFra7vc4Q*PqbSm?mN!NVa2~;tgmcnRl5=wq+b(zf7tFbSZ$Gj z1B!%n6os{jwZ}z?&coEi9EcV-;>hYC5z~R99iEj$U+;j;f`mB%;K})jNn?6>iewCb z$VE7k)HlO6ife)&1K<07NJ|mQ(vEmZ zWvuiZg_kLv26EGwQ5f^y*AVy(gY~+hmTb^<5z6<6;#ssqN48reEingiQ}GyCdbft+ z$%A{w@UrS|b!R8(4x7l|F_^$`BQBbMJQ`VAp@O0Qm5d0+M5Y4P7^VSC<8H6i1+~ku zZU>mf^`10Se-4jEi$ItfC?dllO?GXd}vm3*tD$40}N$I8v1c74cxCKSAfH4$J z9F6@K`Y4nV2Or;klHzaLekcv)jLMc#lY9(`6(NlPW8|m2xKg&P-73wtW_8Se;OXHm z93QjnG;sISNb{=Qzq|JU39cJ~sI~Qg!-1zmI|yH~QZ@&3P1pqQ6O3R@v z5g_If?FLR?9B5T$CWt!hLn>{5;wQB}POk$Dx)yfU@JVN(Xp_SQ2~HPpH-Zz2hY#Qx zR1J@q;&o#1SR?GfNnB$9e?r~==sgO>26y4=@+t!Y1;CmS^g6@8U5MsDT4NI40ged~ zAwENl(@Sr@2>h;Ox%bBV2U3fk?_r(H`td6mlgr_fZAhXwc5;zQD749c#K84>?Bp?0 zvawX6JcArozxSDyGKshcjsc0tfsj2aODxcxYu(I#!|=5*tq5?%+>qWFUqnJhXNQqc z+=$H~17}-0a~0vcx*(5)3VsLb5DCIh8xaIe#MgKc_}KzaJtPi{qi-b&q$jHPtO-$o zjIsjd+9^)p5+)$$cp}w*%$N^!EP;<5T%y6$IDzn=M|+rdJ@yD=e;5!;KEttWYO0re z?z%@a#?F~FQ!c#V0wewi?t>=!M=$}`J-*a;kn@=gPV+dyeq{wlV^SgjdO(H0JQNja z#y}0B{iwOM2{A#29n)MpeLZ(r&S8DB=Uu?X^MKCATCDhckhCKN4H^C#f3RCPQSm7U zln@c3vx_n%4uNKbI8g!ugDPE%t?=fmC@webO|Y?WVwj?G2>PNcf$iskoaEKO(0XOz z%NpA>bHZk1ha2*E#S4x&RM(@15vAI&U6*zg! z`W9^I;}*7;3p^hHv58p;e~4wF`o*vUQiVvwjhgKMl7vy5su&Aw5uEVc0aF4V>`pk? zru1~Zt;r^d0KsGdEdv%B0!g`vWxLHj=E*P?&hutC$@El+yU2~015Pz8$th_)T{f)8 z==#kLV*oCbI5D=!0S{288*3Dslo)I%>21dGW~^OW3Ni(`;8+5We>>v7q4`SGn_3Xa z2}y~@e#{VkW}pot>=@@F9SF$G?z`_n`702Pl_mZG|_FkK2b#Z51Gadg_%YB|9TqF8bNUvTFS**|dG5l$4dosJu~O87O_I z-yDyC@wo*G`O0E2rlM>xCY;2oAkobkn1oaCfAHW078d`-1F@X%0s1}E zr#Q*upfFyjCT!J>QeV*kZ#s+W*L6&BPRE1`Gr&F#w7S7u$GWouoF~mdV$U0uYt#ov z$k(U@2>GXWRibCNUZs zkpIZj4#y3c8H}kvl(WmMbKvjf9dtWxM-@1>WC3ntw&0iSBkUBjhGxxe#5zeIsz*gR?%L0l9q2ZcIy~@8s81X=)ec0 z*EaJJfBih>{4;+pM;<&2aR^be-<192)rJ3&BM+I?>mx&U!Z+{e63&znjw+WlZ9@_? zOe)&kc-)$qsM%QqdS|cg#0fAt+VE2IQY3#*z_BD@9I$ENYU6Tjhd1dCs1ciYw1~wG z$q2Tj4uF1|-gmkxQ3*1s;VR6EOTtIDdVY*lf9I$Zj?u&sg6(_$crj#j2HRQ2(HPeWa;+ea~+J6^Lc_#!6t= zfBi-NxAbHA#d&ASFMf8m-1^r)%D#I}l=Z8Y0Y1qo*?9#LiJVCMnDq_l`JESWjzfg@ z`%ooG{67nz>hsf)I1*KkQnx}Z6HIScyIZQ7w!yu<36cjl%fms~@lMo}o5es1$B=Z6 z4ktvJuWtoI?Lf*5E_^-$zlNg>o1_F5e}aGDFc|x~vIczLbz)Lfu0W2V=-MdB9i1() z2u9NYOI%95Zra#nNz9Lzs^V&mdx`NNeKsaU$UMDBOM4k#*3Ft=)d|qt(k%a5u~hE6 z`2iinR!6Jc_Tb;-qVq16{OtVDkE>ZH)Q|npSO;~1rB!n;u^YMX%$<}aTbJ(WfBoHT zTQ7wYPCJ|#qL6O9V2?aaC!vf6&n1Ilg2kHhT7?FpW$(LExLD~ZlIT-Y(5}Q|97{u@ z8k&~yeg5U;XP=Ncb5E52_p8hN59@cfa%@!CsZt8vTQuf3>aK4$!+UFs9afetX+N`Ss5$HyXo6rA5T zM@Zv{Or8$NqB^*k(|cSq3Qh%W?P!83^x5~|YP=1{v>YEr7I>&!8vlwo(*1G=YP3A}kcRPPP!Ip{wh z&ZOPmqABkcG%~Pm-T4Zv`=-`LNl(l~Tez-+eZbB~4d&ahQ4}(v2y8Lj2ncNi@Mbhz zy}K7mKAJ$T1>Rh+H`Q%ve}J1Yx(Y;5U5~-aqhN0uHNFt(338;}3Wfxx#1iOkq5C^` z`MaNS;Ur}Kr7GB$#ubg%+b_NT68ZUA7bskQSykCCj||xXtU0!mpO$LGk(9$$p_?4T zi!m*~hZrihr>{0)Oen*~A^30flmdxG>_nWz0xhuGn>j)BBhv`bwAJwRw8;_BIv zEUy|4N=|r1m{Esh7x9qhbKxw*wC?oGqvJ$>5)G5`z3}|Aa{oR503t%OZpNa4M)2Fq zelO2H|01NLLK!<@67czwHTEf#42kVd0dvg&ED`}#NxO98e}+~y0xqc8(I_3TrE!Be z988IAUA=0pT>blN<>CK(6dOli8X}&Iwy$6c-S*v{7TinS>M)5(c=PZvCF)@zj@Ope zsU5=9vhZi_qnvT*yWq0OFHkJ zKI2e1{^WUjzIfYaC8lu+hM_w-B~=|R^yC13FiMRd1F+vCr~m*!07*naROhV&Qc(*G z=?GWQf4Rz?6dV;WKQmGjVSj>=vLE_KVwshdE`Pr6MmgfhAIa}7zE~O>pkl-ZG&L<# zW*mGNm>S-x_T>RoxSv~6AlW6syH)Z3*a-ahz>%T8rA+f6sk8@^!*G@6=4N^8jfHZ@ zUGwF&|Ga@9=SFohS+aOZkX6EF7B*ssvju%ge}>l2zy$g9KrbIQib8dX-EJ3lXbe&v zDBKJ@@B9lr@w9MzWfp97>x%2eQR|TO{4|NAqzUQ*)&&D3;6279NkUE>0&fA!)6^!h z%x}+m1kuz$88B2(=Hr6;O`?ux^;9-&UN6NJ#q#lzkL2o${~(V%`>>Rhm&onc&4(L1 ze{E;HF#xX6)5H5ahDXyAjzPxt+nQiIfzCS%d5QoCnKdOHJrgBmC1ui9hK@uP)N2m? z!Gw40mo~Vw5;{K;x|N)J8_4 z!x08;#$1X(C>Q(hr$vd1;CNWxakkpSSnE2gng~=IV7-73DjxCsz(bQKtqxSD6zeCdMSW zY=|R*M`#*c#dSGz{$U2CCBk(a^RxlDcWso?aV;!>n0fHtgT0D{*>qVrM}Pjye_unj z94(h#cA4CE=X_bSX0`nJ`aj_s9|0WzULNH%7OViRD`X7)D;}HMEUV$rpt?pF$QTUk zhPtNFfpilL0!9~7w-BD5)N1YWBNl0$T}a3B)mLBX27LVZ@$%)8#jz;2NbCTe{F7s(@G3tub3Iv==mNl4&$L=lax5_^_7jr4jv68 z5e%kKf4pNui8O9&mI%0w0aX{Bnf0b9hqXIZ{ z2wcPhrS}sh$HLJ_fq{r~|9(&=O?4+`fd!t8<0p@kl+FLNP9LJIOYys~lC7HI~u zhH+v*)fzE3F#{=SiK!%r0aFSSZSJ+r?bwa7n2UGhwq?|+BpWSTZ^~I8}Glax_xkX+zZuiEc9N?8J7iT5qO}1 z5%C&IOzm(bk3+o0xG7^{pX1{6#S~#K+iUGmmzDv^8){Mlf2U$0^7CCSB#w-?YPP{; z7t$X+7SRnFS2a{^aylGp+cDqw&%6I7ciw!hT=DC3l=%=mwyw5XPt$GuqRajWT)|AW z4PE#9UkV)*=(xbL{C{7_S4%$8@3l2mLN#5<_O1Fi?M(B|`GwF!l$Vu2`YM)#4m(o+UU1LfJG~V3z#xA>{y;xtb%M~lAq7>z$)Oq2 zDMRVnpvI?+LfW5|j;yR8gce9q3PsezdpU;u%$_q_o&^yeH*P$b=-`Ma(J1gjut~%p zwYeZ2StKtNX*EzM5@@;*Qk`XUG)a@senbW}RE0E?f6RrRqfE!ajnxa!za)u}pl`hK zugDG60FVLLcOgY5BTv%%AG{-n9d@XAfou_+dYX;JmH?iFOsnB^HK|?7+*AxzdxsqR zjvcH-b7i@-w{TM8Z|s0f^;*yk$D}5aC6lngTP%M&mj#zF#Xe2LK9Jq#-KK#c$q z!Z;p^f1iGjBEe%WrWi|%6cvt<7hZo}$|_6c4;TMY?Mlnmd?UqW#Zp;a5xO8-&ZC|R z`Xv&Eu^$drEC5lmRNu|nFK+r=H_lGMx;&1g%^F7_dzifAXQ*gsBF?6D`Lq_{*b zyYdp5FloZhb_7r}bz?`n*uUJc#YV?TR`M9Vv$H<}c+Oxi2_IAHMl5N6pxp6%VCjf&hg)~PM8_GPK~!J1x!Pp=#$riBYW1|tR7GbXqhUX_1L~<_e_ORU zpyMaLo}pFV$%ww|42gYW0m?w(WCR>zGZO(KR@Lkl2X@;elo1r2Si)p9Hy-{&{K*Ak zFeRh)=xZ<;+AY$+2ng=Vo~QkZGm(xFjbKi6{Up<1azLura0QNG;&)%L#zXPbH-4Re z@A`$$VQokmSUATiC1s|>z$1`ne@Kx?n_v)VcOb0>Y}nBG8k;iKku{_=*T(|XC-?t@ z7B+g%u}LKSZE*f#GEc@j5yP*s(GC}W8=PU{Wbu+u;qrbeq!_5^%PZvH&pam?nQ1cX z$XPOB;sm@bLY6LFs%Yr(a3CRb35Jy_N;)YjL?iRT|LuRi)Zm{WmVb;}j<$4jn*2T}$i z&s#K_KWNor9}`49=Fq=Hf5&c*Yg541SRWuJCoAg|ARrNsE7JR?{ ziinGlG1Eq=giX6!15`fR-)k|S+4G6wjqR{6#zNCM~F|ZBH$7W#b z*;?QLfq6=&2{M9^6yLkaT4;@C7LydHu<5E!mZ<9kFLHa}h}Bw$f4TtmJfxE2&Q>tI zh3lSqpZIZO!Ff@dg0f@ETcd#Kk52#zqdOrw#} zsy6I=OOZ0XWK+3#f9!Z4;%rQF2&JIB@i|g35fX$IKK;?q*TOrCP5}HpAcn+#>SeG< z=-&9?b$RNZXOtm5@#5o>30Kw>7_QH|{2clHjh6@CAHBS5=WrSFXC&G!E~Nk7Sl(&$ z?A$?_&%mb0WphdK`jYTW?wyqy5#Q(y*^Z=jW{E?r8%r>|e@gS--MB<@KPwx)uIOySkTE4Pg?0qdRh87h!-a7( zVQL*7ONK`mbKu^Jr_l?^Y=< zi-P>p%fOvK?*d6lPLUVhcwW|RTq{>ybd3VI5|Hxfe!@N-H3K9^Ce({) zjgl=}w&;Qjc?1Bjj>QME*(txClZT*ET}h`CY1p8?2`m zd6gX8Ea)1BQxcYH5*QN^AUfc27AoGrm?l0e8G+&H05PV=pP}rg|E>pcI|zt%Hb6oH z>=`Q2e~z^hu2Ka%(51h-T;6~01NqaR{v@~EajSg0cD=6C?96PyDSa*3S$VSX?e}Hu zxH0n1`)|ma0VOKU%Y;dno|`6<_L&G(UlMjj zn1sr`x;G%mzq>IG5Ki#2>>6N!%mIb#x4EOOL2hNnbJ-4@7ncYj~PgIO( zfTiXEq_RsvJL_uefxKRcXh2*?8{ZG05ZS?o_&Bq$uc8pN)Tz2NPlWNe3rQmBRA7D> zfAAVg6-;$yxwHWJ;JZ?oYTbj4YXfLR3siPy;Zlr^LA($=^Fl!obzNW$r6wmxk~J24 zR7e>Vn(=NTV$|8nz!)1KAt4|V8&{vc!K_Zme`jT7$%7BwFQp|FQVa)$r=EIR4mfDK zdd=;z=N^)to-Q*FKUNxQZ8CavJ{)qIe|(4wA+O3V4^*`vZ1M~vaJn5TM-GLg6h50$ zwHf|nk0yih;OiO0ZGPEJRo zQ&A=ytxm(eoH}0+bxKhL_YAt2+`;cgHv->g&zmW4JoUDur>6Uz3E*pheWZ(te+<@F z?;@m4k4wcOgq9eM)=hz}3{mM-fNlbj4kbYhpcTV<3EkQWqf`h75Ka4m_BR2gqP7Lj zIOyMKs4O5yhqaEYmMxVB@45x57q^TVH&I>fON+NF%EIYqpFgN~li~g5ywem?=*IaE z4eD9LaWm&)3dScDsx_5hxa_cwe_Eh+tpn0~2i!_Ebp|$E{MT2Z-G~KBdZ_R*s_-(+ zz_X)}N<;6(X+S=U!`q73oLXoXkO~*?H{z)D){y;RO(NjdO-Y??v_zvF>V0gHZCi`w z#N$qte?GcEKKl4$S-E^A-2W%Z+_}ff5i<`|=`my#3GhL*;So3&!JepZe=O|Zxe^1Z zvF{!a@Zo)27IgzkALm1MiYlT;aC>^XkT9C)3O&9cOs!VVk4|PRNCQAjS>oc6F_PXr zU^v*UY2v!1Osh^QR50F0k~akf4{LS1S&>ly)+=*1m_$Vh@RW!A>Ypf%pXH(IV}g+fb{Lf z;^R)8$PVlxD4KC3yi#KhkgOThT2o!AfT-vH`f_>Wm1l8mwH!YCm_DJ0`WuyK5Id%K zm_Fk$89jD9&7uLW%8dd`6c|bjVsTtZeZftaf3dK9C-sV5e<)$a zcoNAxJ~mp?QWI1v=9u%t0MRCAqXvu8+s-)7=Y(E~q%0J6bqA7kKJoa|5|6c?lbelq z0o)lb`&Csn5|7GK0K~fAfrpsY8uH&eH%Q1Ri(FT2*eoO?o(cOn-L)rxv9v?&)`X0< z3Q1(rie73;C@D%vsc<{D0>6&xKri~5%&HA=K?GBE0)#Yzo0HB-5!&@&dUX=As}0&h z7aYC*`|2Aqd-hSN2WtYFgpI^4x84M)=txNhj^_!-f1iL9>t>Qisy2qJumd46L6zxn zHAn*7!ws8UX#2>&b)nx5_&*)rJFr6`zMZStr@O^5B6$Y{E5y;_C&Wc+CdcD z5mLILTxvGg3th$OO3kPRFBoSe)CZ#`6(X@bjcB8r>jpLHrO484wM`9uNoamH7`~1He`!jK6<>cL_x$}Ynx*#ipZq^Cn58mx z+J1@z{@J2;RZ?2FdW8bIZd$)qDuCYb^dt8pe+5K?EPVZCMIiqX7@obkN&fTPld3rw z8FPZsL@~g}bcwwMY16TxWP&};*aSEzq$DBK!*r+Zqr&a56Qv<6B+=bgE}yR@lf<&8^qe~qYkF6k{NU7&%X$&lD6(mnJG`o|3rT9?PE8}k8g&im*m^Hf+QB{~t90HG0p{jpWG zGRb78lwpEof))f;%u7W*f{l^>E2R4iQD2_9HJ6CA!2Z z1;G7F&IBeH-e>GSVMIp2azhOOTQybrK;H8GxW@~EWI@^uB79^|&cGN8VpTfCivDW` z@pGep@aK?~ita!^ z396n1Rr9^`#w(hBg5a&czVuokfdhotuP~!6%PI5DQF{g%Q(4J&DJ|Zr$5YcYg&&p- zczlhFf~^9^1LPXur;si{EV2{Hl&IE=f-5&Q7qQ6nia0#z_q^0%;J5;_0*!!?O&r(k zG%GOmj5R>FX3{2ihfSKAk#2$ne~2_U6slT0Dkd@(P6+VegLyzDZ%AY=mrK7t{O}`y zbE=fX51+}ms$?{7{CK2p{}<5S4^S8Hj65UN3>mP=$cA$)SWmCo(b18#Z7`n70s4m^ zW5e2q<6$T|B%yvT>8|d=(JB`vjRT@~ND6z2pD+~?@5-`j#Pn23L~|6-f6LkVv_BxO z1q&o6FGnWsIYHv#qUw%t8F5WG&Jqwq@~^kaocxdV^gZC~u*9&Fbho)ByC6$aGE$7E zvA?j{nt}Hze~q_eM)r~jm>IELj9wuBhm>LXs3s!(bM)jP>zPQGG*`m zlp*n{l$f4aaF0|&it4G5fAJ(H!uAQmclot9DUvvIE!}^|4Lx1nc?_3#mg7$Tv8J+k z>EDkD9WTa?pCsA2`JLxS$`?-ImR7g40&N8FBc0}-<8X4q20Ku9R@v>?gel~-OVwY9YfgmufJe?^Pr)mQ&3XP^BO zIq}33NpqzH*Npk)L=gO_O-XgVi)iMLe z;xPt8HRpmIe^jQtr%jH|KhbDslGPd{$ZN1~^a-!Q-`4jXO1=TENF-(_0^-6J{}M*# zM0H$aU4v|2Q!K5O4h1IFR&%1m5h5`?UW)b{B}rM>tzz~wIC#J%2|B+Ywr*N4|9SpNJ-&9;a&<_cvjfX3&pxTYxn)|h>??V4!M)Oeyi82`x73Fm zPPHJB#EAmV^2KK#A<^IG`u+1yK2WrAg0;@S=~}t^x97<3aK#Da+J@zOu(Uwa4YJ@K>KbN3&L1!r^+*H~R` zou-PIGiQ!0eCu6hNV&PWvUcq{`TFax<$(w9ld|$MNP9rtFWCm>G+pk!?@lQ!%mYJ1 zEAWg^)+tm&M>-zW27ubgBuRC*!n@5@jnu`!yQBK6 zvyhqimE!VZ9h6adqx_Bz;A`mSn%0-D>r~5icse8|73zR784`nC7`@uKr6!a-6UPy8 zyLv~hI1%*6$;G`Hi&32*D&^lVf!^l3Cn7#V#sZy!>Tya;oanAbx0G%!*OcXS>hMH$ zf89ZAC4YcF=xD>BYA=kpv?(RS?m&D*Is{kLw!nUYowq4I4O9P6+OgYg>P^S2u^eWq z>v}3?;4OFTL<0}B&|%{Bm!FXdlc%WT$NIIa)Jfu!tF9095kq=iJ8T+EpKd{5YbHV* zVqrAW@DlV65ypv^7lrw+0uqkV-P`3we~@xZqjd+!Cxc%uC7cfXY##U=8WKVL7GUvVkC?fxs5Uw$bv=%&FNxdVa1aHPU` z8343{sm);S^%0NGofxH05FQ-ndaz&VT|9kGdEju>Lum5nNrgP}|iXe`%kIjA#;U08nQ8=59}q@A()Rk@@NQid~LIVxcmTU*Vp4 z(gA77gIp*&vFs62wV~F?ybD{?e{P1fv+KC1SO~`Iu)&)Mb_yP0rqft#IOs+^+{J?Q zC(NV7k^pAZ8$;rGYf`c#0m3R6hQ#|;Lc%H>Jx0zr`+Pa`r$0wrOs2+2@!Uu(5%he; zK()g(P={P$9%LLa$C6GB@D`^MgG&+=$Sbb)RzL<-1FVE@wG50_SBL>Me~n(Z8cG00 zMCXN7D^~%5p;&{SW00iqP~CkjyZzAYcCQ=Re5(4?QS9IrpcM zhy+BT$nd4!IA{2C|@!Xk@hBvUXEn`{6`5D zbPfOLwa6g!plMtHRS%n_e?)J#s_if+!qE)?BD(OkJ{S+PY}&p_HsiBu-AXxb&havB zkA3tMRVoB9O-o6WBM+WsULO4KP!bn1CQjLeJ(6NCDnhVDlN_=Ll!9XF9wnJ@NyrD$eTQPkwe``j9Cr`NgU?9)+ zf@l_g#h}OXL*{Qd<$m zPBZrL3~Q#e1BY?M&ZH#8ceQblzF=K6wblc_t_fUxy~$*e=a~EfMfTeJof0*a{q$6u~|q$fP4a6sev1T`4u@5c09g5Aa5jf zZU@bZ1WHCqLOP_+IF*t}&`8!OAE|Qy`kQX*OqK3%Lvn|QV{%e9QhhKnV<-u&`A&Ut z2!4=lVn;zKqNajb3#su%g^kvCdBO6v%jMN~UXj^{%u&Lre_l|&E3Uiak5ZUdD0@zv zB7eE_Iw`F*bmCne5Xc|w^uf^B<(72%v6PZmE&7^%X$ZhDwah#)Q+{O`v7j zV=^Uwa*jmwtZfOT=KWqnWDKe!(h=kvmj-umpZS*#8Rc7$#E+>#u&dk6kb3V*_74GQ zy?%D37+*YEfA4pFf6m0hy?n-@N6K-h%#%Zon1h}D$Yn_Wy{;LML1*Y7unQO|XpPf_ zG!RJVt#Lls%@3xS2;9_)l$Djq7oUHr-g5bnf@aU2EzdpsoIai|;2>o9-hq5Z`^v$G z%z!WyArN?>LS%3*8PZ^C5{7$`z%wq=Dj8rdIjQ+ze@H~PF{L7IcnMI8025?mZD_5L z`sQk}yBlF1K-?I@YMOzBVbYyY*3Mvrp?o5q<#u|c6*yu$d7f`#V9XrOR$2Jb+Zrcu z$@!PcnhmSLbV|GIb{Y}YUJgLX?2K$Vb?#|!`!w|A+^w`aT7$2xF;{}W&+iV6N5X_x zfKz~*e-agfHk*>orRr`?=?>wz*jXSj6Jl|6TBPJp#bCodI~mCk=p}g0I6{Ij)Q%dV`bWSSYvt` z#=;#uE*_c#kW}u82UD0%eBs**rMRRR=-nG+e{|6(jXPo;7B5~bPd@gH*kJoJ=MdkO znwkpx(dEGJ1Hdyp*No{D8i{Q%Z87gg_d9mDU2J7Ac2_5=eVBKJB1!Ze&()BO7n1OK7m~Nc5qb)Tn5vj~dGAp*o@)AqRvf ze|K&X*zmPT-7xFm+3@5@ko=qi`Fhp=WZ%8^M+Qm*RwExt@cwrHt#a(_;}m*@xrg5U zxE{1FA_#=>KLe-*xib}TX)rsSZDz1!lH{3&othk7CkDuYO< z7n@2hU<^{AhP5CwFC}{J6kT?h$OkY-z9-!? zVwypV5e9`mQ&?+QFJw4SpXa2(Bg_KY0__BC99)(v?cz693jRbmJk(09ZlWS^e{;-& zlMDdW>-%1B)b!A%ymix7S@`BVGW*Ec!0iNjIdVQd{lvfJ%+rbLFR;fIfC0wJ3(vnK z$ILw%kA}U4a|p|tgqs&dFs_R4)DLb7OJUpa9+L(`lF<+rI_sd#5zHD3x@>_;Iwdw$ zG7@qmAuUf4Vyy0HIbLG z8GH^P*2Pz!T`M}UBit!5#dztKG9-}0!+oj5)ioQEOx}cS$=?Giy%_kf0CUUC+Y|`g z5+@iZJ7bYNuu-)~x5>DvV^u%RNy4_c;VN6UwNmE<_!AC=xPb%fmJxlIxx;Qkx@l|; zJ2yBnvAVoQblralm7~I(e}$>aqp%~l0%au&Xe&_~gGb8}nE;Z|Ih&=Xp$fZpI<0_F z>EsB=HX>2%7HB}?STXPhguX3v7hT$V~;2OPLR>`1F+<;oS} z@p?3;(IJN(1nH?jogn&oY#2{-t^3wH+u8w_craBuE-;NbH8?3&f4Fp~6hIK*#-E#E zgPBvs*$(F@G9SipQ7UR~X@ZnQ38;S>;zgdTHUj$L2}T+G+6kef11g0bhOMSmDvRsY z3&vMV<5w^3BVlN0s+Z;KmLuO#fz%+NZ012ns+;B9bABYB{bz|B_p@W<+TZ?3W*suS z^N|jhLpE>Qq?ue#f4}flx#y<)WZxCLn8%LDt-Y97)cBYJhI`F45SiMq{U* z1njz`L}L$4HwP}Lb~qL_IS`5gCSnAOM@Uw326pi97^5}<%*^I)LTpn5&U4d2>4gvO z+lhrLcuLdj)_p5C+;F2@eDOu{_~Vbuz4zR!%xLb9P8193GG^>(x$Lq_WyXvdx^~S? z&T#Y^-%axwf4yqcGMua7x7bEa42nDfH*hE=5%k~_xA5L zB%Smif8Q6~in(*N=$G$pbH5u6!{qJ2ypP0OPD_dbY!DX^$A{GiIfc!m5rC>*N=MK{ znD&qcpnj(@n=IA^*G)o<6)50tfQcgEAtfc+nQ*qRqG%a-*ZA?{q!lOUyqO(y-pvZeQ;S-8oPKe{dvq>jrM46{rhVxN=8<8LFS-^mCD3U~mzvP9JH_DN{c)H!1#0bp=1bLto$ncV>-rv@0G~^5m`Dtg z2M{1G;M{Sy-i0CtSkYu_vK+MU!O}Vz(pF8SoORMqR4h(TN-<)B{OY4p1?JdWi{6qu zf3CYz&y-h{0UxV%;1k5GXZNx3dv9M~4W?i$5bCA5+bi8rCP^t)c*&(nbR5KKpa!t+ z5tMkw<%lE0DK%xl$!dj73IVQ>Q2S};fx+;3`b;cLLQ@i{ykJZLCJ+}F7A)*cObOD$ zjexo^vjHYEG8@xZjd!184@9FMT|lCae}aLW{T&OhDTdM-tQ{`1AUYU=-6f1Y0ILS3 zJvUjH+mMckS%>f+NdxF?JjR2Ii76+rBGe_>?yA>aJ{bZxW@hoi9^!y2coKp>xof8# zHZ?9)8iB#-1py|aLw|)*7a3DD7~zxuenieY_X3%9)Zv;1HYx^=Ogslzc|K_>GB+}V1JP&kP!h31Lh8gB7HM>*C@t$ zUc2+-I~Bk$nynmOrzAq+iUC7p->FFD?vlJ-}t5FTs8v^EeJE&@+$&DV7QD@SkJThPmD9 zZWSAB9}L0Z8Z(Kn?;>1?Yk+a*^?8MnVa0-ATjSut3-1*=LG)LYkYf^XgOZ+=F4Lw@ zmHQv~C!m4=j*E30$-q}Ie*)5!py*0}FYfKUu4~d%Zbs2d_|HSM8PSb9IRU1Eq&$g_ zN`{UKS#_zF;nk=gUAEnA4qyh>OD$ZwZD80Q##3sa;v%KpI^*#Ne|MhneaEjp3dhVC z7vQ*)X7Tnxmi|X5fESPAL7&^{zs_0@vK%|>I3$>If5;U#T`pEcx8Hc> z&HBU#p15DmIQ~riUe{2kJD9!qnAYRl9{%?Nx$x{?shX_E3wk#;X zXCPVSR*k>yPCFQm5%aT?cy_HIrCKtTMtdU+`*;TaaT&)0`p4A3f z+_5tAh?$VU9LflXgc12Q3v#?NBEyRr9=?%rXiq#Cw-tTFf3OC$84Qa2#hkJX)d>LAx6GkDf3D2)~Di;44|Zi;fXpGo}pq$suuc;2=4n{wQ8w0!%S@eqeX6T$9x@ z3HyMnxa*Dde0lnnC*`^SJ}2)#_n}^J>GhWgqyvA+tl&Px+HrAB8v?3)hw?lA5Qe@c=t%;RBd?udM?nI0j<8m}nd z=ANC*$OAX!2H1~0@bps3%N9^n=%H}eP6>kEX9+OAr^4HeZrSQ41eH~-tp;n3o@L*i z63q#UHbq6oLo<{L^)j8KNH6dqt;IJZgu!6oEpX?y!y~Z`s0&P9Ns42X(62G2^Qb^1 z()?s5f9D{l6c8csZ!je!k`gOWT~*z)C~MX)go~Q7K)*Qam$LWdX-GQNBAd2ul%>nQ zlA`O1y7UF5iu)eFSAGij^7jzuG}zASWUywNy1Xs0KcX2k07hbOYyse=UD6BFBqcjp z`;K0F)Gk<&DRa_Z6Qr>e!E2=rl2?=~aMIHqe;y?+C-mbDK+GT^r;ePSdH(sFR&Q7( z4?n*^D>OR4NPhFv-^#}A8{~T-S9#4 z0L?^FVk*>sRepDj{I9W5iC{*sNk?)ciT+`ml_wj0Ky|;f4UP*yL3iN;!!+mu1B=Oy zkPC^bXlPz^2OO^EqDss#o{qT8!AfHxe_=`yPH^jbxHlskD;sW1ldhAclX-SKJeWS3 zvF|~8dtP?FoO$BBE|4RX3|@Tm1)0A0bcundp18_ zqm6XJ`>`1&;uv&1)^9WxG*eW!GsqbxVncNj)@uBq9!^3^_Ca-B4DjHxfci~49t*9a zUi81ctx7kY+>INk)P7xrV?7mxf4UF99vMSti#N$F|9zaEk+e|5DUTe=dUlL*o^ z`{~;)>*U2ZUXW9dIZY;wog`a|wWoT|RK_&8-$#{Lm#e;HMc;&nqT_vcDIyw}{VP%ZfH*Pl_wbj;y%JFk5G!`G03 zvr#6Goh+MoY}Q~oGAu$n@x32@{=Tf+yiPLGGUSw_PLhCn)SJsaQdtAwG+E-J;o#x37jZ3;%oxZxoQz;Z zuopSu@X_k9V+|5<0fz@;mIzVXSXUPuOkyC}4W_U;11{QOs7OO~z0W2R1a;=6L0le8 zC20htJGohA>@!0H$;`iRxbv^_;}g!(KfhW1ja+%-?-ee@e>@-bZ_XN%K?QlU?gH5l zkb-R0cG>l{nee%_cFXhnv4>L9jzPsM} zbfG-_!U8$^&>ta~uNjQ%73>t_W#hIDa`S^X%29_LEvvz>9((DLF7FA&A3Agx1D68} z9EGU~SYkjhcbCxifJrl$EF>u*2I?M2Na%Yq9&YH}e?U8FL_ll{f?icSU~KmXT!{#( zwg8vofd?8z299-9WFqEPil)`kW1wL}UCe%n04Qp7I}_<8K%zs|Xe820ic5!W1{xAn ziZjp~0e5yNFr94xMn&J$+Nu=>sErv27@Y5uFo(Jg{_kUZsD0uFbg*SmOo=b2jia%V z9v&Rne*p|G2{Jz+EbN>@5M8r;^3})EWNXywad+MZETkzDrvlDsx-4C>R2JO+h_u2; zZP{nzC(XgDj^J1URE9$ z&=_I-S9M*L%st{*J-=kxVjyqS==W9YS4bJK2q!>d@-JjyjP=-2wp~gpO2m$=n_Eh@ z$X0x)w%c?36x_3uk(Kz6;8T&Vgegl{GE&oJ$v2Dj`|@?mpvq~5y6+qPI~+fp@U&tv zf03uDzS~_w+XG}YT%YO539#=N8DhzfxCLuN5P4&BgT^7j%O^xHhUA6ayB!-HdZ96< zhil0iPwY21KtO#MYWfps#n~4Lz>UjH$%gxT4&t!@jEc(W>SkRb6%mEP1!h#+T%|7E zl==+CCt;Q>`svUZ#X#R0p6l2a5-gfYe;CL+m@>dsM^Xy!E=ZH!THsQ_6~n3b%8=pAI%u|DaOb0U2vuskmYp51n+z~;+TmDC=2c!@ zE=L@2gdThAqcr8n|ZuG@8yLr0@rY*jD^i9J0qv_Ie&Xi+FSnk>p#iuSKpz}4doB^y8_-iurI|% zk2!A`4Hl2Mu}FYak_hZBLG*yyML{1F)&~dzpfUi>z)bc?a+FI(r$>s_0{9>>2=;6n z!%5oerP^MM#C&l1CV_+ZTu2J+Mx@zJc-}R@E7b*tND@U5gDqjmjkfK`)??->w>Zo52ykktq4*ovp==J! z;?H3VCas=2cskaj`>{FDlYi`=z~_4Zy-Bk_(%umDnt`LFdU$+XER6C%KnNXCXPtL` zG-E4Wx#6`$+fgi_e^L{3BsZf-5|L0Z5-tHCD!%$)qYp;oL2Qu?P)T%M=Q``XaKetv z;)L^sZ#kiY!Pj$usVj_E5*)T>JN*8`(KqJUhWObey4>ZnFeBvqi+|sj*@wH%Xp}o>R{|=M%;_fyQK5_&I|hc!uIr2NSL`x%p0GpkVKr{44|#u zS}%@PL$%b;BlI+FNS`nNT)$IwHg&>Obw*&a#1>3+I(iVssiLM_9S;)0Z0NXP2a}+y zIAgs&U$#UxZr`Z+u77@V!r5Zlj8b5KqB}Re`sf%!Y4eB!4W{(+J1eqfhpT{jf zifLzvfTWNTkF*JhL9!^*;lzfA9W(+>jvCmHz>w&Kfd1w^hAJpjUBkL?^za++pkqM1 zB>{gKiZZ&O8$=XLVUX{phoGUkqPHv|j=+$hZl?zwv$`h6B`agn>vVCWk07?uwWF1( zBEXDV;L^;-hl#eut{Wwadx=4g@eJT#PA5+?PHv zMN?alPzQwrPt(U%_zJpyT)V#37rTi44}*!_Nc?(g*4CP-{VJvQw@+Vvndevk&Ubqi8 zIU2<2#ec3EaWxDM<@wMTf7KBg6H;1ON5SPE4i@+`5-!;_trf6i0kaeJ9aModWHL6k zGb!2%MnuVwLGNfE)%0A(j4g!3<^>IPd0py7*G^nMs=UCY$e_FS#USf7s73{UGo`{b zYp%p84xicofwv*>EB)%mE@KBfpz2VB1Rh|AbAM84$M^7?_Y9`^9zU2z1aj{gC(MIk zzg*pe&Fj5zj39#ff8P3!>@j{1dEm+W)Dw+T6VLTqSogjP`iu;SwyLDOM4gnh+OaPy zw<0JR;I2bmxTxqJ-kl+_9%M)?yrwUP#B0cm{23CD(H6xIkDEklCG1EAIfWWab;hx0 zN`E?>9S)y<1TWV@Ji~A?B=a5Ya}P1_%yopnqp89(FWCLN-yVRRgKPMcvPcK!kQI^% z=QlbPK%(5tI)PAK+gu9BA2=W2aw_+X`}%$S04^{WAJ!0!NpK)&YK7C2`9|87fRe!U zF-B2h*28=F9RCk5;Tq-j#&K>OEzyKXLVrf+u`dPvK_+8a<6sLQ2oX?)RmwZBZAw3jUU{6ke+UHFq<%2~geCx16y zb+a-mx|{b~%yrSrg_?yHhTYiQ7|EE31%idbN$PBNNyVCKOlputpGu^cM||fGQ+gs} zVmw(Y7!ZSN>HRkpg(_06AI?!Cu#ew+EDR1Lq=<)ygj80~44lLm+gexnrJ4-NG1ivcmEHVg={r5tc_XsB*N&Jh@gp^9N4bAKX3iVBtY zjDKx=`aT3>TMt5c`3;xJ!*@I?8@FswG5?l(Z_I#y93xAcz`kIdusjeV9q$` zGEz5YO41fc36KzU>e361Zhr)Yk8laCsGNrCPA7Fn_)Qx~zBOx_j3V$Z%$^>NX95uN> zG7Hnik{l)O2&5>7R}B}qk&KePd}&+clHs>U+>ZlI$yXfxxE@Ck(K?>5T%0#R4Xa zzM)Of1d9%)%4{J6=<$f4%YY;$^DW#3aF;<;UX9&B1vEhx@Y!6AZUBxpi__skguGj# z0HHA?WdNNJOuZO{NBAAW*dI7;h6aZAgiNl_3}Eh2;_QfRlY(h^fEU8z#tws$X!Tm8 z;%I`61DH~(XMYZ&k|tWWc}q0la_G)IoP{b;#(2?AHPVVHDRm$^o|~vhz&wrJx5$u` zKyaIZu2J7ewa)IcOAmm+l8DCw(=h|VuyHY%^d!0v|Cvb61qsAvuK|5QK$uI6ZoVX%(Kp34Tjv!&gZj9$>nTb~O!OLu{z^*%^jMIR(tvu1pn)Au?vCK{XF-@029OR9l%8np zqs=fO3x9@ed|29nNKji<2ge9VP%YrR*liG2ofCmvIa-ruVJD)Zv0nqbO$@&?y?-_5 zNY^>l`}IMdA#Bc!eT)Gjs=@kA-}aa;Bhbf^2qvaN{D%&n44&I9Pc>Xbk>4jmJ(dD} z($4GXKK;U5&*_1E_Sjd5me7cRSRyiwS?J;BMJ?QrW}-W4Bq=fj?Lm4xc;v<7V+Vo)4gee#bp|96 zaewGCtSMkrzIlNA$%ttwBJ(9ugcks>jh<>v5u?(Oy1s)rD?P$}-D%qpcL1c1ZnK#6 z#yEgU5)5|Tx=k1wmsC|&NqR=6Tz%!Wvhdx7Qdd(YGiT0`6|25RW?Q(@b1eIz%k8kU z5unvA45Cd2p9n6U#ei0uqq$u+uG}U&)_;{qZE2HqKr$jT;%~anYQUk-lY~S!0v^TL zqcdgn%q4i_}69u5rF9I{~6S{aWd$H7}Qhxyg4f)OHP@4 zYR}gM`fjZ2)J!9Fg|Wy*>Zr?a)Z4W`sN*2U(7>rA5ebQ&wxf(Rc$ulb4n&Rw8*9D= z3Hj;}uLg2}4Jd9HfrZS2Aq^dLVF#h5fR`8tCIm)giAa`|#9YZuD@2SHax!%x>5%py z{lFCos<~RJX)KmHTdAt6=vF>5)qitjj373hA7Ji5;`3tj_4nIulRfvGBzsTWOI~{U zWtq13-m=fW`^bvrD-;|$DcK4f$ly1U6gVh(1zQFrDYY~L2^Ii?*l57fp;_u`jod!5 zu>e>^_SA%Qa7Mq-7O*R=m+65Qm4X1#WTkDM_Z z5%5E+esnpItT2I+KI3hS9R>*w$L)t)z;AR(Md3?I60{)*iUp~I)WFo0{OOf?TfLzP zu~5O!zT*`muW)T}JUx);BB1GsgfmNQbUe~%(Cd@=h>US3zvZZtw|}Y{4ibh9HZo_M z9kT-+LeFAI5Ljg+u8}64p{?51)FMwl`6QBq*2#6(T?bofv^?;@|H%Od9Dw$7q&j55 zf(Mjw9dhtNa@Cbrqrph1`mZMxu$ukh09pfKxJ$hA8lNy*vTj4^;3 zjzTbYO9T;(0zR9k$$u+Vh^yJQqFA=ADVCD;W#X&_{u5Mv5gw@fAP!R+U-Dztwf_{}8VLUk(O+)a&p7{N^i%w24 zAmHiPJtxK^1Ai)L05RC8e5N|A-d+!DjRTu3#@>J_k+A!S`$+8p8&W`!9_hZ7+8VTx z+8z>Vsv{#HNqOPCYT70appH|y%l7HVw{aP1Z6xy`4PCK(m3;8QB02y3 z3*@)I{hb^)_hebScB8CZxf09?*n0?tptPvD#c=(s*?+SoGc!xxeDh5(u7~8Nn{HMH zV?p-ofD4A++yn=F4=(JNDH+ZTzTF{zVN>8G#6QIJc7h$^5v0NVut6lYM7-{RV@sQ@ zL&`T*%8oUqQoXqjnN)4k-i(GL%{R9mv@6j;f`)yKWR8K?hc!x4bCYHKl(ABIp!p{mrfwcp75$Z150SLMHi0IvRY%T}`#IpR` zWtvW68W_)x^6jebBlHj@Ar^wUQhGV!I?%z*lo(_NM12_Q;->c_C3)1BGtU|i0tH+xGp`lr{|}*P5<054uvRJW zSYcDjN{xjP8*7d<8~?meV>#NIrO{ri5IIJ#airOMEK2V6+erLDFEOr1WlN|qz46-d zH-9Zp-Ux>@xoV`rUV--2C}KBlko2%4+cNO&;CTm|)Nqza+Kl)?EBIl*Q%d58ZFiTR;&CEI34yZ|_P9ep z470Jz;7)^#3ja8`959M+G!C|V+oi?UB8^o|DnXU5u8`UtfT)KW5OtPFLK=r8D&&eGrb>+~(`zFz#>fm?tS-`C$ASxxL zXa4)No*@Pv3km^K(xy%@4h5&A)_tTdn{Dv z#rYtJ%wu{&fArH4ofq!Bj`cir|9`_}<+m&KUA$yAREWb-BHY+4!Rt=v6MiWXMk)?W zGOdmhu;HlKkiQda3B)cMgg72{-}K}-NJ`LFK{B8^%ZvVKLC|R(7!p-?Mlw3~kvXpH z!;xL6y0asxAnBJ;NY^@m{LqBhrD`xGB-VsSo;FDhjHca)*Bf(WXM2aft$*6vpdX|m z+?dm`EIP`ff&WB7Ax*J0+NGg^dGDx#_QKPLelYe_NVxJ|-q!oKBbQ zDBS@pKD$hxv9El(_!Eq=S1$PF`EuGBr%F;%lB(|dZl%#DTq%lrEFz|v{pbow!{6I=nxtYz^>-*g`zVW z2B1t!YNVtVrAYqNTq)YOP%3KIt4i&mZ4z`Bn}7cVBm}s@*m~wRY(Khw6E{$2S3fiRG~A zhX<(M!g5EQdMmWw5T*R+LywUKH$NiN_SmPlOT&7c^VLlD#}`pM^Fz$96a@)@+r(r9 z#Ac)-AQtunB{pC{?SEL8O^!Ou0mG&o)&U9Q!|6Te07henG9JuLZm=;&9ZtBhbCamk zm4ssC6mtz}{Xj*S^}8Jso(FVf>C)x$n~N`&9XpCu)y``sO&%|wfBuCwfNPA|0}4mw zLwcGnH{SdgIqzrZ%MCZ)Ab0-bPC5ACgMsFrB9~ousmz-!)$;--zy=JvK9h6m;$qBPg(p2P)$hSnb9r*^OtBll4dHa($)w77`-^U+$qA*Dx zL0R8h{GKv1s%_6Z^*jYsrNl(_pg;0>L2jXZy7UvB)PH1%Uo87vrLFGQO_?x7o<-_* zx{iMeCye(NzYBEp3QdXbKYs?(H-X;E5QnHFq^E`x3dg7eT7gz4R60}~ebZ%mPlCdzz^|41Dm)rh!r~LDwhh@M0_XkF#MRN0VrptdV-F z#DAX40D=VxlC8xC(A0Rf6_SDQI(kQ%g*lg){+QQ?qR^gn?fh#r7ZX*3jICm(+S{+0 zFPUjsp?F2W&mhCGWJgNDxI7SMc!FYV8{o+E|JgeWK+DQ{?E$DEp;VVdslmTnP{ zP%$vB0iU9RV(axPwpYctSCN#ylz<>0DSyoXLkvuJovyvl-rw*4tiATxr_c16ne)!9 zvsb?BU2i-c&8=uz0a7v}4n(nou5ydIQR6Rb+M2R7@!XI)sP)iF2r=9#b`_aWQ&Bm@ z%GgOF=`FXU(U*DVXFSqIRmk#=0I__h^db6A#q8_hL%A6~SL;)7?V*PrvRQAuX@CFm z+0WSj{^?r$h>%hw;&$6Dx7quSJJyygU212Za|*wUZOoW4j#T0Ro5c&3*z0f1v{9p~ z$wp9WlO|1aWGv*&)h-gE7Vk}vNX?-A_=?=epdq*dP>Fp}#G~oik&p{he zp_@pnfG%fa6d|LqsAJkdh^73*k!&xt$5B5gks(Vvx?%c*? zis6y3tpHA{W^}bBNI%fp&}vP@FjG=Od77(p^qi<*Q3Bml6J)=+vq@podjI9UgDFXr z<>@kp9;1$!yt~CEk%n6-&-2q*F$yX1<(s02`Uw$|-lsmPsl)@DqHC4toPWX+o)3@p zt0)m0GE&4!@>MAs`_Ts;#So zTL-{rZMG(oRtRSyBwUEUQhyA~;#8bq0pgDN-nAIUhXRbvWL?85oslOxZQR|Gk}m{`vOG%dgsuNjurh=ijt9UVhsqjGkz>-gKv3 zbm0eW-vjorgAd)`&OYlro4fEG*AIQ|sw@2c9RSkN6RX*d%(h3Z1Aq7l%0m2$4-URi z@7|E5BZg`QW0*XgQuUU=5Tb8FWw3vH(R`twDgh-J3t<2QuJ2y5IWZlDGBaI z(XYrMw!EYOu{TJWe$c`pf}J(Atj1Zi!SzZ*=quK{DWC>EQGY?EF|3MJ5T(AFV~AF^ zmSjC~`<8%|wZI3t$g?f#ZGHrG2=I&R`OPnWXGa`~W4`dhi}v$h{M6og=N-TP%+vq2|M$g9?V4+T=OVcI^A_5UJ8y4Or%tsy z{_ie3`P36^`hWE4PJH_Vo9U0F4kL<3T2Y+Df3#sBq%)cG9*s;p%~ZeT3hS^psR zpk8HC?Kl?n-qDh>x}_-F*)(5dK3p}n(h5tF4I}Pk#Y(RCpg z?r6g@aSf>vWZ;1k*<%RiRK2b3%BM-&<}T8uYP_2oNn%)4>T@B&Jcz|bNNn!bZP@qw zyrxPap-LQLOA1|Z&RiElB8DCRR@EkKIF?J;gYTmqg_M;#D*lxP%M*G$`zhkGIdXfnl zz4_)W`|w9TpGO0Ph96MeLl zt4Z>m ze}9!?iw&0{(*t1|dWm>dvhmM`Obge)AyR~k*sQKprc~*V0K%G_Y;qV~O$Z(7mhmFw zog7q0D)Q<{Pf2@@ezCb?b%jWSAS=}`|UOM{qtbbTFi$%!`ILnDrsmg0xRs<4)Uh3QWP6e^C%He`$?PjrPrNf8D>@cuh(H)0Nw^_;wHH+bxRCrsqjsCSXH~xNI&iC zms84iK4T@U?+Bou$~MIpstvjSy1X;fwgACsg0XQ<1{AU`sa;)bbKhKm1MfUrM5Kv^ zWle7J7EQoGAr_P#L3$o-DSw&8k;))m8nrRgN7}T#r`UG8O|Wr0lDMi8v0D)a3o;cY zlDD`UZOXIB9~t@#<_*zIOACH=)CBu|0O*-TvoK|7)csrKE*e=;w|) z>PWl&j$3g?kK3y=Uv*=jkt0XCDYuB}1NT3`F1_?pJL9Y~gOFPe=Q6O3HcA~ZY4RjY zz0rj+j{X?~v~5#f)_=SbL7tNH`5;QaNGaqd^pWjtfyG+(+#o6+innM|Md}G#zanWX z-(6!1URi8Q-dJuc7Ot@7S}goD7co8v!^y~-SY~1h+mE+tyH2su(}~kJ z9uH^mOgk1P0%8&oy3Rp_H5_IziGu}S4yUI6(?1Q8OxCkv!GEFHS;K8|WpomPCM@{{ z(hX=l9WsQcw}@YnX)wmv&>a^|bcfYv?Kh0%0y?&C&3v0T>d))uPeQnO1_gsC_7hrd|Hbm#7 zuN6A8V~|K`K=GYASI(^~=C87PB7!SgLN@=5E^dJ(h?>v|RP;ScrY8g;6izLU&2r%sh?ro$Fg}{NG#bfx92JgAPBy zp7>`FRe#{X!}hb+UVg*Ij2~^^{I9PL`W0F?Pe1-|JNSqor`ez%T$>wtheUW)CF8-% z0o`7kScdgs5ch4cRVgyf-|v6G>an6b_uO+Fwj|mUcEy!nhhy3eWQU18`lItc_yLcg zpz%>0P!!BvUXenLAOoosqg?mAM+rqy29K;WYBipBR~LJo0y8{7ZV?^0T|J#kALpcu-*<>^Cz5mf}MKu>2~@Vr&&=HBPYPe zkFWkAVtcI7lr)e2ZX*hfxKvr}DO6B6UfC*Xf;c4Uv!zbj(h4{p_-EFNb9_l5-x-=9 z_VFPDA|*x3HPTK*nw5G2u@g%Bt+nKeWIFgxO-H%%*JE6Um4D-B z6hT9*?s3a3I$oa9VJRvpWYUc>n+RNEQMR`dVOknx{YQ!3wh|pwt0II`Iv)!kAO79U zJs^V>Icv*rEK(=q010N{9N1uPFMIju1BRC;skvls>+N2E(1s0@gdguN9ZR!Oh6F+Os8M?ZiV{ z@D6@aGf8Ur)?!;eZ>6=@;_pC6CIuo?mc}dqqqh}Z!Z{}pedmR3xo3y|w@Yl|a7uCr z_T;-Z)cuuE17nFLu74-x=H3;B80EtK$v8{7gW9m@S<}42>RU*c0!8ntqs_3!|Ml=w zJ^@~M=4Bj}o9+3hUj%@c*e5T&*v|`LU3AHLZednj8aTY?<5yKa0!Pe^ScE`2Ixvj~ zhzbU(Yh-zu!B>NNv#j_M^s|7m=8%Z{ZMlfQRB!^iqu(;1_#C^CWkdu*yLTRttQ%ywpUV%wC z^H8xP5m!k(8GpnjTN|*u{_USLd#+cq``)|S5$`)RTj9P3?QNsSjr4wTAU*1`@e-|*>_4K(r#+&) z;zwrIOg{}75Gm=|1WEbyg1*X4ci(9LbMqhVxPJ?dvD^QCn?3T>!#=V4x_?_auO1V1 zP=jJ{Am;!MB}Lc9SP~E3f{}ujuor?XdFEV-ahhE9@l z440q>A{Z`2BJEu_SuHakvzwyN6Ky_<`a@Z9#9F(i&UHy~{Bim#LVs$F z4UOajD(~;M^|~hNUrZUR6=pbwPHrN7ssOE$fVA48m4sU(Bf$W$b-mg!lphvS7IEeT z8v8Exg#uDIA#u4ePn0PAd2nAEWE3UcO98=ci}J8aE|AY(-!QNL89>h@kpU{WV7~Mx z{Q%+?^32p!2Z`9GPMl_M&Yoqn=YP(&laD@y#;c3FKD>qur@8rhe*NcP+Pp>c?3hE2 zwZjfL9BL1J%n+kS*JYxJvhr9}87$t4(a12RwJtrmd7sf3%A6P3m=`%dYEimx+vaUr z&>lFX%E|yC$;C<=)DGdnTCJ|V*3EGvLR{`^sI}O2J#Ow#PzKb&6md%%6MrFfZ-b0Q zWTZfPHZL;xl4-UiN6dikw{P{wA?yn0y<*zMQ@}WojEuSzd>|Ul_kh#hSM;Bp&gE(l zm0n&wq`BEo*Y%CAGToaZ)26J*q*Kv+jw!!NFGVS}M-qBn<@I-7^Y~3ux0`BL;;sGs ztIyjFAT~hgbZ_uKLl}Y%z6x<0oJ5{b-)N@$G98o^sh86n$FvGdf$==Wf-l%_owHa&Uzd9w84gAYeVP06ia% z7TQKDnmaig@0QC!gf$t#n4y3G$u$)vRw(@ul&YLQljw{Z+E)`$b$=BG8E{CV47(tt z;d$5Ba7DoA^6S!Ht=neOSp>1e_yNEciqh{7s`gd!20O3GmNOsJR(z?tY|g)khY2=+ zwe(i{+8cge~o?dlFMBNe8Q0@+CIDOqi(Q!9{xW&|MUwH^#x*&TuMXYzPd)S z@MSh*%J%k+OTT69=(3a}Xj2|?)<*d5VOjcan);Sb`h=kPx1z$h{!s-zu zxYPmzn5F$`B8{!xKrH| z%p#$e0Ks&=qua5!C3u$@rEF`tP4iI*-D8AyR?uayPo$(qs=;j;3l~K#2wAr-HE>csE7?-C4@`ognU zt2=?In?F)~xA_LFj>-}=ERL^)4SWY20OEm@il&Km$i8q&9G|Ngk)-u2J)RtW{emv? zm}q7GXA2-JIG1~ptHB!r!bdj;NQVpxaAMlrKYt7Om!yIuR+EB#g#|@cUQn5>yZcU` zNJ$SnQbGr!(icL~H6^V3_<5IPqriUkKd!V3KX<;}{g1otH$V8T{ovQ%v#)>d8}{+b zFSb*TIn@>{o^R8qOxL4b%JP-VY`byW`8gq;X_KehXD<4ztysO>UIfV80ug-eK3JMEt`^nooXSQtl(k^v}2O&bZ8H>TacHP@{ zn7U(lX@mc|-T^0Y<)%?uj1G((RE81K2Jh;PUZLhqdpq$E0Z=ki)_RZQGBtqI;FSQvXyGlIMnB-;{mq(vM!|4f^ayK5xw} zO*U@SIJ;%;&CX%vQXP%WjrO5)KkUz`gDc7_{5ihTIim;v^>^ot#6|7B+uru|&ws;C z`^d>);iSFv`ipkx{)bsZa|2WjN`K#qN?TpG+HSq~Z{87~y6`jh=DV{%hzsm}haG2U zpG?$Vkm<%Oo;o`-n0ilp)3)u=y)pZGW7jP)atrf3k-+*Cq@?8`kwyRn0@Sdv+o1Zj z&Z^4t5vvF|s<6UYE3E_&6^G>dBmhUS68(mC`t!siPuul>`kOzy*M7U(e1H6cl#lGh zGmi6kbs>CMr^?skp&xwhYVr^*vOoRp*Op(9Z*R||-+IqaE$D>Y+(BUFR z0tG%}@4&UktsDJ>B20)#aBc??TONANLM!%miCAhG-aB@GodwHmXPWp@)H`; z78YqPF?7SKQv{0oKxurEM1QIX5wgU^$jZV8B*&(TU~-1F34i*gyXeD&be#PZRnet{ zFO!*al+Ze9^31PG(WDKx^0E=Wzc;$231cVP9A^yANPq&8*pRA)V3c=ZK)?0@OUP_&iVtaoN1 z+Nf~rzY~u-*(OhzVykOc*(-2UvIv~BaE|@qhHLz@1XS*O`nf0D&;IbAZgqCgZGX47-k80<)vxpO$DMkN9e2vnj*wQbT4O)_#?Nfkiq&3U z?zMG(K_3q`ryJ>CdKg#zcLQX-GAUXfX>>Wn*(|RtI0G# zAA4$slTCAr$Qx0{J%(XHQGS_K<=5EA!qGOWXpD_3onR9yCfV51@thlFRe9A`7Awc7 zfcvAc1t6#x0Z*mNiArxxTYM9wmjx-J=1wFb6b4_7u}qs=X|A!AtxIfq^CDZ?w7?cO z%(G?ni)ag zs}RijO%{k%T+z9wo|kRofqNZ#RW9%pOnSDQF0v4OJEJN3BJ z?5+pzw4Z(J7k1T;zvjx_>u3;&0I>4d6O%cB90Z73@-;li(`V7h3SHQRc&O~V^w5cef!eb9TVeh>&*N!~y zP}^zO9sIlksm^-sZIhYzsb`<)aq1Lo^|60E2_YJ{lg>QOCJ{AUK1WJr@yhcv-N$9( zj{VJJY6y%Z{TQSCS>VJ>HNBx53I__G!&OwQDRfIAm z+<#4j^ioKalxR;|0vW{9>Zk6`9_wB^-weU; z;)(8;Hq~(v3NZnKQ8lAoRQIuSKW=9p|9-ppoR8XmyYFu`n4oVzX?rUM_+NkLbvAX< zR2;L4?A0qCsercldDGB6~obiWaPrvUy=XF_GNZVWWJI zQ`_wT;C8D48EKQBlynIKKT3PBx@oyJ*{fk4^w|z>+CsCesHU}QMpY68S&VOFz z53ao0UV82oJN%eK5S{(RmMmIo_ucWJUHkhR?ZS_pYY*M~h=&MLY6?YU*lWK%tdi8- zUk8~e-`IV3JYc^ipVD!s9&HT`4R#CRgp|HQ<&g&-w+HWeSWwmOz5M}u;oq;=WHPkA z$nQVydlV6BKK1SH_v-!o9<*2Xnty=zJv?*WA8)qvK619bLmG_lBlasQF6^^zztGPg z5y4X2howk$KjJ4{r(N?8JGD{n@ zhr`ec6^QUyR6a1me5ZPJexft2$_(gRQEf%5`7w&VAP(TT{2jc9^!KEm%0;jyv>t zdwcHNZXp=fxi-H-K%(XfbEvOGJCq4COA~FlY`Hxkz$7aodGt#*58=Pzi)8YM@M0vR ztQt{nB{~EZMKcK|Ta#<7wi*8;{wcRl8d1;2EYCmll5<0)WhHjW7k@tDuM)>N=iPa> z-INI+gO~l>i_gAd55px@)l}Jt%5wYc<(GI+)d%2MRCd~RdyJ8Swm$jjGp?u7`Kl_` zF`J6GA~~F^9FM3@fsMs2&3kXYr>;<1aU=SJjEIUd;zdOamwqX{Cg837OcFnin=r7|eDGf$Kd-;K{ePu>{Lz{ghk?z2m%L~RNT=CXv%GKuD>gD!(_WcU=jyAox*Uh3 z1Fe4n>rQ|jz>*LlVhM<-Phv!bXKq*^9j5{u2sMd-*CsfV;vRwRhyw1a#hO!y+4?KN zot^LQ@80#frZ=dKYHM$$M=M?4i5yg^kUNM|w55c=$;IkrC4WI!`)QM=`!|OccEA78 zAN_dws^y64&a#m;qwJ`Ij<%ccz6oxt*rQ2&>AU~WJ8Slwcbr4(t<(BC*AB%hy@OK5 zrwWlj7eQM?@ha6tGgPK@PQzu(?16A>i_)dmTHj{HRYh1eu|6c)a^9trie8&9lsJxB z0C>z5Wc~_@s(;|9B?Wm9T=JC1k(l3*`IEb@bAQkGw=aMvql~ih01kwrxy1{X zba`xT>W-izmJ@P;hZ~~j8IO_G7-G3e3A#r9bt#NXhd3)C2F&)t>mkUeiNG1|K{P9O z7r&9ectw%@x5cxx%1={+tG?8~;D6_S_(~Y7O#KqoA-1DB@mOBM7y3c>Iohqwdch_s zn)6M37k`OT)mZw{8=ZM~52WPnQb#iBlO(j;WbNDpogtB)%EYk~ebfGj-v41fG2jMU zNK5?b5B-NNUAfd`crgWojI}93Kw%LT;G%z>;IvYoZ%us}e&@FGtFhJa3b-hKVJs@I z{-AiyERc$>u5HoGQ;~T&q6zjopzsN$L#9>f9e-r#pcl)`yOv<8tsP3prwhSz!CwwH zLP;iA{}lP?eEy10*|)y*pZ55}Pl9arw8>K^`L(xRf5%P58|oWv{+#)?%N{$q9!CI? zKyJUB(4j{iLSB1;I%F(rMNxJ&ki;+l57I9YIDTHM~MeY!y)UqU!>XNU2F9;9_;%q!&in#4`j!d@#`RMNqG%a zI72C0;kvI zO>2MCDzlr3+Wq>gZ~8;?=Pb0NjyufvXTSBHJx@ZuLytTV(b!l|HF4+7_u9hwi|n+s zPqOio#@UmPK5PGe@&!*np)9hy?zyvPl~tPanJ>L=yKyY*zT2+93roIthzkC+>yI8M z;ota)W9{x+?{`B6!5|qo%$u{ogjlBUFx7wVzw1E<*yFbwYdh>R!ybL`3Fo$^Oq;}e zpUGZ3;E;VyX6>r~)fZp43qE!Zb&t2dTysOObsv5F;VyRTvzI^;v8b%!N_?C(+Tw6U zi+ILfp9?sLf^@KP}U6!;dyH0Y& zuv`fn+gU617$vO3nn+1xhgDPo0I7ev9HqD-e>#8@)tn?DU%NFnE=SBGJppvKi)H|c z>+r6P(d*JX*Vi?;uTWUOtm;-QTVd7cmL#$Zi^PA@xs;U$sa#~RaK}w|+x9z6cm4IO znQu7)`@$8U4j&otSDaTVsbRzkbuZ#JlpaF?Ttg9F_j?9?jJb9}bOeS8V;FyN2oq3G zf^kcdC^3z%j(l&D=y%i~5+6F}LtZr*4|Em{nz-TI(&Yv&^a5CNZ{G^`HFrnkl|%gF z0PXryagd$;&{KSuSrF=*kbU0@`eBoNLY97|?wjCYz)~wxXAa z+tr%Tm`Z%tff;zbPzx#T@#lX6B{4S)P&E9(UBN^UK+DgIVqI5i`7WVAc%_93hHFWn zKf<8FqY80N2ux3lN)O&Qz{@tlWhwQgSIRA#^JB)1&OPP(RaoBTmY1J@)no?#fs4*? zGwomf=o&lx*n@L#8F0V9h~eTedW-xpV5NQBkiyU*EOJtAZEwU`9|M0Xbc>E`WCG5* zcQHN)QDYcN_WU_N=%!beiFjs4=pF^xWtM4ot1eDtsf&8~%ATAOQ(oapS>i$I7YNk*Hzv_FMxnZ+D7f>$HhBd}D<`&N0R)RUEiEf0 zHf5|`^AX?Gl#5eRrqu`{ zIWkK(F9~!&&Oh}66o%x-Z0<%e@5$m@T{h0Gkpn}aPW051Q_6p7uS^YxN&B1*8RV`2 zi^9^##v}wMGAC6=^z4a2)-`&3TIL6Bw)Y+fH#w`B>V?x~>TGBiBO#*peWtRy^$M zo7N!8f`D;^1dQ6eu$5+8rvN;%j~(w~l4dVf=&NU8VR zhtCeC2b_X}1PBpO8h@|hvUT-93n8OILL&+lou@S3q$U}tNMu(*%83FcsJXTdWRT)@+T4>%@gc@Pu^K<`_$r4I`wSF5PUq z(giCzLOcKBtZR2%hEq}yRE=a1En#4yWV3z15PN@dTK%ax?l>O8D?8tNH-7Nudr(p2 zexbNxh<($LZjN(GIjVrcr2iPwA2i&!9z7t6xv8OrH5E|K?m*k^F7e7ydG#amDM5cy zO%9}>1V~B#EOjk)9`~)=qr->8J+RI8Ko02a+6RhS>lD7Dv#!_tNSJL~-g@bh@RX2} zfR=xhc`8cHK3ul09uTp%dUcR8A^freLIbHN*Nw(sN?dVCH5H{+i4T$s93+L{oPuF0 zNTy4C;~*gt!h|-V{GG= z_Q~6Pdl}y0vXOhBr%s6%s^66uikLZA0wL9Qhpvs>lC7Y6fu1b&Bse9@DY{XK5|uDf zksjK^1a4cw_ioFdpmCO7NqN~KGHPLs6yOBgC?6!ar~*9>}WJ5(|mni7AA z>zeC4q>LObeX(uJ9l3>lyQCi?JT!Ejx+E?3{`E<&F9bd$ak^H7b7gFei-^hm>#Z9C zVpbtbRX>_bLRl&2l7v@^JlWq zSSd*&RW!0y#C0po=$2&Ypp~S^&vi|;*3?S+5(WGasXJV@jvg4qP_A0F%1%1rbjF<+ ziA!p&hD^98oOqOd{i-Vv;mVjSkgy2mYHkEv3EU8zkxbFU@{fP~!@hs?#jo1oM;v5x z=gqg@|Ngf&Y0@Mvs}VtZ3^}9*b*SFpNgWG;s*G zm+Y|F&(G#{uxmZA@PL1>+-7g+AZ$bVs8Sm{X*57f5glSS=goPRsE0}-uTqGpw%HEa zNsPR*6tMxou$6rOw)Po5cC6q0NHO7Y zMrHsy(KlLFd#2Yk#Hgepy%hoY>gsBH?4SR#+itqk{_w}&*`t4tJz_^5d8p+TmRMsG z(Lu;X)!N!>l@*n6R0MZLJa)$&cW}=U7|JLw6o4NF;REkK-)_A5TB4A*+xw0^-X44W zpPt7m!TojhbyiLeDb34*!Z^PPD=j7e7xk(QlP6Dhv0H*9mBsnR*4)-+&7_t0cjI?g zT2^iqC6%_OVU2$$5F9aLg#Ui^t6#M%uDHU=%E}0f1+v7wLE<|-*G?QrwQbFsHMZTv z?X0P}$=dL_3ypnp5n{!>+gdBu^PdVunyW_4~5XD98wb$OTi$8j? zU2y(IcIW@yZVx^5kezYb8FuZTZ?MA;KO(1p0xqhksL1~BZ+F=dM;zfC%d4-xifFjW z-gsk{ZNGp0_K5Z>Ktl6u)~s1}$e{;Y5#nT7iazl72MC^9ZO0ySv|aeY57{@r`5pW2 z_r7PRpK+SqbJsn#$6kApcK#*%+ErKD?04U_NB{Atee=8DwCn$Jqka0*pRwC-ztfg3 zn+Lb{|Lj}e`IcRD(M9&(zrMyUzx>Pg{qO(4cHMt<7hAGqG4-8nd+)t>M(32%{6X&a zKuQuz#2n*83wq*4fN1WzQ^fssvIHNE>v!JxflT{pPMqS!B_089F^6@tNBuIBZSXZFk&`5zGkNdB+LXM1sWe zV@BKQr=Dov{l>TKd*A;qe0U10%{&`bRmDe$8_^U|I`o8H`U3lL4o|@#koBv|_?z^wIxwn5m znz<3w8Lnw%Jp?nkb3S*S$-0>Zsx>Obtv{Ukn_D@3Ghh)o-qwnHebZkKUL4Q`9VHtZ zVRBK*p!{vETZY{Cy756yt28bl*bniOeD>G32(SdQdQzOnh$yZAo>m0561Ar{%6(Si z5PlK4B+14p#FbXkH)SKG2|`#g@S3&#?%cPRnj>O8fUShe%P;k}L41EP2sH$=IM z7caE!CTwq$w%g8X$U7yG+73JH05|iHEnK+Jrc9aAqZKlI&^-F!`RCayue@RpJ@|l~ zbn;2IY}qmhm=2zq3KELgefQnx9LtR9GwiLm-?Ek#L~4lYMwHiBaZ!nl8#jO67A;&% z8x|p!`)c+*nuno}W%gu`oiu)zZMJ;*G8f^E9gCX6i7n}pqUiNfy~}43HKt48B!;#UNrA4v{P?JXogT zvRQkei#09lM~n!g<|srq+);nUu_Fud`j#|GV;S@^A-pPIs=|oMO`(XZoac4yE2@0> zHW4sg7nqX$wYIl_xIkJUuavTsf~edqIHOdKAYylGPo5ScO!J;l>D`-LKYZKp@5b)| znOIA&vugD!t4Ckc+SY96UvRFSa^eT<^;su7B02i#qh0Uxi(mfCzWsmg@7hm)dbN$J z8D%fM_@eE;$Igx{R;^lXD_5?x6)Tt9Pk#1acJxulSw&@;9dO{jcJW6pwoiTLlZfx8 z+o`9WXjfhJZ9D(`b8MGgc0n9>g+2Dz<2HWm7>pziL61aOtEL9~=}&$JN3)NuSh14h zCYv*7jw86H#%4#1(l>v#x3$}NG7LZW-19uwRk6&!R z`S0J^oVl|-JHm<;%N+@pl$1E)>aB-0C&Pc5vALzEp#$ro1J){rh#~pvEMhxB=Xb*} z-6_r73VmM-Mdr}kS^?T6F|SJ1)L1^$NK%voeUN%{u0@;bfqZ}R246oaVq5Fdjq$zh z8D>@fL;~DRD3J3@%B*B`wUG|fk%Y@z*YoA+^lGR_aXEUSu#UzaWalCr{c<=6hNeT- zo3t|qA``+<(Sladv8Zf`1l!w#XahQKk2OHZU_Jhtya# zS!HDvL z$suPaSRA)g+2AuQ+C{O z$N7D#L`YQis6C+pMlq)0LaM4y*IgV*+w;jRtVEUi4xNA3jBLTcqPV!&zqwa}NOPIG zYsx0!LLr%i=5!}q?8zy?Ub=kTIVA4QG>*N_60D2P)$nIp@R$^jykN&n?QO`=A=PX;^U z$O3?)>IE`#zngvDms=w4$l2{=?hRYPzK8-5G|HelP!U4%dBJ3g7h-P~89{ruct%9?hXEQYwZLTHi8v=`t%TW|Fc%Mq>a8)1KW zEXrhZ88CtRT)7({4T;~pq~GC3i&qU1CsaV2+``ByW!)3;V{fQG0{zOp0aEi5UH)Wv zD3@+9AAL@81Gc;+MHP;845Xx-O$p{phmerB5n`$Xu^`}4eaDVd!*WxUKTD^%vw(2! zw{x%V?^1HFce$|j9d!TnKE5yuoV|Z*7^AH8Nu)ziGza}iL!CLBeNMOddGwS#5E2RD zvkX#LiT{Sr`$6WC_LZuB`t)h`)C&*0h)rhR;)=SLzMk)LUrsyKI3a0oT;`@OZSV3R z2b%9)=27Pj{UD|ArkpPdPYwU}-vgQ{bem5y2I|?Fuh_SL^J_c(;DhY;C!T+_a#-8F zrcbxWFy(ysNB@Z}iK4UGD`<{!h{)tV+ob@N4ykzi|ZQ?tlaP(1}41J1=D*$0g+}zI0 zj)H_DEV?MpttF);0RmF{SipZg!jA?@Jd=I}Y@t@InMK-S`N;i^qED#zH03oDfuJ|CRSe$51;S72Q=X7xq#Xb zz=_&L$G*=lJoZRON~3=(EA3k!y2vj1+0O?xsTUyk{qi6FXurSg(k@8pE@Z*0>g(-@ z-FLTR@G)411KZjbA+n#|dYdDq?(g}3??20`0O~`z#M>o8V8db{R-9)oCFNFBR%*p% z(hUJXBtigqY7{z)04fLogcBjDo+BT)gpPz#QHW|}lUOh+1i^o0IF*8;ao`#00Eqhy zG83$CtgACQ7>0m1($Pd!(jAl`-oQXeFGS7}iNT?eGbtSjbUvN!pzdTT_vlXE=@xa0 zohRg!Q_?};){wcfD569@O?a(C*p(7V$#j?|%0Pq37gefuiQ3?D96|b3{edf#OqrWx z>f5yh_X_S3#?OC?(2|N%z0@m&BypaQkC0RXv7ihuJfi?#tk?uDisGJJ@lDuAUfCA> zN8hAx(Y)|)(#{rCLJlkZ4Zda5e?xzmrEjF<9o^rfThK^ss-|Yf)~Q9`SO2ALpWSz} zgC>m60KCq|{OnVov_IZ=zb&g>gY#R9edog;vLD}ai@kp|`&~QZ;Dd=IT@P&Ru%$S@ ziE{np{rB5f&OMh@+Cg5PQbcykYisQT-~FC_{){v1$CrG<@4M``zq9$vm)kCrC)w+B z=h>%DImJ%ge?NQbjW_J}e?5V6G~bTia}V1e6I3Cjc7V(8?zzX_#uPPt&v{24X}`Mj zF6ZdxFJFIQzsJmUd%ofAg?OjKtzC2J7XU~}`@s!2x+r26VNXWkw0GtCAGC3JuW!&2 zt{HVFnz9Qi}qS7jgv#B%8bNQB== z3S;5ywu!HN{OR6pYu~+KfCsX7wwU zS^4M*u1}QpT_j!%0w}j6^7*LhbiC=rw-c6H;M99 ziRG>2c~EKwpG6`I{Cq@;WY+`1wHb&@qROa5#=J*Jo3q)?k(CfrX9+{mWEdgZ&vlIf zo5Fv#sRSHnurETaIbF-#06Eh>Aui2feWQ-`Pwm#fo`@zBb*ppush&NMp@(uVFtL4J!-A)n&;g~DbA5QX&mPDZkxh?AIsjDa zM1WNanMoe$3t}v0DcN(&yGxhaO^-fmmz{rgmd#$g*lq)1{KsjhfuNdABDKbr7W?Aa zXWRR5dQ?el8(J+Y|Zm&u_oo z5y&_G{1-cP*In&cxT^16e}k&9{Xk6lQ1wDwx$oJ1>QoOyB80doyVHPTcC`6|PJ7|O?tkGpXb0GFZku zvP8=}L_43ywvc-W7Hjpq2TRciqDD4U=G`_ScDkEC!6w8nq#SG#50*x%tuk+{RppPf zQN`QYn6fE0ifwe+cKnXBs?usJEvlkFin$vE*&!s$>*zlDNh*YsYNJ8?<$a8$HoZC9 z2iy@H`yJVRugD>oCXY5vvh{y2vPqD7t{{rInCkS^8ut|9Ug_w9!Ce3MY#TK&x=sLk zN78?EZcfS2Iyq;;UF7plNhLSTpoZ0M3%{-}fErZMrMad?@y;f)~vF$ENk?jxLG^n_^0wFz6xs^ z8f>@8ll^!wf0E2R0XGj;pswI2c3UeJF@rpnPpRU)w~b89Fm|239PYig~9=*ent zUPe!)2B)yP42zrKBCC%h%8P>Vf~>Tq)RhN!g~3ad4OGPrTh|2{*0CvmqcODsz>3bx zzah2CMRQ_ILXIHPG19NaG76{&mSeIMR9|E#nmaylIxKGT-r0Z0`bwGK6O##KN}TLi zA>zS^l}ggcX%`KGKwO66Q{EXX=N^Sp4^~& zo!_-Vs~xT^+XH<}FF z23ta8lBRDYZj%KZ{Ef9k5$6??rIl#g`Nh?ktwQmm;1GY8DS)FM6c}! zAWJ#?F;bYrrqk>r5)*~ZM9w}HDE^_$`zisHqxr3&lvf+Mnn&u+gzNz)VH1Bcp#LIuyc!8xm5= z7WKK1iMm6Zq^SOIVAP|rRpWkt-&0e(F5x_|FFNdRRdhV^a?bgR1 zcjRy!-qpXq_dbx)Qn%E55>D#5x8Jt&k3QP&c=Abm1hQB8i9QQ9E*xcKK7_yc($)Yej!V8jg$}WmY}{sTQIVQRo7G05XYpwEm;$ zbYd7NL_t0h!CBjK3=H59J5~UN>bbp@`{0Z~cRu;`N05nefkN=QdTpcb;Ty5VMjAMU zTLc{iC21$2TIyEvF1}v~HNUWcXhB%?@dmXi)r>JhLL5+MiNlG=sWn~%a22rhOG1Bg zjjS=aE$Wu=X|t8Ikfpv)eWNeYrasHvKvuLi+0!IoxAAtp_yYS|bI zTfsSP=YgaN4GO?daF9;ErWmARk$Z1)KbRM{l@448G$sn)q!L69YW9>;6;OJ z%vNxZjBSb;zZh#WSOcAX*CV0>u2vRDK8@k0wE~FB2rUszoX(!;e7y7A@Lr||Bz|Ba z#HQ_FDGUN!`~?tAzVrsUl-dNFdKBqvBv#9%@Veh5fM1FUXYM`HITgbNt;BxE(_|OmGNQm+SZU~(R)@*++&glq{M%box`c)n1dOAqF))B9=y!435 zX&yjyB_gT~(0;vaizqo`D}6NxF-kyD_qmG7j28_V#9o1chh{4Mae~EXWibbzmApQ$$!Y(9w+1OMpz_(S_^a zB*#=vp!Nc4G;5{K)lEx1YLwa$&qx}=)@%z-#NoHD)h}I~k1nyMd^~-rv0{`&FlI{k z5e?6C6O4Ht3&x>B=jngpy}|WB2S7TcjrD~58zK&M)uCNWsN?B+w(C(D`l0ScIwKWX zy@f@VbZ^dI;D?XToav_G;Who{!3Ai`Eg?eEx!&HBdvET(kg4jLIAN64HZ9CXhN)SQIxTQ(*DcvoCYoH|Tv}p~tDi!Y)4_M1#RY#I5W&k2zZ{Tx8f|4zp-M z9)=ycMaZjriOL89z?gur%g0n*-x;GHAXzXmuRziWhtb`#u6re0)p5>vxn2!k79=4g zl1MFe#2~IlQ2~D>76b+O*GC~*bly_T9Y^9ip!mJPZs%XdC43FPk`gL&Yb;t$$Q&ZJ z=fh>o*hCL!N^6Q3Z;5t9f&{{aU{f$$K&c$3EwyTo6{>At8QJ?C#RGEprq%`wY(LGEV@u9J?ekhV)|Gf$5A;TO60Jy3e-{x z1e6>z-txwb(~6)YnX<3FgP2L_i^CPOaT*|fhBzk`$@oM4)5dulObd(H^;{sxxTqZv zPy&7k~neIZ|=`7vnpU z5JeHf6Zx8ggKJwpPjr8mW<;r9bVx!#3-MFw$kBXBk&7$>r`%d=Z(ZO7OQ7uU^7z($ zAl6yEmst-ofN*L#TpkXnx*RY+G&c0HV<`P#aT$L@?5lrT*It+-(pyO^>4TFwt)H&d zWiNPwqTEUpnn-{`q$(xl z)Gu?7{Q!K()EJQ*j+Z9G1fnRUpgd&;Eai0|cnP7301R_ch{%DNYU~C{bZTvjkP`jX zL0+4fM0S{zd(nGvO07euDr>&bC?l-i{gQvOK#*I*&SdnX(n69Mylkd=^RN@8CKn>0GpT#-9>4HtUAEh>eFGzGeq9#|(F2luc5DTz`D z&vkot(;bF$QorJI&`CHAL&IS8dToajV3})5O70eL%>Q{y76RK+HhJna03j#1N64xJ zQ(eVF3+iQ3QFmOEQ>MOy?Eol!pM-z3D1!J-eHbMELl1$tC)V7{2=v-7 z@m)>^r}(RWRKGhXgjy0xRZ{pg-&BBkd5SHs1VuB-e*|k@gBGTQFkxM;-c6MD;>%F zQvdMIcny6(H1SN&iOQFc(pF!@&4}aiKGRAO!IAsjx)zRq*c;*8$Q(1NA`z@Cb4n_O zu8}%ZLUQ3d^d69sQ{|4R0gJe3=c+geRt|Tlf5IkZ zo71&zLA$%2i+H`+2Zr2^j79Wq`fhK3P7Aw_x`xGzz-LU!UcwWZ^P7M5M{R*3*Oxdl z5}fST`Je%A5^~_jN1A~Kh%6^0%osfDi!q@tM4yp>v~f<5?2d9Sl=8BnwZ-NyU2KaM zEVSxT)wb7;yMk1h7(ves+!ZLyQ*y9`x{eE(sj2EnwWkO&YmFA3sIVbYG~ww}b!#SI zF?%_H*cSxusN9gk2ta>E8!0%12u2wNIMNz^OVSq=I51I%OI6LyzLNB?K3)KaIu-30 zfZ@JFhIJg=f!?c4YtuU`3lMay;++@l>aXtWa*sdQd3~^Z42lp&g4V{1#`0Z?cEC9y zUM{S{s6mde-Zs6Gos5*p8=S9TuD+slp6|fI&gV&=@7H|QMTmbB(xXQUF*VN@U<6U6 zN1>m>e<^`Z1t2Dyu66vXKHokhFJw7hwJw-DJ=&S=^zce9(&C)Yhj5gFd$LC$2cJKF zkFJSG3`?!=uafw3R766#? znM6J|D3i0rXNi_I0|@}_pxw{>`x!fk$OnJ8;V<@S(gJ_yRg~N8*Jjyt{DQu6<&`#u z1Xlle_z}CCa65mv?mF9--0~^(Be&f{Se=QJt*lUTY_(<(g*JN8?FslZ0lCa1je(S8 zwdF1tncFt^PZro}{;SQ})Sc>c9pH!4M7+1caw1aTyc)rYHOjH3jm87C>&p#kI(sUa zN)&B?xN?7n^QugrlPtah`a@zBU$nY4>?`eW;v&4(fjM+RDLTKjd|_Dhn&Wgxy>v(* zq`rzM**r|^bJv8Ye(39gZs!%mw6%Vv6;&fHgg}XCaYivzA$mgE;Laqn>N5g(x5|bO z*Q*DFa2)Bx0}EqK0S_gJm0dC=&bf1#(-^_z#j1Zjg?WGkq;m=gs|XRAUP5u8 zmIp<~E@`$R^eUQZnbUp^4JUf3!01AjvdXojptzcMzUgkwkuF@NYUny=6-i{M79pjW zq;Tr+Uf@8VNJ$Sy@Uzk9_VV0D{a*Ljr@?`DKJXoC;xD(|YJ2UztG)Hw8<;Pb+4096 z4|RXh0sTWRnal?&;;qC<4P<952KoHQ7caH9=FhWVK-te-w16lwF*Q#iKkT1pBnYe`# z5dn9gu3d!Kb?&THwHx|oAtE6kAtzZy%Y1*k6|@BdvGd(7j@xwxNQ@cj*fEjDB<9l9^vM^ zE?T578u3F?61LE&p|56nbOXs>RGhnFuClAOGEmW+jlwY|>sJx8Z&dJpdMGcy#@c_# zE^CqIuJC4{3Wu++a}R`o-r68cSOi%UZUDY~-Es@F0%Ri2mLc-Nu4AsR@%`W&_JUE? z3MFus*G-C?0?{ExN0USI-;s%+E1;Ki8I>y+Glg{$$I4I4xE|F_2#ER1&HP8`4B~9Z zyuF3g6F3utxFj-^#7H7S>39Y3@sNKDo}q@2+f!{rrKn9F;a>gHt@MeM{9dR!R}{*6 zY!epcfN#Luc$B9A5V%X(^DjJa??3xY+jEya?BNIgZjAuGyYIc*-k!hMUc<@sSHJkV zJ&EJz*mA<6AU^x~pRTe00r6b;kq_I9Dbq0rEw=jAwKl$bB+jWz9MO#^EV6&q?=G+@ zHRJ4_Cmy%Ye)==^;NACHDLym@A9N5=r;9AoBJIf_i{@bnop>nOik<{Li=J0PHFpGU zA9QVleCc}JCY=fG>L`NvC`XY?#Osncz?y`332+Dej!=|;l0dM4b<9~RaXla%Ig4US zYpK;N7%k!!OvEu%LSYoR;
=>Z<7AE^*G`>S<#6eE%R{8D4d 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 b78JBw+DKM#j@`i$Y?yL_K#N)I>7f4rhI7k4 delta 2399 zcmZ8jc{r478-M2=TQRa5$}%yO$x;!6$u9d^wv07OMkHSu+t?x`#^7Z#pWTp5hBRtA zp~X-ittY!|gGA9e$r7D$zU6%1_x$nP_x-!?=eh3ddVbIKyPr1i&Y{DQF7|LfDL?=a z0ssI7#5?(2Z-W6qy$}<*A0!pyogeE+Wqfh`vBy5L&*SM+36aMK zDw|TuG+{$y%RdM@eukatRfyT!LS19gH(HYI0zws#8%LOrBvKT&3Q0z&vq8Hbe)xpH z6y^v>zHtd}o}7TG1u-nXwpR>b)D?AGW|H)npda zoD)T==Z{CDjOzy`8r;f8JFhI^ju*<7xABjU#=MMIxtodU4K`KGq#SM#u~7Jp zYfwk5nEman4AtsfA{iWuncQ^DB?X{(OiLp3dsc$kEX0l{<#; zsNFyPt3^N(9$kD^KDX+WwXiFR*_jZUyG~sFnD<*#eqK0A5dqXwJO5F1D>0p_dlnth zZ`r3YI3(ol#_ztKO!YZJ)x!qgI+UNgf-EZZoK@_C=mFRIGU$gS!cMo?Et#oe>cI`i z{!eu$FmK%_>@<`{hV87p;ZLcuzPKwDb*^>W&n(cYc-e{78|~drk0VJUq|{30CMDq0 ze0>4kO*g2zACOu5{NK1pCX}Z zNO>+i>ud?3YMCtSv>6K1D!j@EaPheQTuNq`_DB%T`1M_ijhr zKa=lOp}j2aL*0lO^K~!U+jIz&OpNFx)*P@(G}o;!o>D5lB@nV-Q#p$a4g^|DTd}K# zD)n1xIoPiz>Gtjl`noRTc_a~p4wR(bAC5*K{Vky=GyUI5yBNZjFb6i_(W~!=AKY>K zNZEw0&Z!0uJo8v2lBFLw5r_;0pWYY=YvK6AN}SjFQPwxMPQLQs3Zl==cg9Q%=iOt> zGd`dOBZ;ea)BH+`_TNo(x5o9Cni)h^S;S4xzWD|wd-{~xy%g-_h^U48<%aJ0xy+?w zUt;T`UlnAMXn{-4-Ad5`4r(|2Y8s}T304CEb@*nzmz@cv>9+f{mfvNoyK^2NOAkK( z68|ELmi6g@ibN25I&)lX@w}$kQe5@I*Jy3BWDPym7Y+BbzfmGE^qT3C?Z&BMmP|)_=qGl%;)o+V$J6_kJ9esKJ}V z#dFsQ;ggn^7oDaKh~k_0wiLdSPUwAZ>HA_5MGbMP^|7TMH@DUtQmaAOu!Lp6N0Gf5 z4B07hml%lxFVWH_rPlo3gUtUtrUQ+?R4yK$2}b8>q96td5mRjv*F z*5SG0za>6ThmHBSUoa}I@>6U50tKdm(yjV}<{;!*1d2iQOi+?llmt$LEZ;a#hHqDP z-5Auv`{XvPicHWEP7)646|m80NFWNms})m3*LHu(QJv4+8X>B-9v!mraJPNZ+{`9A zY0VwfZqa^mNDu2NRs~LUl}D!tVXonxucy~8FH5*sA2$j3XrF(gFpG1C@7BBTL8XoJtFGMaOjcHZuW?6;g zuZTtOZgYNp%s=CjlozKkAf#5=O1=3UdF%t)*WFLf>!w}WMgGA~N@1-peSV^>4tY8W z=q1c3JkMc2C)v#Yc)Q39{XtoRoflKJFnk z@vaU(LF-|Yy*?omg;$NjI^JSG=WE8QuYRu9j0?sOxZ*AZul?ZbxZ|h4bStouditWN z_kIJeKuM#+JpmK!ph34os^GWT40P)S?#o{=rp7czlR2w}e$PJUoLEYp6&tPfd}M7M z?O#QZ%2Pw3P^H|J!U91Qq2NML9is92gU?w2kZ>`t<#)UYGU0h} zt|b8Z7K2Xk1uFn*DhBP~>(&6YQ4H!R{7F&XJaiTW0P+9neU}XYjYFU@{F)sADU^V6 RqOyQ2uulL0yd8H6{{U&M9FYJ3 diff --git a/tests/test_backend_msexcel.py b/tests/test_backend_msexcel.py index d13959ed..0a4440dc 100644 --- a/tests/test_backend_msexcel.py +++ b/tests/test_backend_msexcel.py @@ -53,7 +53,7 @@ def test_e2e_xlsx_conversions(): converter = get_converter() for xlsx_path in xlsx_paths: - # print(f"converting {xlsx_path}") + print(f"converting {xlsx_path}") gt_path = ( xlsx_path.parent.parent / "groundtruth" / "docling_v2" / xlsx_path.name From 9e4ca90db1116a240cf9d55f1ab141adb2cf389c Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Fri, 24 Jan 2025 18:21:14 +0000 Subject: [PATCH 08/12] chore: bump version to 2.16.0 [skip ci] --- CHANGELOG.md | 22 ++++++++++++++++++++++ pyproject.toml | 2 +- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 21882618..906e8300 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,25 @@ +## [v2.16.0](https://github.com/DS4SD/docling/releases/tag/v2.16.0) - 2025-01-24 + +### Feature + +* New document picture classifier ([#805](https://github.com/DS4SD/docling/issues/805)) ([`16a218d`](https://github.com/DS4SD/docling/commit/16a218d871c48fd9cc636b77f7b597dc40cbeeec)) +* Add Docling JSON ingestion ([#783](https://github.com/DS4SD/docling/issues/783)) ([`88a0e66`](https://github.com/DS4SD/docling/commit/88a0e66adc19238f57a942b0504926cdaeacd8cc)) +* Code and equation model for PDF and code blocks in markdown ([#752](https://github.com/DS4SD/docling/issues/752)) ([`3213b24`](https://github.com/DS4SD/docling/commit/3213b247ad6870ff984271f09f7720be68d9479b)) +* Add "auto" language for TesseractOcr ([#759](https://github.com/DS4SD/docling/issues/759)) ([`8543c22`](https://github.com/DS4SD/docling/commit/8543c22687fee40459d393bf4adcfc059712de02)) + +### Fix + +* Added extraction of byte-images in excel ([#804](https://github.com/DS4SD/docling/issues/804)) ([`a458e29`](https://github.com/DS4SD/docling/commit/a458e298ca64da2c6df29d953e95645525817bed)) +* Update docling-parse-v2 backend version with new parsing fixes ([#769](https://github.com/DS4SD/docling/issues/769)) ([`670a08b`](https://github.com/DS4SD/docling/commit/670a08bdedda847ff3b6942bcaa1a2adef79afe2)) + +### Documentation + +* Fix minor typos ([#801](https://github.com/DS4SD/docling/issues/801)) ([`c58f75d`](https://github.com/DS4SD/docling/commit/c58f75d0f75040e32820cc2915ec00755211c02f)) +* Add Azure RAG example ([#675](https://github.com/DS4SD/docling/issues/675)) ([`9020a93`](https://github.com/DS4SD/docling/commit/9020a934be35b0798c972eb77a22fb62ce654ca5)) +* Fix links between docs pages ([#697](https://github.com/DS4SD/docling/issues/697)) ([`c49b352`](https://github.com/DS4SD/docling/commit/c49b3526fb7b72e8007f785b1fcfdf58c2457756)) +* Fix correct Accelerator pipeline options in docs/examples/custom_convert.py ([#733](https://github.com/DS4SD/docling/issues/733)) ([`7686083`](https://github.com/DS4SD/docling/commit/768608351d40376c3504546f52e967195536b3d5)) +* Example to translate documents ([#739](https://github.com/DS4SD/docling/issues/739)) ([`f7e1cbf`](https://github.com/DS4SD/docling/commit/f7e1cbf629ae5f3e279296e72f656b7a453ab7a3)) + ## [v2.15.1](https://github.com/DS4SD/docling/releases/tag/v2.15.1) - 2025-01-10 ### Fix diff --git a/pyproject.toml b/pyproject.toml index 3d0f548c..f45f1b61 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "docling" -version = "2.15.1" # DO NOT EDIT, updated automatically +version = "2.16.0" # DO NOT EDIT, updated automatically description = "SDK and CLI for parsing PDF, DOCX, HTML, and more, to a unified document representation for powering downstream workflows such as gen AI applications." authors = ["Christoph Auer ", "Michele Dolfi ", "Maxim Lysak ", "Nikos Livathinos ", "Ahmed Nassar ", "Panos Vagenas ", "Peter Staar "] license = "MIT" From 3be2fb581fe5a2ebd5cec9c86bb22eb1dec6fd0f Mon Sep 17 00:00:00 2001 From: Nikos Livathinos <100353117+nikos-livathinos@users.noreply.github.com> Date: Sun, 26 Jan 2025 08:07:56 +0100 Subject: [PATCH 09/12] feat: Introduce automatic language detection in TesseractOcrCliModel (#800) * feat: Introduce automatic language detection in tesseract_ocr_cli model. Extend unit tests. Signed-off-by: Nikos Livathinos * docs: Add example how to use "auto" language with tesseract OCR engines Signed-off-by: Nikos Livathinos * fix: Refactor the TesseractOcrModel and TesseractOcrCliModel to validate if the auto-detected language is installed in the system and if not fall back to a default option without language. Signed-off-by: Nikos Livathinos --------- Signed-off-by: Nikos Livathinos --- docling/models/tesseract_ocr_cli_model.py | 76 +++++++++++++++++++++-- docling/models/tesseract_ocr_model.py | 74 +++++++++++----------- docling/utils/ocr_utils.py | 9 +++ docs/examples/tesseract_lang_detection.py | 37 +++++++++++ mkdocs.yml | 1 + tests/test_e2e_ocr_conversion.py | 1 + 6 files changed, 157 insertions(+), 41 deletions(-) create mode 100644 docling/utils/ocr_utils.py create mode 100644 docs/examples/tesseract_lang_detection.py diff --git a/docling/models/tesseract_ocr_cli_model.py b/docling/models/tesseract_ocr_cli_model.py index 3d5c8006..cdc5671d 100644 --- a/docling/models/tesseract_ocr_cli_model.py +++ b/docling/models/tesseract_ocr_cli_model.py @@ -4,7 +4,7 @@ import os import tempfile from subprocess import DEVNULL, PIPE, Popen -from typing import Iterable, Optional, Tuple +from typing import Iterable, List, Optional, Tuple import pandas as pd from docling_core.types.doc import BoundingBox, CoordOrigin @@ -14,6 +14,7 @@ from docling.datamodel.pipeline_options import TesseractCliOcrOptions from docling.datamodel.settings import settings from docling.models.base_ocr_model import BaseOcrModel +from docling.utils.ocr_utils import map_tesseract_script from docling.utils.profiling import TimeRecorder _log = logging.getLogger(__name__) @@ -28,10 +29,13 @@ def __init__(self, enabled: bool, options: TesseractCliOcrOptions): self._name: Optional[str] = None self._version: Optional[str] = None + self._tesseract_languages: Optional[List[str]] = None + self._script_prefix: Optional[str] = None if self.enabled: try: self._get_name_and_version() + self._set_languages_and_prefix() except Exception as exc: raise RuntimeError( @@ -73,12 +77,20 @@ def _get_name_and_version(self) -> Tuple[str, str]: return name, version def _run_tesseract(self, ifilename: str): - + r""" + Run tesseract CLI + """ cmd = [self.options.tesseract_cmd] - if self.options.lang is not None and len(self.options.lang) > 0: + if "auto" in self.options.lang: + lang = self._detect_language(ifilename) + if lang is not None: + cmd.append("-l") + cmd.append(lang) + elif self.options.lang is not None and len(self.options.lang) > 0: cmd.append("-l") cmd.append("+".join(self.options.lang)) + if self.options.path is not None: cmd.append("--tessdata-dir") cmd.append(self.options.path) @@ -106,6 +118,63 @@ def _run_tesseract(self, ifilename: str): return df_filtered + def _detect_language(self, ifilename: str): + r""" + Run tesseract in PSM 0 mode to detect the language + """ + assert self._tesseract_languages is not None + + cmd = [self.options.tesseract_cmd] + cmd.extend(["--psm", "0", "-l", "osd", ifilename, "stdout"]) + _log.info("command: {}".format(" ".join(cmd))) + proc = Popen(cmd, stdout=PIPE, stderr=DEVNULL) + output, _ = proc.communicate() + decoded_data = output.decode("utf-8") + df = pd.read_csv( + io.StringIO(decoded_data), sep=":", header=None, names=["key", "value"] + ) + scripts = df.loc[df["key"] == "Script"].value.tolist() + if len(scripts) == 0: + _log.warning("Tesseract cannot detect the script of the page") + return None + + script = map_tesseract_script(scripts[0].strip()) + lang = f"{self._script_prefix}{script}" + + # Check if the detected language has been installed + if lang not in self._tesseract_languages: + msg = f"Tesseract detected the script '{script}' and language '{lang}'." + msg += " However this language is not installed in your system and will be ignored." + _log.warning(msg) + return None + + _log.debug( + f"Using tesseract model for the detected script '{script}' and language '{lang}'" + ) + return lang + + def _set_languages_and_prefix(self): + r""" + Read and set the languages installed in tesseract and decide the script prefix + """ + # Get all languages + cmd = [self.options.tesseract_cmd] + cmd.append("--list-langs") + _log.info("command: {}".format(" ".join(cmd))) + proc = Popen(cmd, stdout=PIPE, stderr=DEVNULL) + output, _ = proc.communicate() + decoded_data = output.decode("utf-8") + df = pd.read_csv(io.StringIO(decoded_data), header=None) + self._tesseract_languages = df[0].tolist()[1:] + + # Decide the script prefix + if any([l.startswith("script/") for l in self._tesseract_languages]): + script_prefix = "script/" + else: + script_prefix = "" + + self._script_prefix = script_prefix + def __call__( self, conv_res: ConversionResult, page_batch: Iterable[Page] ) -> Iterable[Page]: @@ -120,7 +189,6 @@ def __call__( yield page else: with TimeRecorder(conv_res, "ocr"): - ocr_rects = self.get_ocr_rects(page) all_ocr_cells = [] diff --git a/docling/models/tesseract_ocr_model.py b/docling/models/tesseract_ocr_model.py index 6a1b60ee..5b70155e 100644 --- a/docling/models/tesseract_ocr_model.py +++ b/docling/models/tesseract_ocr_model.py @@ -8,6 +8,7 @@ from docling.datamodel.pipeline_options import TesseractOcrOptions from docling.datamodel.settings import settings from docling.models.base_ocr_model import BaseOcrModel +from docling.utils.ocr_utils import map_tesseract_script from docling.utils.profiling import TimeRecorder _log = logging.getLogger(__name__) @@ -20,6 +21,7 @@ def __init__(self, enabled: bool, options: TesseractOcrOptions): self.scale = 3 # multiplier for 72 dpi == 216 dpi. self.reader = None + self.osd_reader = None if self.enabled: install_errmsg = ( @@ -47,8 +49,8 @@ def __init__(self, enabled: bool, options: TesseractOcrOptions): except: raise ImportError(install_errmsg) - _, tesserocr_languages = tesserocr.get_languages() - if not tesserocr_languages: + _, self._tesserocr_languages = tesserocr.get_languages() + if not self._tesserocr_languages: raise ImportError(missing_langs_errmsg) # Initialize the tesseractAPI @@ -57,7 +59,7 @@ def __init__(self, enabled: bool, options: TesseractOcrOptions): self.script_readers: dict[str, tesserocr.PyTessBaseAPI] = {} - if any([l.startswith("script/") for l in tesserocr_languages]): + if any([l.startswith("script/") for l in self._tesserocr_languages]): self.script_prefix = "script/" else: self.script_prefix = "" @@ -72,14 +74,14 @@ def __init__(self, enabled: bool, options: TesseractOcrOptions): tesserocr_kwargs["path"] = self.options.path if lang == "auto": - self.reader = tesserocr.PyTessBaseAPI( + self.reader = tesserocr.PyTessBaseAPI(**tesserocr_kwargs) + self.osd_reader = tesserocr.PyTessBaseAPI( **{"lang": "osd", "psm": tesserocr.PSM.OSD_ONLY} | tesserocr_kwargs ) else: self.reader = tesserocr.PyTessBaseAPI( **{"lang": lang} | tesserocr_kwargs, ) - self.reader_RIL = tesserocr.RIL def __del__(self): @@ -96,8 +98,6 @@ def __call__( yield from page_batch return - import tesserocr - for page in page_batch: assert page._backend is not None if not page._backend.is_valid(): @@ -105,6 +105,7 @@ def __call__( else: with TimeRecorder(conv_res, "ocr"): assert self.reader is not None + assert self._tesserocr_languages is not None ocr_rects = self.get_ocr_rects(page) @@ -117,43 +118,42 @@ def __call__( scale=self.scale, cropbox=ocr_rect ) - # Retrieve text snippets with their bounding boxes - self.reader.SetImage(high_res_image) + local_reader = self.reader + if "auto" in self.options.lang: + assert self.osd_reader is not None - if self.options.lang == ["auto"]: - osd = self.reader.DetectOrientationScript() + self.osd_reader.SetImage(high_res_image) + osd = self.osd_reader.DetectOrientationScript() # No text, probably if osd is None: continue script = osd["script_name"] - - if script == "Katakana" or script == "Hiragana": - script = "Japanese" - elif script == "Han": - script = "HanS" - elif script == "Korean": - script = "Hangul" - - _log.debug( - f'Using model for the detected script "{script}"' - ) - - if script not in self.script_readers: - self.script_readers[script] = tesserocr.PyTessBaseAPI( - path=self.reader.GetDatapath(), - lang=f"{self.script_prefix}{script}", - psm=tesserocr.PSM.AUTO, - init=True, - oem=tesserocr.OEM.DEFAULT, - ) - - local_reader = self.script_readers[script] - local_reader.SetImage(high_res_image) - else: - local_reader = self.reader - + script = map_tesseract_script(script) + lang = f"{self.script_prefix}{script}" + + # Check if the detected languge is present in the system + if lang not in self._tesserocr_languages: + msg = f"Tesseract detected the script '{script}' and language '{lang}'." + msg += " However this language is not installed in your system and will be ignored." + _log.warning(msg) + else: + if script not in self.script_readers: + import tesserocr + + self.script_readers[script] = ( + tesserocr.PyTessBaseAPI( + path=self.reader.GetDatapath(), + lang=lang, + psm=tesserocr.PSM.AUTO, + init=True, + oem=tesserocr.OEM.DEFAULT, + ) + ) + local_reader = self.script_readers[script] + + local_reader.SetImage(high_res_image) boxes = local_reader.GetComponentImages( self.reader_RIL.TEXTLINE, True ) diff --git a/docling/utils/ocr_utils.py b/docling/utils/ocr_utils.py new file mode 100644 index 00000000..59503f1f --- /dev/null +++ b/docling/utils/ocr_utils.py @@ -0,0 +1,9 @@ +def map_tesseract_script(script: str) -> str: + r""" """ + if script == "Katakana" or script == "Hiragana": + script = "Japanese" + elif script == "Han": + script = "HanS" + elif script == "Korean": + script = "Hangul" + return script diff --git a/docs/examples/tesseract_lang_detection.py b/docs/examples/tesseract_lang_detection.py new file mode 100644 index 00000000..b75e4707 --- /dev/null +++ b/docs/examples/tesseract_lang_detection.py @@ -0,0 +1,37 @@ +from pathlib import Path + +from docling.datamodel.base_models import InputFormat +from docling.datamodel.pipeline_options import ( + PdfPipelineOptions, + TesseractCliOcrOptions, + TesseractOcrOptions, +) +from docling.document_converter import DocumentConverter, PdfFormatOption + + +def main(): + input_doc = Path("./tests/data/2206.01062.pdf") + + # Set lang=["auto"] with a tesseract OCR engine: TesseractOcrOptions, TesseractCliOcrOptions + # ocr_options = TesseractOcrOptions(lang=["auto"]) + ocr_options = TesseractCliOcrOptions(lang=["auto"]) + + pipeline_options = PdfPipelineOptions( + do_ocr=True, force_full_page_ocr=True, ocr_options=ocr_options + ) + + converter = DocumentConverter( + format_options={ + InputFormat.PDF: PdfFormatOption( + pipeline_options=pipeline_options, + ) + } + ) + + doc = converter.convert(input_doc).document + md = doc.export_to_markdown() + print(md) + + +if __name__ == "__main__": + main() diff --git a/mkdocs.yml b/mkdocs.yml index 0f3e9dd0..2b2e2da0 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -75,6 +75,7 @@ nav: - "Table export": examples/export_tables.py - "Multimodal export": examples/export_multimodal.py - "Force full page OCR": examples/full_page_ocr.py + - "Automatic OCR language detection with tesseract": examples/tesseract_lang_detection.py - "Accelerator options": examples/run_with_accelerator.py - "Simple translation": examples/translate.py - โœ‚๏ธ Chunking: diff --git a/tests/test_e2e_ocr_conversion.py b/tests/test_e2e_ocr_conversion.py index b3cdd312..4a542d21 100644 --- a/tests/test_e2e_ocr_conversion.py +++ b/tests/test_e2e_ocr_conversion.py @@ -62,6 +62,7 @@ def test_e2e_conversions(): TesseractOcrOptions(force_full_page_ocr=True), TesseractOcrOptions(force_full_page_ocr=True, lang=["auto"]), TesseractCliOcrOptions(force_full_page_ocr=True), + TesseractCliOcrOptions(force_full_page_ocr=True, lang=["auto"]), RapidOcrOptions(force_full_page_ocr=True), ] From c2ae1cc4cab0f9e693c7ca460fe8afa5b515ee94 Mon Sep 17 00:00:00 2001 From: Cesar Berrospi Ramis <75900930+ceberam@users.noreply.github.com> Date: Sun, 26 Jan 2025 08:10:33 +0100 Subject: [PATCH 10/12] docs: description of supported formats and backends (#788) * chore: remove type-ignore marks for attaching text to non GroupItems After commit b74208 of docling-core, text items can be attached to any NodeItem and therefore the ignore[arg-type] type marks can be removed. Signed-off-by: Cesar Berrospi Ramis <75900930+ceberam@users.noreply.github.com> * test: remove unnecessary imports Signed-off-by: Cesar Berrospi Ramis <75900930+ceberam@users.noreply.github.com> * docs: add documentation on supported formats and backends Signed-off-by: Cesar Berrospi Ramis <75900930+ceberam@users.noreply.github.com> * docs: add notebook example with XML backends Signed-off-by: Cesar Berrospi Ramis <75900930+ceberam@users.noreply.github.com> --------- Signed-off-by: Cesar Berrospi Ramis <75900930+ceberam@users.noreply.github.com> --- docling/backend/xml/uspto_backend.py | 50 +- docs/examples/backend_xml_rag.ipynb | 1078 ++++++++++++++++++++++++++ docs/usage.md | 40 + mkdocs.yml | 3 +- tests/test_backend_msexcel.py | 7 +- tests/test_backend_patent_uspto.py | 9 +- tests/test_backend_pubmed.py | 1 - 7 files changed, 1147 insertions(+), 41 deletions(-) create mode 100644 docs/examples/backend_xml_rag.ipynb diff --git a/docling/backend/xml/uspto_backend.py b/docling/backend/xml/uspto_backend.py index ef253b21..21001ab7 100644 --- a/docling/backend/xml/uspto_backend.py +++ b/docling/backend/xml/uspto_backend.py @@ -389,7 +389,7 @@ def _add_property(self, name: str, text: str) -> None: if name == self.Element.TITLE.value: if text: self.parents[self.level + 1] = self.doc.add_title( - parent=self.parents[self.level], # type: ignore[arg-type] + parent=self.parents[self.level], text=text, ) self.level += 1 @@ -406,7 +406,7 @@ def _add_property(self, name: str, text: str) -> None: abstract_item = self.doc.add_heading( heading_text, level=heading_level, - parent=self.parents[heading_level], # type: ignore[arg-type] + parent=self.parents[heading_level], ) self.doc.add_text( label=DocItemLabel.PARAGRAPH, @@ -434,7 +434,7 @@ def _add_property(self, name: str, text: str) -> None: claims_item = self.doc.add_heading( heading_text, level=heading_level, - parent=self.parents[heading_level], # type: ignore[arg-type] + parent=self.parents[heading_level], ) for text in self.claims: self.doc.add_text( @@ -452,7 +452,7 @@ def _add_property(self, name: str, text: str) -> None: self.doc.add_text( label=DocItemLabel.PARAGRAPH, text=text, - parent=self.parents[self.level], # type: ignore[arg-type] + parent=self.parents[self.level], ) self.text = "" @@ -460,7 +460,7 @@ def _add_property(self, name: str, text: str) -> None: self.parents[self.level + 1] = self.doc.add_heading( text=text, level=self.level, - parent=self.parents[self.level], # type: ignore[arg-type] + parent=self.parents[self.level], ) self.level += 1 self.text = "" @@ -470,7 +470,7 @@ def _add_property(self, name: str, text: str) -> None: empty_table = TableData(num_rows=0, num_cols=0, table_cells=[]) self.doc.add_table( data=empty_table, - parent=self.parents[self.level], # type: ignore[arg-type] + parent=self.parents[self.level], ) def _apply_style(self, text: str, style_tag: str) -> str: @@ -721,7 +721,7 @@ def _add_property(self, name: str, text: str) -> None: if self.Element.TITLE.value in self.property and text.strip(): title = text.strip() self.parents[self.level + 1] = self.doc.add_title( - parent=self.parents[self.level], # type: ignore[arg-type] + parent=self.parents[self.level], text=title, ) self.level += 1 @@ -749,7 +749,7 @@ def _add_property(self, name: str, text: str) -> None: self.parents[self.level + 1] = self.doc.add_heading( text=text.strip(), level=self.level, - parent=self.parents[self.level], # type: ignore[arg-type] + parent=self.parents[self.level], ) self.level += 1 @@ -769,7 +769,7 @@ def _add_property(self, name: str, text: str) -> None: claims_item = self.doc.add_heading( heading_text, level=heading_level, - parent=self.parents[heading_level], # type: ignore[arg-type] + parent=self.parents[heading_level], ) for text in self.claims: self.doc.add_text( @@ -787,7 +787,7 @@ def _add_property(self, name: str, text: str) -> None: abstract_item = self.doc.add_heading( heading_text, level=heading_level, - parent=self.parents[heading_level], # type: ignore[arg-type] + parent=self.parents[heading_level], ) self.doc.add_text( label=DocItemLabel.PARAGRAPH, text=abstract, parent=abstract_item @@ -799,7 +799,7 @@ def _add_property(self, name: str, text: str) -> None: self.doc.add_text( label=DocItemLabel.PARAGRAPH, text=paragraph, - parent=self.parents[self.level], # type: ignore[arg-type] + parent=self.parents[self.level], ) elif self.Element.CLAIM.value in self.property: # we may need a space after a paragraph in claim text @@ -811,7 +811,7 @@ def _add_property(self, name: str, text: str) -> None: empty_table = TableData(num_rows=0, num_cols=0, table_cells=[]) self.doc.add_table( data=empty_table, - parent=self.parents[self.level], # type: ignore[arg-type] + parent=self.parents[self.level], ) def _apply_style(self, text: str, style_tag: str) -> str: @@ -938,7 +938,7 @@ def store_section(self, section: str) -> None: self.parents[self.level + 1] = self.doc.add_heading( heading.value, level=self.level, - parent=self.parents[self.level], # type: ignore[arg-type] + parent=self.parents[self.level], ) self.level += 1 @@ -959,7 +959,7 @@ def store_content(self, section: str, field: str, value: str) -> None: if field == self.Field.TITLE.value: self.parents[self.level + 1] = self.doc.add_title( - parent=self.parents[self.level], text=value # type: ignore[arg-type] + parent=self.parents[self.level], text=value ) self.level += 1 @@ -971,14 +971,14 @@ def store_content(self, section: str, field: str, value: str) -> None: self.doc.add_text( label=DocItemLabel.PARAGRAPH, text=value, - parent=self.parents[self.level], # type: ignore[arg-type] + parent=self.parents[self.level], ) elif field == self.Field.NUMBER.value and section == self.Section.CLAIMS.value: self.doc.add_text( label=DocItemLabel.PARAGRAPH, text="", - parent=self.parents[self.level], # type: ignore[arg-type] + parent=self.parents[self.level], ) elif ( @@ -996,7 +996,7 @@ def store_content(self, section: str, field: str, value: str) -> None: last_claim = self.doc.add_text( label=DocItemLabel.PARAGRAPH, text="", - parent=self.parents[self.level], # type: ignore[arg-type] + parent=self.parents[self.level], ) last_claim.text += f" {value}" if last_claim.text else value @@ -1012,7 +1012,7 @@ def store_content(self, section: str, field: str, value: str) -> None: self.parents[self.level + 1] = self.doc.add_heading( value, level=self.level, - parent=self.parents[self.level], # type: ignore[arg-type] + parent=self.parents[self.level], ) self.level += 1 @@ -1029,7 +1029,7 @@ def store_content(self, section: str, field: str, value: str) -> None: self.doc.add_text( label=DocItemLabel.PARAGRAPH, text=value, - parent=self.parents[self.level], # type: ignore[arg-type] + parent=self.parents[self.level], ) def parse(self, patent_content: str) -> Optional[DoclingDocument]: @@ -1283,7 +1283,7 @@ def _add_property(self, name: str, text: str) -> None: title = text.strip() if title: self.parents[self.level + 1] = self.doc.add_text( - parent=self.parents[self.level], # type: ignore[arg-type] + parent=self.parents[self.level], label=DocItemLabel.TITLE, text=title, ) @@ -1301,7 +1301,7 @@ def _add_property(self, name: str, text: str) -> None: abstract_item = self.doc.add_heading( heading_text, level=heading_level, - parent=self.parents[heading_level], # type: ignore[arg-type] + parent=self.parents[heading_level], ) self.doc.add_text( label=DocItemLabel.PARAGRAPH, @@ -1331,7 +1331,7 @@ def _add_property(self, name: str, text: str) -> None: claims_item = self.doc.add_heading( heading_text, level=heading_level, - parent=self.parents[heading_level], # type: ignore[arg-type] + parent=self.parents[heading_level], ) for text in self.claims: self.doc.add_text( @@ -1350,14 +1350,14 @@ def _add_property(self, name: str, text: str) -> None: self.parents[self.level + 1] = self.doc.add_heading( text=text, level=self.level, - parent=self.parents[self.level], # type: ignore[arg-type] + parent=self.parents[self.level], ) self.level += 1 else: self.doc.add_text( label=DocItemLabel.PARAGRAPH, text=text, - parent=self.parents[self.level], # type: ignore[arg-type] + parent=self.parents[self.level], ) self.text = "" @@ -1366,7 +1366,7 @@ def _add_property(self, name: str, text: str) -> None: empty_table = TableData(num_rows=0, num_cols=0, table_cells=[]) self.doc.add_table( data=empty_table, - parent=self.parents[self.level], # type: ignore[arg-type] + parent=self.parents[self.level], ) def _apply_style(self, text: str, style_tag: str) -> str: diff --git a/docs/examples/backend_xml_rag.ipynb b/docs/examples/backend_xml_rag.ipynb new file mode 100644 index 00000000..aef8ce00 --- /dev/null +++ b/docs/examples/backend_xml_rag.ipynb @@ -0,0 +1,1078 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\"Open" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Conversion of custom XML" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "| Step | Tech | Execution | \n", + "| --- | --- | --- |\n", + "| Embedding | Hugging Face / Sentence Transformers | ๐Ÿ’ป Local |\n", + "| Vector store | Milvus | ๐Ÿ’ป Local |\n", + "| Gen AI | Hugging Face Inference API | ๐ŸŒ Remote | " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Overview" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This is an example of using [Docling](https://ds4sd.github.io/docling/) for converting structured data (XML) into a unified document\n", + "representation format, `DoclingDocument`, and leverage its riched structured content for RAG applications.\n", + "\n", + "Data used in this example consist of patents from the [United States Patent and Trademark Office (USPTO)](https://www.uspto.gov/) and medical\n", + "articles from [PubMed Centralยฎ (PMC)](https://pmc.ncbi.nlm.nih.gov/).\n", + "\n", + "In this notebook, we accomplish the following:\n", + "- [Simple conversion](#simple-conversion) of supported XML files in a nutshell\n", + "- An [end-to-end application](#end-to-end-application) using public collections of XML files supported by Docling\n", + " - [Setup](#setup) the API access for generative AI\n", + " - [Fetch the data](#fetch-the-data) from USPTO and PubMed Centralยฎ sites, using Docling custom backends\n", + " - [Parse, chunk, and index](#parse-chunk-and-index) the documents in a vector database\n", + " - [Perform RAG](#question-answering-with-rag) using [LlamaIndex Docling extension](../../integrations/llamaindex/)\n", + " - [Delete the temporary files](#delete-temporary-files) used in notebook\n", + "\n", + "For more details on document chunking with Docling, refer to the [Chunking](../../concepts/chunking/) documentation. For RAG with Docling and LlamaIndex, also check the example [RAG with LlamaIndex](../rag_llamaindex/)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Simple conversion\n", + "\n", + "The XML file format defines and stores data in a format that is both human-readable and machine-readable.\n", + "Because of this flexibility, Docling requires custom backend processors to interpret XML definitions and convert them into `DoclingDocument` objects.\n", + "\n", + "Some public data collections in XML format are already supported by Docling (USTPO patents and PMC articles). In these cases, the document conversion is straightforward and the same as with any other supported format, such as PDF or HTML. The execution example in [Simple Conversion](../minimal/) is the recommended usage of Docling for a single file:" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "ConversionStatus.SUCCESS\n" + ] + } + ], + "source": [ + "from docling.document_converter import DocumentConverter\n", + "\n", + "# a sample PMC article:\n", + "source = \"../../tests/data/pubmed/elife-56337.nxml\"\n", + "converter = DocumentConverter()\n", + "result = converter.convert(source)\n", + "print(result.status)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Once the document is converted, it can be exported to any format supported by Docling. For instance, to markdown (showing here the first lines only):" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "# KRAB-zinc finger protein gene expansion in response to active retrotransposons in the murine lineage\n", + "\n", + "Wolf Gernot; 1: The Eunice Kennedy Shriver National Institute of Child Health and Human Development, The National Institutes of Health: Bethesda: United States; de Iaco Alberto; 2: School of Life Sciences, ร‰cole Polytechnique Fรฉdรฉrale de Lausanne (EPFL): Lausanne: Switzerland; Sun Ming-An; 1: The Eunice Kennedy Shriver National Institute of Child Health and Human Development, The National Institutes of Health: Bethesda: United States; Bruno Melania; 1: The Eunice Kennedy Shriver National Institute of Child Health and Human Development, The National Institutes of Health: Bethesda: United States; Tinkham Matthew; 1: The Eunice Kennedy Shriver National Institute of Child Health and Human Development, The National Institutes of Health: Bethesda: United States; Hoang Don; 1: The Eunice Kennedy Shriver National Institute of Child Health and Human Development, The National Institutes of Health: Bethesda: United States; Mitra Apratim; 1: The Eunice Kennedy Shriver National Institute of Child Health and Human Development, The National Institutes of Health: Bethesda: United States; Ralls Sherry; 1: The Eunice Kennedy Shriver National Institute of Child Health and Human Development, The National Institutes of Health: Bethesda: United States; Trono Didier; 2: School of Life Sciences, ร‰cole Polytechnique Fรฉdรฉrale de Lausanne (EPFL): Lausanne: Switzerland; Macfarlan Todd S; 1: The Eunice Kennedy Shriver National Institute of Child Health and Human Development, The National Institutes of Health: Bethesda: United States\n", + "\n", + "## Abstract\n", + "\n", + "The Krรผppel-associated box zinc finger protein (KRAB-ZFP) family diversified in mammals. The majority of human KRAB-ZFPs bind transposable elements (TEs), however, since most TEs are inactive in humans it is unclear whether KRAB-ZFPs emerged to suppress TEs. We demonstrate that many recently emerged murine KRAB-ZFPs also bind to TEs, including the active ETn, IAP, and L1 families. Using a CRISPR/Cas9-based engineering approach, we genetically deleted five large clusters of KRAB-ZFPs and demonstrate that target TEs are de-repressed, unleashing TE-encoded enhancers. Homozygous knockout mice lacking one of two KRAB-ZFP gene clusters on chromosome 2 and chromosome 4 were nonetheless viable. In pedigrees of chromosome 4 cluster KRAB-ZFP mutants, we identified numerous novel ETn insertions with a modest increase in mutants. Our data strongly support the current model that recent waves of retrotransposon activity drove the expansion of KRAB-ZFP genes in mice and that many KRAB-ZFPs play a redundant role restricting TE activity.\n", + "\n" + ] + } + ], + "source": [ + "md_doc = result.document.export_to_markdown()\n", + "\n", + "delim = \"\\n\"\n", + "print(delim.join(md_doc.split(delim)[:8]))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If the XML file is not supported, a `ConversionError` message will be raised." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Input document docling_test.xml does not match any allowed format.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "File format not allowed: docling_test.xml\n" + ] + } + ], + "source": [ + "from io import BytesIO\n", + "\n", + "from docling.datamodel.base_models import DocumentStream\n", + "from docling.exceptions import ConversionError\n", + "\n", + "xml_content = (\n", + " b'Random content'\n", + ")\n", + "stream = DocumentStream(name=\"docling_test.xml\", stream=BytesIO(xml_content))\n", + "try:\n", + " result = converter.convert(stream)\n", + "except ConversionError as ce:\n", + " print(ce)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You can always refer to the [Usage](../../usage/#supported-formats) documentation page for a list of supported formats." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## End-to-end application\n", + "\n", + "This section describes a step-by-step application for processing XML files from supported public collections and use them for question-answering." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Setup" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Requirements can be installed as shown below. The `--no-warn-conflicts` argument is meant for Colab's pre-populated Python environment, feel free to remove for stricter usage." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "%pip install -q --progress-bar off --no-warn-conflicts llama-index-core llama-index-readers-docling llama-index-node-parser-docling llama-index-embeddings-huggingface llama-index-llms-huggingface-api llama-index-vector-stores-milvus llama-index-readers-file python-dotenv" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This notebook uses HuggingFace's Inference API. For an increased LLM quota, a token can be provided via the environment variable `HF_TOKEN`.\n", + "\n", + "If you're running this notebook in Google Colab, make sure you [add](https://medium.com/@parthdasawant/how-to-use-secrets-in-google-colab-450c38e3ec75) your API key as a secret." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "from warnings import filterwarnings\n", + "\n", + "from dotenv import load_dotenv\n", + "\n", + "\n", + "def _get_env_from_colab_or_os(key):\n", + " try:\n", + " from google.colab import userdata\n", + "\n", + " try:\n", + " return userdata.get(key)\n", + " except userdata.SecretNotFoundError:\n", + " pass\n", + " except ImportError:\n", + " pass\n", + " return os.getenv(key)\n", + "\n", + "\n", + "load_dotenv()\n", + "\n", + "filterwarnings(action=\"ignore\", category=UserWarning, module=\"pydantic\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can now define the main parameters:" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "from pathlib import Path\n", + "from tempfile import mkdtemp\n", + "\n", + "from llama_index.embeddings.huggingface import HuggingFaceEmbedding\n", + "from llama_index.llms.huggingface_api import HuggingFaceInferenceAPI\n", + "\n", + "EMBED_MODEL_ID = \"BAAI/bge-small-en-v1.5\"\n", + "EMBED_MODEL = HuggingFaceEmbedding(model_name=EMBED_MODEL_ID)\n", + "TEMP_DIR = Path(mkdtemp())\n", + "MILVUS_URI = str(TEMP_DIR / \"docling.db\")\n", + "GEN_MODEL = HuggingFaceInferenceAPI(\n", + " token=_get_env_from_colab_or_os(\"HF_TOKEN\"),\n", + " model_name=\"mistralai/Mixtral-8x7B-Instruct-v0.1\",\n", + ")\n", + "embed_dim = len(EMBED_MODEL.get_text_embedding(\"hi\"))\n", + "# https://github.com/huggingface/transformers/issues/5486:\n", + "os.environ[\"TOKENIZERS_PARALLELISM\"] = \"false\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Fetch the data" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In this notebook we will use XML data from collections supported by Docling:\n", + "- Medical articles from the [PubMed Centralยฎ (PMC)](https://pmc.ncbi.nlm.nih.gov/). They are available in an [FTP server](https://ftp.ncbi.nlm.nih.gov/pub/pmc/) as `.tar.gz` files. Each file contains the full article data in XML format, among other supplementary files like images or spreadsheets.\n", + "- Patents from the [United States Patent and Trademark Office](https://www.uspto.gov/). They are available in the [Bulk Data Storage System (BDSS)](https://bulkdata.uspto.gov/) as zip files. Each zip file may contain several patents in XML format.\n", + "\n", + "The raw files will be downloaded form the source and saved in a temporary directory." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### PMC articles\n", + "\n", + "The [OA file](https://ftp.ncbi.nlm.nih.gov/pub/pmc/oa_file_list.csv) is a manifest file of all the PMC articles, including the URL path to download the source files. In this notebook we will use as example the article [Pathogens spread by high-altitude windborne mosquitoes](https://pmc.ncbi.nlm.nih.gov/articles/PMC11703268/), which is available in the archive file [PMC11703268.tar.gz](https://ftp.ncbi.nlm.nih.gov/pub/pmc/oa_package/e3/6b/PMC11703268.tar.gz)." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Downloading https://ftp.ncbi.nlm.nih.gov/pub/pmc/oa_package/e3/6b/PMC11703268.tar.gz...\n", + "Extracting and storing the XML file containing the article text...\n", + "Stored XML file nihpp-2024.12.26.630351v1.nxml\n" + ] + } + ], + "source": [ + "import tarfile\n", + "from io import BytesIO\n", + "\n", + "import requests\n", + "\n", + "# PMC article PMC11703268\n", + "url: str = \"https://ftp.ncbi.nlm.nih.gov/pub/pmc/oa_package/e3/6b/PMC11703268.tar.gz\"\n", + "\n", + "print(f\"Downloading {url}...\")\n", + "buf = BytesIO(requests.get(url).content)\n", + "print(\"Extracting and storing the XML file containing the article text...\")\n", + "with tarfile.open(fileobj=buf, mode=\"r:gz\") as tar_file:\n", + " for tarinfo in tar_file:\n", + " if tarinfo.isreg():\n", + " file_path = Path(tarinfo.name)\n", + " if file_path.suffix == \".nxml\":\n", + " with open(TEMP_DIR / file_path.name, \"wb\") as file_obj:\n", + " file_obj.write(tar_file.extractfile(tarinfo).read())\n", + " print(f\"Stored XML file {file_path.name}\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### USPTO patents\n", + "\n", + "Since each USPTO file is a concatenation of several patents, we need to split its content into valid XML pieces. The following code downloads a sample zip file, split its content in sections, and dumps each section as an XML file. For simplicity, this pipeline is shown here in a sequential manner, but it could be parallelized." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import zipfile\n", + "\n", + "# Patent grants from December 17-23, 2024\n", + "url: str = (\n", + " \"https://bulkdata.uspto.gov/data/patent/grant/redbook/fulltext/2024/ipg241217.zip\"\n", + ")\n", + "XML_SPLITTER: str = ' 0\n", + " ): # cases like 0 and is_patent:\n", + " doc_num += 1\n", + " patent_id = f\"ipg241217-{doc_num}\"\n", + " with open(TEMP_DIR / f\"{patent_id}.xml\", \"wb\") as file_obj:\n", + " file_obj.write(patent_buffer.getbuffer())\n", + " is_patent = False\n", + " patent_buffer = BytesIO()\n", + " elif decoded_line.startswith(\"" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "index.from_documents(\n", + " documents=reader.load_data(TEMP_DIR / \"nihpp-2024.12.26.630351v1.nxml\"),\n", + " transformations=[node_parser],\n", + " storage_context=StorageContext.from_defaults(vector_store=vector_store),\n", + " embed_model=EMBED_MODEL,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Question-answering with RAG" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The retriever can be used to identify highly relevant documents:" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Node ID: 5afd36c0-a739-4a88-a51c-6d0f75358db5\n", + "Text: The portable fitness monitoring device 102 may be a device such\n", + "as, for example, a mobile phone, a personal digital assistant, a music\n", + "file player (e.g. and MP3 player), an intelligent article for wearing\n", + "(e.g. a fitness monitoring garment, wrist band, or watch), a dongle\n", + "(e.g. a small hardware device that protects software) that includes a\n", + "fitn...\n", + "Score: 0.772\n", + "\n", + "Node ID: f294b5fd-9089-43cb-8c4e-d1095a634ff1\n", + "Text: US Patent Application US 20120071306 entitled โ€œPortable\n", + "Multipurpose Whole Body Exercise Deviceโ€ discloses a portable\n", + "multipurpose whole body exercise device which can be used for general\n", + "fitness, Pilates-type, core strengthening, therapeutic, and\n", + "rehabilitative exercises as well as stretching and physical therapy\n", + "and which includes storable acc...\n", + "Score: 0.749\n", + "\n", + "Node ID: 8251c7ef-1165-42e1-8c91-c99c8a711bf7\n", + "Text: Program products, methods, and systems for providing fitness\n", + "monitoring services of the present invention can include any software\n", + "application executed by one or more computing devices. A computing\n", + "device can be any type of computing device having one or more\n", + "processors. For example, a computing device can be a workstation,\n", + "mobile device (e.g., ...\n", + "Score: 0.744\n", + "\n" + ] + } + ], + "source": [ + "retriever = index.as_retriever(similarity_top_k=3)\n", + "results = retriever.retrieve(\"What patents are related to fitness devices?\")\n", + "\n", + "for item in results:\n", + " print(item)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "With the query engine, we can run the question-answering with the RAG pattern on the set of indexed documents.\n", + "\n", + "First, we can prompt the LLM directly:" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ Prompt โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ\n",
+       "โ”‚ Do mosquitoes in high altitude expand viruses over large distances?                                             โ”‚\n",
+       "โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[1;31mโ•ญโ”€\u001b[0m\u001b[1;31mโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\u001b[0m\u001b[1;31m Prompt \u001b[0m\u001b[1;31mโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\u001b[0m\u001b[1;31mโ”€โ•ฎ\u001b[0m\n", + "\u001b[1;31mโ”‚\u001b[0m Do mosquitoes in high altitude expand viruses over large distances? \u001b[1;31mโ”‚\u001b[0m\n", + "\u001b[1;31mโ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ Generated Content โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ\n",
+       "โ”‚ Mosquitoes can be found at high altitudes, but their ability to transmit viruses over long distances is not     โ”‚\n",
+       "โ”‚ primarily dependent on altitude. Mosquitoes are vectors for various diseases, such as malaria, dengue fever,    โ”‚\n",
+       "โ”‚ and Zika virus, and their transmission range is more closely related to their movement, the presence of a host, โ”‚\n",
+       "โ”‚ and environmental conditions that support their survival and reproduction.                                      โ”‚\n",
+       "โ”‚                                                                                                                 โ”‚\n",
+       "โ”‚ At high altitudes, the environment can be less suitable for mosquitoes due to factors such as colder            โ”‚\n",
+       "โ”‚ temperatures, lower humidity, and stronger winds, which can limit their population size and distribution.       โ”‚\n",
+       "โ”‚ However, some species of mosquitoes have adapted to high-altitude environments and can still transmit diseases  โ”‚\n",
+       "โ”‚ in these areas.                                                                                                 โ”‚\n",
+       "โ”‚                                                                                                                 โ”‚\n",
+       "โ”‚ It is possible for mosquitoes to be transported by wind or human activities to higher altitudes, but this is    โ”‚\n",
+       "โ”‚ not a significant factor in their ability to transmit viruses over long distances. Instead, long-distance       โ”‚\n",
+       "โ”‚ transmission of viruses is more often associated with human travel and transportation, which can rapidly spread โ”‚\n",
+       "โ”‚ infected mosquitoes or humans to new areas, leading to the spread of disease.                                   โ”‚\n",
+       "โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[1;32mโ•ญโ”€\u001b[0m\u001b[1;32mโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\u001b[0m\u001b[1;32m Generated Content \u001b[0m\u001b[1;32mโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\u001b[0m\u001b[1;32mโ”€โ•ฎ\u001b[0m\n", + "\u001b[1;32mโ”‚\u001b[0m Mosquitoes can be found at high altitudes, but their ability to transmit viruses over long distances is not \u001b[1;32mโ”‚\u001b[0m\n", + "\u001b[1;32mโ”‚\u001b[0m primarily dependent on altitude. Mosquitoes are vectors for various diseases, such as malaria, dengue fever, \u001b[1;32mโ”‚\u001b[0m\n", + "\u001b[1;32mโ”‚\u001b[0m and Zika virus, and their transmission range is more closely related to their movement, the presence of a host, \u001b[1;32mโ”‚\u001b[0m\n", + "\u001b[1;32mโ”‚\u001b[0m and environmental conditions that support their survival and reproduction. \u001b[1;32mโ”‚\u001b[0m\n", + "\u001b[1;32mโ”‚\u001b[0m \u001b[1;32mโ”‚\u001b[0m\n", + "\u001b[1;32mโ”‚\u001b[0m At high altitudes, the environment can be less suitable for mosquitoes due to factors such as colder \u001b[1;32mโ”‚\u001b[0m\n", + "\u001b[1;32mโ”‚\u001b[0m temperatures, lower humidity, and stronger winds, which can limit their population size and distribution. \u001b[1;32mโ”‚\u001b[0m\n", + "\u001b[1;32mโ”‚\u001b[0m However, some species of mosquitoes have adapted to high-altitude environments and can still transmit diseases \u001b[1;32mโ”‚\u001b[0m\n", + "\u001b[1;32mโ”‚\u001b[0m in these areas. \u001b[1;32mโ”‚\u001b[0m\n", + "\u001b[1;32mโ”‚\u001b[0m \u001b[1;32mโ”‚\u001b[0m\n", + "\u001b[1;32mโ”‚\u001b[0m It is possible for mosquitoes to be transported by wind or human activities to higher altitudes, but this is \u001b[1;32mโ”‚\u001b[0m\n", + "\u001b[1;32mโ”‚\u001b[0m not a significant factor in their ability to transmit viruses over long distances. Instead, long-distance \u001b[1;32mโ”‚\u001b[0m\n", + "\u001b[1;32mโ”‚\u001b[0m transmission of viruses is more often associated with human travel and transportation, which can rapidly spread \u001b[1;32mโ”‚\u001b[0m\n", + "\u001b[1;32mโ”‚\u001b[0m infected mosquitoes or humans to new areas, leading to the spread of disease. \u001b[1;32mโ”‚\u001b[0m\n", + "\u001b[1;32mโ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from llama_index.core.base.llms.types import ChatMessage, MessageRole\n", + "from rich.console import Console\n", + "from rich.panel import Panel\n", + "\n", + "console = Console()\n", + "query = \"Do mosquitoes in high altitude expand viruses over large distances?\"\n", + "\n", + "usr_msg = ChatMessage(role=MessageRole.USER, content=query)\n", + "response = GEN_MODEL.chat(messages=[usr_msg])\n", + "\n", + "console.print(Panel(query, title=\"Prompt\", border_style=\"bold red\"))\n", + "console.print(\n", + " Panel(\n", + " response.message.content.strip(),\n", + " title=\"Generated Content\",\n", + " border_style=\"bold green\",\n", + " )\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now, we can compare the response when the model is prompted with the indexed PMC article as supporting context:" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ Generated Content with RAG โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ\n",
+       "โ”‚ Yes, mosquitoes in high altitude can expand viruses over large distances. A study intercepted 1,017 female      โ”‚\n",
+       "โ”‚ mosquitoes at altitudes of 120-290 m above ground over Mali and Ghana and screened them for infection with      โ”‚\n",
+       "โ”‚ arboviruses, plasmodia, and filariae. The study found that 3.5% of the mosquitoes were infected with            โ”‚\n",
+       "โ”‚ flaviviruses, and 1.1% were infectious. Additionally, the study identified 19 mosquito-borne pathogens,         โ”‚\n",
+       "โ”‚ including three arboviruses that affect humans (dengue, West Nile, and Mโ€™Poko viruses). The study provides      โ”‚\n",
+       "โ”‚ compelling evidence that mosquito-borne pathogens are often spread by windborne mosquitoes at altitude.         โ”‚\n",
+       "โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[1;32mโ•ญโ”€\u001b[0m\u001b[1;32mโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\u001b[0m\u001b[1;32m Generated Content with RAG \u001b[0m\u001b[1;32mโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\u001b[0m\u001b[1;32mโ”€โ•ฎ\u001b[0m\n", + "\u001b[1;32mโ”‚\u001b[0m Yes, mosquitoes in high altitude can expand viruses over large distances. A study intercepted 1,017 female \u001b[1;32mโ”‚\u001b[0m\n", + "\u001b[1;32mโ”‚\u001b[0m mosquitoes at altitudes of 120-290 m above ground over Mali and Ghana and screened them for infection with \u001b[1;32mโ”‚\u001b[0m\n", + "\u001b[1;32mโ”‚\u001b[0m arboviruses, plasmodia, and filariae. The study found that 3.5% of the mosquitoes were infected with \u001b[1;32mโ”‚\u001b[0m\n", + "\u001b[1;32mโ”‚\u001b[0m flaviviruses, and 1.1% were infectious. Additionally, the study identified 19 mosquito-borne pathogens, \u001b[1;32mโ”‚\u001b[0m\n", + "\u001b[1;32mโ”‚\u001b[0m including three arboviruses that affect humans (dengue, West Nile, and Mโ€™Poko viruses). The study provides \u001b[1;32mโ”‚\u001b[0m\n", + "\u001b[1;32mโ”‚\u001b[0m compelling evidence that mosquito-borne pathogens are often spread by windborne mosquitoes at altitude. \u001b[1;32mโ”‚\u001b[0m\n", + "\u001b[1;32mโ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from llama_index.core.vector_stores import ExactMatchFilter, MetadataFilters\n", + "\n", + "filters = MetadataFilters(\n", + " filters=[\n", + " ExactMatchFilter(key=\"filename\", value=\"nihpp-2024.12.26.630351v1.nxml\"),\n", + " ]\n", + ")\n", + "\n", + "query_engine = index.as_query_engine(llm=GEN_MODEL, filter=filters, similarity_top_k=3)\n", + "result = query_engine.query(query)\n", + "\n", + "console.print(\n", + " Panel(\n", + " result.response.strip(),\n", + " title=\"Generated Content with RAG\",\n", + " border_style=\"bold green\",\n", + " )\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Delete temporary files\n", + "\n", + "The XML files used in this notebook, as well as the Milvus local database will be removed." + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [], + "source": [ + "import shutil\n", + "\n", + "shutil.rmtree(TEMP_DIR)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": ".venv", + "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.8" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/docs/usage.md b/docs/usage.md index 9a5b555a..824f0f22 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -24,6 +24,20 @@ docling https://arxiv.org/pdf/2206.01062 To see all available options (export formats etc.) run `docling --help`. More details in the [CLI reference page](./reference/cli.md). +### Supported formats + +The document conversion in Docling supports several popular formats, including: + +- **PDF** (Portable Document Format): the format developed by Adobe to present documents compatible across application software, hardware, and operating systems. +- **.docx**, **.xlsx**, **.pptx** (Word, Excel, and PowerPoint): the Open XML formats suppored by Microsof Office. +- **Markdown**: a lightweight markup language to add formatting elements to plain text documents. +- **AsciiDoc**: a plain text markup language for writing technical content. +- **HTML** (Hypertext Markup Language): the standard markup language for creating web pages. +- **XHTML** (Extensible Hypertext Markup Language): the XML-based version of HTML. +- **XML** (Extensible Markup Language): a markup format for storing and transmitting data. Due to its flexibility, Docling requires custom implementations to identify the +semantics of the data. Currently, Docling supports the parsing of [USPTO](https://www.uspto.gov/patents) patents and [PubMed Centralยฎ (PMC)](https://pmc.ncbi.nlm.nih.gov/) articles. + + ### Advanced options #### Adjust pipeline features @@ -126,6 +140,32 @@ result = converter.convert(source) You can limit the CPU threads used by Docling by setting the environment variable `OMP_NUM_THREADS` accordingly. The default setting is using 4 CPU threads. +#### Use specific backend converters + +By default, Docling will try to identify the document format to apply the appropriate conversion backend (see the list of [supported formats](#supported-formats)). +You can restrict the `DocumentConverter` to a set of allowed document formats, as shown in the [Multi-format conversion](./examples/run_with_formats.py) example. +Alternatively, you can also use the specific backend that matches your document content. For instance, you can use `HTMLDocumentBackend` for HTML pages: + +```python +import urllib.request +from io import BytesIO +from docling.backend.html_backend import HTMLDocumentBackend +from docling.datamodel.base_models import InputFormat +from docling.datamodel.document import InputDocument + +url = "https://en.wikipedia.org/wiki/Duck" +text = urllib.request.urlopen(url).read() +in_doc = InputDocument( + path_or_stream=BytesIO(text), + format=InputFormat.HTML, + backend=HTMLDocumentBackend, + filename="duck.html", +) +backend = HTMLDocumentBackend(in_doc=in_doc, path_or_stream=BytesIO(text)) +result = backend.convert() +print(result.export_to_markdown()) +``` + ## Chunking You can chunk a Docling document using a [chunker](concepts/chunking.md), such as a diff --git a/mkdocs.yml b/mkdocs.yml index 2b2e2da0..bbff382e 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -77,7 +77,8 @@ nav: - "Force full page OCR": examples/full_page_ocr.py - "Automatic OCR language detection with tesseract": examples/tesseract_lang_detection.py - "Accelerator options": examples/run_with_accelerator.py - - "Simple translation": examples/translate.py + - "Simple translation": examples/translate.py + - examples/backend_xml_rag.ipynb - โœ‚๏ธ Chunking: - examples/hybrid_chunking.ipynb - ๐Ÿค– RAG with AI dev frameworks: diff --git a/tests/test_backend_msexcel.py b/tests/test_backend_msexcel.py index 0a4440dc..e664ed34 100644 --- a/tests/test_backend_msexcel.py +++ b/tests/test_backend_msexcel.py @@ -2,13 +2,8 @@ import os from pathlib import Path -from docling.backend.msword_backend import MsWordDocumentBackend from docling.datamodel.base_models import InputFormat -from docling.datamodel.document import ( - ConversionResult, - InputDocument, - SectionHeaderItem, -) +from docling.datamodel.document import ConversionResult from docling.document_converter import DocumentConverter GENERATE = False diff --git a/tests/test_backend_patent_uspto.py b/tests/test_backend_patent_uspto.py index 466568ac..21bc88c5 100644 --- a/tests/test_backend_patent_uspto.py +++ b/tests/test_backend_patent_uspto.py @@ -3,23 +3,16 @@ import json import logging import os -import unittest from pathlib import Path from tempfile import NamedTemporaryFile import pytest -import yaml from docling_core.types import DoclingDocument from docling_core.types.doc import DocItemLabel, TableData, TextItem from docling.backend.xml.uspto_backend import PatentUsptoDocumentBackend, XmlTable from docling.datamodel.base_models import InputFormat -from docling.datamodel.document import ( - ConversionResult, - InputDocument, - SectionHeaderItem, -) -from docling.document_converter import DocumentConverter +from docling.datamodel.document import InputDocument GENERATE: bool = True DATA_PATH: Path = Path("./tests/data/uspto/") diff --git a/tests/test_backend_pubmed.py b/tests/test_backend_pubmed.py index 4476bd24..8481c3dd 100644 --- a/tests/test_backend_pubmed.py +++ b/tests/test_backend_pubmed.py @@ -1,5 +1,4 @@ import json -import logging import os from io import BytesIO from pathlib import Path From b885b2fa3c2519c399ed4b9a3dd4c2f6f62235d1 Mon Sep 17 00:00:00 2001 From: Farzad Sunavala <40604067+farzad528@users.noreply.github.com> Date: Mon, 27 Jan 2025 02:40:35 -0600 Subject: [PATCH 11/12] docs: added markdown headings to enable TOC in github pages (#808) * docs: added markdown headings to enable TOC in github pages Signed-off-by: Farzad Sunavala <40604067+farzad528@users.noreply.github.com> * minor renames Signed-off-by: Farzad Sunavala <40604067+farzad528@users.noreply.github.com> * part 3 heading Signed-off-by: Farzad Sunavala <40604067+farzad528@users.noreply.github.com> --------- Signed-off-by: Farzad Sunavala <40604067+farzad528@users.noreply.github.com> --- docs/examples/rag_azuresearch.ipynb | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/docs/examples/rag_azuresearch.ipynb b/docs/examples/rag_azuresearch.ipynb index 4350ec2b..4f405dea 100644 --- a/docs/examples/rag_azuresearch.ipynb +++ b/docs/examples/rag_azuresearch.ipynb @@ -33,6 +33,7 @@ "metadata": {}, "source": [ "\n", + "## A recipe ๐Ÿง‘โ€๐Ÿณ ๐Ÿฅ ๐Ÿ’š\n", "\n", "This notebook demonstrates how to build a Retrieval-Augmented Generation (RAG) system using:\n", "- [Docling](https://ds4sd.github.io/docling/) for document parsing and chunking\n", @@ -61,7 +62,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Part 0: Prerequisites\n", + "### Part 0: Prerequisites\n", " - **Azure AI Search** resource\n", " - **Azure OpenAI** resource with a deployed embedding and chat completion model (e.g. `text-embedding-3-small` and `gpt-4o`) \n", " - **Docling 2.12+** (installs `docling_core` automatically) Docling installed (Python 3.8+ environment)\n", @@ -114,7 +115,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Part 1: Parse the PDF with Docling\n", + "### Part 1: Parse the PDF with Docling\n", "\n", "Weโ€™ll parse the **Microsoft GraphRAG Research Paper** (~15 pages). Parsing should be relatively quick, even on CPU, but it will be faster on a GPU or MPS device if available.\n", "\n", @@ -235,7 +236,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Part 2: Hierarchical Chunking\n", + "### Part 2: Hierarchical Chunking\n", "We convert the `Document` into smaller chunks for embedding and indexing. The built-in `HierarchicalChunker` preserves structure. " ] }, @@ -276,7 +277,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Part 3: Create Azure Search Index and Push Chunk Embeddings\n", + "### Part 3: Create Azure Search Index and Push Chunk Embeddings\n", "Weโ€™ll define a vector index in Azure AI Search, then embed each chunk using Azure OpenAI and upload in batches." ] }, @@ -382,7 +383,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### Embed and Upsert to Azure AI Search\n" + "#### Generate Embeddings and Upload to Azure AI Search\n" ] }, { @@ -497,8 +498,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Part 4: RAG Query with Azure OpenAI\n", - "Combine retrieval from Azure Search with Chat Completions (aka. grounding your LLM)" + "### Part 4: Perform RAG I\n", + "Combine retrieval from Azure AI Search with Azure OpenAI Chat Completions (aka. grounding your LLM)" ] }, { From 8a4ec77576b8a9fd60d0047939665d00cf93b4dd Mon Sep 17 00:00:00 2001 From: Farzad Sunavala <40604067+farzad528@users.noreply.github.com> Date: Mon, 27 Jan 2025 04:24:26 -0600 Subject: [PATCH 12/12] docs: typo (#814) * Update rag_azuresearch.ipynb Signed-off-by: Farzad Sunavala <40604067+farzad528@users.noreply.github.com> * typo Signed-off-by: Farzad Sunavala <40604067+farzad528@users.noreply.github.com> --------- Signed-off-by: Farzad Sunavala <40604067+farzad528@users.noreply.github.com> --- docs/examples/rag_azuresearch.ipynb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/examples/rag_azuresearch.ipynb b/docs/examples/rag_azuresearch.ipynb index 4f405dea..dcfd19e3 100644 --- a/docs/examples/rag_azuresearch.ipynb +++ b/docs/examples/rag_azuresearch.ipynb @@ -277,7 +277,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### Part 3: Create Azure Search Index and Push Chunk Embeddings\n", + "### Part 3: Create Azure AI Search Index and Push Chunk Embeddings\n", "Weโ€™ll define a vector index in Azure AI Search, then embed each chunk using Azure OpenAI and upload in batches." ] }, @@ -498,7 +498,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### Part 4: Perform RAG I\n", + "### Part 4: Perform RAG over PDF\n", "Combine retrieval from Azure AI Search with Azure OpenAI Chat Completions (aka. grounding your LLM)" ] },