From b1b074780a212524a8382bf50a03f6b2579be652 Mon Sep 17 00:00:00 2001 From: felix Date: Tue, 27 Oct 2026 09:19:45 +0100 Subject: [PATCH] [docs] Refactor documentation --- .codacy.yml | 2 +- .gitignore | 2 + .pre-commit-config.yaml | 2 +- README.md | 4 +- docs/README.md | 88 +- docs/build.sh | 76 +- docs/source/_includes/pipeline.html | 67 ++ docs/source/_static/css/doctr.css | 1022 +++++++++++++++++ docs/source/_static/css/mindee.css | 52 - docs/source/_static/fonts/LICENSE-Inter.txt | 93 ++ .../_static/fonts/LICENSE-JetBrainsMono.txt | 93 ++ .../fonts/inter-latin-ext-wght-normal.woff2 | Bin 0 -> 85068 bytes .../fonts/inter-latin-wght-normal.woff2 | Bin 0 -> 48256 bytes ...jetbrains-mono-latin-ext-wght-normal.woff2 | Bin 0 -> 15196 bytes .../jetbrains-mono-latin-wght-normal.woff2 | Bin 0 -> 40404 bytes .../_static/images/Logo-docTR-white.png | Bin 7568 -> 0 bytes docs/source/_static/images/demo.png | Bin 0 -> 177099 bytes .../_static/images/examples/invoice.pdf | Bin 0 -> 104294 bytes .../_static/images/examples/invoice_input.png | Bin 0 -> 90932 bytes .../images/examples/invoice_layout.png | Bin 0 -> 100097 bytes .../images/examples/invoice_synthesized.png | Bin 0 -> 84040 bytes .../_static/images/examples/invoice_words.png | Bin 0 -> 98225 bytes docs/source/_static/images/logo-dark.png | Bin 0 -> 5337 bytes docs/source/_static/images/logo-light.png | Bin 0 -> 5321 bytes docs/source/_static/js/custom.js | 104 -- docs/source/_static/js/doctr.js | 15 + docs/source/_static/switcher.json | 33 + docs/source/_templates/license.html | 3 + docs/source/_templates/maintainers.html | 4 + docs/source/api/contrib.md | 13 + docs/source/api/datasets.md | 93 ++ docs/source/api/index.md | 61 + docs/source/api/io.md | 159 +++ .../{modules/models.rst => api/models.md} | 194 ++-- docs/source/api/transforms.md | 70 ++ docs/source/api/utils.md | 53 + docs/source/changelog.md | 27 + docs/source/changelog.rst | 86 -- docs/source/community/index.md | 114 ++ docs/source/community/notebooks.rst | 1 + docs/source/community/resources.md | 43 + docs/source/community/resources.rst | 23 - docs/source/community/tools.md | 41 + docs/source/community/tools.rst | 90 -- docs/source/conf.py | 374 ++++-- docs/source/deployment/configuration.md | 64 ++ docs/source/deployment/docker.md | 59 + docs/source/deployment/index.md | 52 + docs/source/deployment/onnx.md | 74 ++ docs/source/deployment/performance.md | 136 +++ docs/source/deployment/web_api.md | 80 ++ docs/source/getting_started/concepts.md | 176 +++ docs/source/getting_started/index.md | 43 + docs/source/getting_started/installation.md | 134 +++ docs/source/getting_started/installing.rst | 52 - docs/source/getting_started/quickstart.md | 249 ++++ docs/source/getting_started/quickstart.rst | 110 -- docs/source/index.md | 194 ++++ docs/source/index.rst | 127 -- docs/source/models/detection.md | 49 + docs/source/models/end_to_end.md | 31 + docs/source/models/index.md | 71 ++ docs/source/models/layout.md | 36 + docs/source/models/recognition.md | 55 + docs/source/models/table_structure.md | 34 + docs/source/models/vocabs.md | 34 + docs/source/modules/contrib.rst | 13 - docs/source/modules/datasets.rst | 404 ------- docs/source/modules/io.rst | 240 ---- docs/source/modules/transforms.rst | 39 - docs/source/modules/utils.rst | 67 -- docs/source/notebooks.rst | 1 - docs/source/training/custom_models.md | 175 +++ docs/source/training/datasets.md | 137 +++ docs/source/training/index.md | 63 + docs/source/training/sharing_models.md | 70 ++ docs/source/training/train.md | 233 ++++ docs/source/user_guide/artefacts.md | 56 + docs/source/user_guide/cli.md | 135 +++ docs/source/user_guide/exporting.md | 210 ++++ docs/source/user_guide/faq.md | 112 ++ docs/source/user_guide/index.md | 124 ++ docs/source/user_guide/kie.md | 73 ++ docs/source/user_guide/layout_and_tables.md | 177 +++ docs/source/user_guide/loading_documents.md | 131 +++ docs/source/user_guide/ocr_predictor.md | 323 ++++++ docs/source/user_guide/results.md | 234 ++++ docs/source/user_guide/rotated_documents.md | 94 ++ .../user_guide/standalone_predictors.md | 96 ++ .../using_doctr/custom_models_training.rst | 221 ---- docs/source/using_doctr/running_on_aws.rst | 10 - docs/source/using_doctr/sharing_models.rst | 127 -- docs/source/using_doctr/using_cli.rst | 124 -- .../using_doctr/using_contrib_modules.rst | 51 - docs/source/using_doctr/using_datasets.rst | 188 --- .../source/using_doctr/using_model_export.rst | 151 --- docs/source/using_doctr/using_models.rst | 836 -------------- doctr/utils/metrics.py | 3 +- pyproject.toml | 28 +- 99 files changed, 6564 insertions(+), 3344 deletions(-) create mode 100644 docs/source/_includes/pipeline.html create mode 100644 docs/source/_static/css/doctr.css delete mode 100644 docs/source/_static/css/mindee.css create mode 100644 docs/source/_static/fonts/LICENSE-Inter.txt create mode 100644 docs/source/_static/fonts/LICENSE-JetBrainsMono.txt create mode 100644 docs/source/_static/fonts/inter-latin-ext-wght-normal.woff2 create mode 100644 docs/source/_static/fonts/inter-latin-wght-normal.woff2 create mode 100644 docs/source/_static/fonts/jetbrains-mono-latin-ext-wght-normal.woff2 create mode 100644 docs/source/_static/fonts/jetbrains-mono-latin-wght-normal.woff2 delete mode 100644 docs/source/_static/images/Logo-docTR-white.png create mode 100644 docs/source/_static/images/demo.png create mode 100644 docs/source/_static/images/examples/invoice.pdf create mode 100644 docs/source/_static/images/examples/invoice_input.png create mode 100644 docs/source/_static/images/examples/invoice_layout.png create mode 100644 docs/source/_static/images/examples/invoice_synthesized.png create mode 100644 docs/source/_static/images/examples/invoice_words.png create mode 100644 docs/source/_static/images/logo-dark.png create mode 100644 docs/source/_static/images/logo-light.png delete mode 100644 docs/source/_static/js/custom.js create mode 100644 docs/source/_static/js/doctr.js create mode 100644 docs/source/_static/switcher.json create mode 100644 docs/source/_templates/license.html create mode 100644 docs/source/_templates/maintainers.html create mode 100644 docs/source/api/contrib.md create mode 100644 docs/source/api/datasets.md create mode 100644 docs/source/api/index.md create mode 100644 docs/source/api/io.md rename docs/source/{modules/models.rst => api/models.md} (65%) create mode 100644 docs/source/api/transforms.md create mode 100644 docs/source/api/utils.md create mode 100644 docs/source/changelog.md delete mode 100644 docs/source/changelog.rst create mode 100644 docs/source/community/index.md create mode 120000 docs/source/community/notebooks.rst create mode 100644 docs/source/community/resources.md delete mode 100644 docs/source/community/resources.rst create mode 100644 docs/source/community/tools.md delete mode 100644 docs/source/community/tools.rst create mode 100644 docs/source/deployment/configuration.md create mode 100644 docs/source/deployment/docker.md create mode 100644 docs/source/deployment/index.md create mode 100644 docs/source/deployment/onnx.md create mode 100644 docs/source/deployment/performance.md create mode 100644 docs/source/deployment/web_api.md create mode 100644 docs/source/getting_started/concepts.md create mode 100644 docs/source/getting_started/index.md create mode 100644 docs/source/getting_started/installation.md delete mode 100644 docs/source/getting_started/installing.rst create mode 100644 docs/source/getting_started/quickstart.md delete mode 100644 docs/source/getting_started/quickstart.rst create mode 100644 docs/source/index.md delete mode 100644 docs/source/index.rst create mode 100644 docs/source/models/detection.md create mode 100644 docs/source/models/end_to_end.md create mode 100644 docs/source/models/index.md create mode 100644 docs/source/models/layout.md create mode 100644 docs/source/models/recognition.md create mode 100644 docs/source/models/table_structure.md create mode 100644 docs/source/models/vocabs.md delete mode 100644 docs/source/modules/contrib.rst delete mode 100644 docs/source/modules/datasets.rst delete mode 100644 docs/source/modules/io.rst delete mode 100644 docs/source/modules/transforms.rst delete mode 100644 docs/source/modules/utils.rst delete mode 120000 docs/source/notebooks.rst create mode 100644 docs/source/training/custom_models.md create mode 100644 docs/source/training/datasets.md create mode 100644 docs/source/training/index.md create mode 100644 docs/source/training/sharing_models.md create mode 100644 docs/source/training/train.md create mode 100644 docs/source/user_guide/artefacts.md create mode 100644 docs/source/user_guide/cli.md create mode 100644 docs/source/user_guide/exporting.md create mode 100644 docs/source/user_guide/faq.md create mode 100644 docs/source/user_guide/index.md create mode 100644 docs/source/user_guide/kie.md create mode 100644 docs/source/user_guide/layout_and_tables.md create mode 100644 docs/source/user_guide/loading_documents.md create mode 100644 docs/source/user_guide/ocr_predictor.md create mode 100644 docs/source/user_guide/results.md create mode 100644 docs/source/user_guide/rotated_documents.md create mode 100644 docs/source/user_guide/standalone_predictors.md delete mode 100644 docs/source/using_doctr/custom_models_training.rst delete mode 100644 docs/source/using_doctr/running_on_aws.rst delete mode 100644 docs/source/using_doctr/sharing_models.rst delete mode 100644 docs/source/using_doctr/using_cli.rst delete mode 100644 docs/source/using_doctr/using_contrib_modules.rst delete mode 100644 docs/source/using_doctr/using_datasets.rst delete mode 100644 docs/source/using_doctr/using_model_export.rst delete mode 100644 docs/source/using_doctr/using_models.rst diff --git a/.codacy.yml b/.codacy.yml index 626bab79e8..783221dcea 100644 --- a/.codacy.yml +++ b/.codacy.yml @@ -1,7 +1,7 @@ --- # Codacy configuration file # https://docs.codacy.com/repositories-configure/codacy-configuration-file/ -# Analyze only doctr/ and references/ — everything else is excluded. +# Analyze only doctr/ and references/ - everything else is excluded. exclude_paths: - ".github/**" diff --git a/.gitignore b/.gitignore index b2169a9bc9..5ed675fbf6 100644 --- a/.gitignore +++ b/.gitignore @@ -70,6 +70,8 @@ instance/ # Sphinx documentation docs/_build/ +docs/build/ +docs/source/models/_generated/ # PyBuilder target/ diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 1b702b4795..907ec7eb72 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -16,7 +16,7 @@ repos: - id: no-commit-to-branch args: ['--branch', 'main'] - repo: https://github.com/astral-sh/ruff-pre-commit - rev: v0.17.1 + rev: v0.17.3 hooks: - id: ruff args: [ --fix ] diff --git a/README.md b/README.md index 561e637437..ee52fdb638 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,7 @@ What you can expect from this repository: ### Getting your pretrained model End-to-End OCR is achieved in docTR using a two-stage approach: text detection (localizing words), then text recognition (identify all characters in the word). -As such, you can select the architecture used for [text detection](https://mindee.github.io/doctr/latest/modules/models.html#doctr-models-detection), and the one for [text recognition](https://mindee.github.io/doctr/latest//modules/models.html#doctr-models-recognition) from the list of available implementations. +As such, you can select the architecture used for [text detection](https://mindee.github.io/doctr/latest/models/detection.html), and the one for [text recognition](https://mindee.github.io/doctr/latest/models/recognition.html) from the list of available implementations. ```python from doctr.models import ocr_predictor @@ -119,7 +119,7 @@ plt.show() ![Synthesis sample](https://github.com/mindee/doctr/raw/main/docs/images/synthesized_sample.png) The `ocr_predictor` returns a `Document` object with a nested structure (with `Page`, `Block`, `Line`, `Word`, `Artefact`). -To get a better understanding of our document model, check our [documentation](https://mindee.github.io/doctr/modules/io.html#document-structure): +To get a better understanding of our document model, check our [documentation](https://mindee.github.io/doctr/latest/getting_started/concepts.html#the-document-tree): You can also export them as a nested dict, more appropriate for JSON format: diff --git a/docs/README.md b/docs/README.md index 0aabfe1048..3ac55a93f2 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,13 +1,85 @@ -# Contribute to Documentation +# docTR documentation -Please have a look at our [contribution guide](../CONTRIBUTING.md) to see how to install -the development environment and how to generate the documentation. +The source of [mindee.github.io/doctr](https://mindee.github.io/doctr), built with [Sphinx](https://www.sphinx-doc.org), +the [PyData theme](https://pydata-sphinx-theme.readthedocs.io), [MyST Markdown](https://myst-parser.readthedocs.io) +and [sphinx-design](https://sphinx-design.readthedocs.io). -To install only the `docs` environment, you can do: +## Build it locally ```bash -# Make sure you are at the root of the repository before executing these commands -python -m pip install --upgrade pip -pip install -e .[viz,html] -pip install -e .[docs] +# From the root of the repository +pip install -e ".[viz,html,docs]" +make docs-single-version ``` + +Then open `docs/_build/index.html` in your browser. Sphinx only rebuilds the pages that changed: delete +`docs/_build` to force a full rebuild. For a live preview while you write, `pip install sphinx-autobuild` and run +`sphinx-autobuild docs/source docs/_build`. + +`make docs` builds all the deployed versions (see `build.sh`), as the CI does. + +## Structure + +| Folder | Section | Content | +| --- | --- | --- | +| `source/index.md` | Landing page | Hero, features and entry points | +| `source/getting_started/` | Get started | Installation, quickstart, core concepts | +| `source/user_guide/` | User guide | One page per feature, task-oriented | +| `source/models/` | Model zoo | Architectures, benchmarks and vocabularies | +| `source/training/` | Training | Datasets, training scripts, custom and shared models | +| `source/deployment/` | Deployment | Performance, ONNX, Docker, web API, configuration | +| `source/api/` | API reference | Generated from the docstrings with `autodoc` | +| `source/community/` | Community | Help, tools, resources, contributing and changelog | +| `source/_static/` | | CSS (`css/doctr.css`), JS, fonts, images and the version switcher (`switcher.json`) | +| `source/_templates/` | | Footer components | +| `source/_includes/` | | Snippets included in several pages (pipeline diagram) | + +Each section has an `index.md` with an overview and the `toctree` of its pages. The top navigation bar lists the +sections of the `toctree` of `source/index.md`. + +## Writing pages + +Pages are written in [MyST Markdown](https://myst-parser.readthedocs.io/en/latest/syntax/typography.html), a superset +of CommonMark that supports all Sphinx features: + +````markdown +# Page title + +A first paragraph that says what the page is about: it is displayed as a lead. + +## Section + +Link to another page: [](../user_guide/exporting.md), or to a section: [](exporting.md#figures). +Link to the API: {func}`~doctr.models.ocr_predictor`, {class}`~doctr.io.Document`. + +```python +from doctr.models import ocr_predictor +``` + +:::{tip} +Admonitions: note, tip, important, warning, seealso, dropdown... +::: + +::::{tab-set} +:::{tab-item} pip +... +::: +:::: +```` + +Guidelines: + +- **Show, then explain**: start sections with a short runnable snippet, then describe the options. +- **Keep snippets runnable**: complete imports, realistic file names, and real outputs. The outputs shown in the + guides come from `source/_static/images/examples/invoice.pdf`. +- **One topic per page**, and link to the related pages instead of repeating them. +- **Cards** (`grid-item-card`) are for navigation, **tabs** for alternatives (e.g. CPU / GPU), **dropdowns** for + details most readers can skip. +- Document new public functions and classes in the docstrings (Google style), and add them to the matching page of + `source/api/`. + +## Releasing a new version + +1. Add the release to `source/changelog.md`. +2. Add it to `source/_static/switcher.json` and move the `(stable)` label and `"preferred": true` to it. +3. In `build.sh`, build the previous stable release into its own folder and the new one at the root. diff --git a/docs/build.sh b/docs/build.sh index 29e74cc8a5..c8234350f3 100644 --- a/docs/build.sh +++ b/docs/build.sh @@ -1,40 +1,56 @@ +# Build the multi-version documentation deployed on https://mindee.github.io/doctr +# +# build/ -> latest stable release +# build/latest/ -> main branch +# build/vX.Y.Z/ -> previous releases +# +# Every version is rendered with the configuration, theme and static files of the main branch, so that they all share +# the same look and version switcher (`source/_static/switcher.json`, to update at each release). +# +# deploy_doc +# commit: commit to build ("" for the current one) +# folder: output folder in build/ ("latest", "vX.Y.Z", or "" for the stable version at the root) +# version: version shown as selected in the version switcher (must match an entry of switcher.json) function deploy_doc(){ - if [ ! -z "$1" ] - then - git checkout $1 + local commit=$1 folder=$2 version=$3 + if [ -n "$commit" ]; then + git checkout "$commit" fi - COMMIT=$(git rev-parse --short HEAD) - echo "Creating doc at commit" $COMMIT "and pushing to folder $2" + echo "Creating doc at commit $(git rev-parse --short HEAD) (version: $version)" pip install -U .. - if [ ! -z "$2" ] - then - if [ "$2" == "latest" ]; then - echo "Pushing main" - sphinx-build source _build -a && mkdir build && mkdir build/$2 && cp -a _build/* build/$2/ - elif [ -d build/$2 ]; then - echo "Directory" $2 "already exists" - else - echo "Pushing version" $2 - cp -r _static source/ && cp _conf.py source/conf.py - sphinx-build source _build -a - mkdir build/$2 && cp -a _build/* build/$2/ && git checkout source/ && git clean -f source/ - fi + + # Older commits are rendered with the current configuration and assets + local legacy=0 + if [ -n "$commit" ]; then + legacy=$([ -f source/index.md ] && echo 0 || echo 1) + rm -rf source/_static source/_templates + cp -r _static _templates source/ && cp _conf.py source/conf.py + fi + + local out=build + if [ -n "$folder" ]; then + out=build/$folder + fi + if [ -d "$out" ] && [ -n "$folder" ]; then + echo "Directory $out already exists" else - echo "Pushing stable" - cp -r _static source/ && cp _conf.py source/conf.py - sphinx-build source build -a && git checkout source/ && git clean -f source/ + DOCTR_DOCS_VERSION=$version DOCTR_DOCS_LEGACY=$legacy sphinx-build source _build -a + mkdir -p "$out" && cp -a _build/. "$out/" && rm -rf _build + fi + + if [ -n "$commit" ]; then + git checkout source/ && git clean -fd source/ fi } # You can find the commit for each tag on https://github.com/mindee/doctr/tags if [ -d build ]; then rm -Rf build; fi -cp -r source/_static . -cp source/conf.py _conf.py +cp -r source/_static source/_templates . && cp source/conf.py _conf.py git fetch --all --tags --unshallow -deploy_doc "" latest -deploy_doc "1c9ce92" v0.11.0 -deploy_doc "97d4006" v0.12.0 -deploy_doc "7dabbe1" v1.0.0 -deploy_doc "6541a6e" v1.0.1 -deploy_doc "2d8e244" # v1.1.0 Latest stable release -rm -rf _build _static _conf.py +deploy_doc "" latest latest +deploy_doc "1c9ce92" v0.11.0 v0.11.0 +deploy_doc "97d4006" v0.12.0 v0.12.0 +deploy_doc "7dabbe1" v1.0.0 v1.0.0 +deploy_doc "6541a6e" v1.0.1 v1.0.1 +deploy_doc "2d8e244" "" v1.1.0 # Latest stable release +rm -rf _build _static _templates _conf.py diff --git a/docs/source/_includes/pipeline.html b/docs/source/_includes/pipeline.html new file mode 100644 index 0000000000..65c0a06a5b --- /dev/null +++ b/docs/source/_includes/pipeline.html @@ -0,0 +1,67 @@ + diff --git a/docs/source/_static/css/doctr.css b/docs/source/_static/css/doctr.css new file mode 100644 index 0000000000..6a8e0906b7 --- /dev/null +++ b/docs/source/_static/css/doctr.css @@ -0,0 +1,1022 @@ +/* ========================================================================== + docTR documentation theme (on top of pydata-sphinx-theme) + ========================================================================== */ + +/* -- Self-hosted fonts (SIL Open Font License, see ../fonts) ---------------- */ + +@font-face { + font-family: "Inter"; + font-style: normal; + font-display: swap; + font-weight: 100 900; + src: url("../fonts/inter-latin-wght-normal.woff2") format("woff2-variations"); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, + U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} + +@font-face { + font-family: "Inter"; + font-style: normal; + font-display: swap; + font-weight: 100 900; + src: url("../fonts/inter-latin-ext-wght-normal.woff2") format("woff2-variations"); + unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, + U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; +} + +@font-face { + font-family: "JetBrains Mono"; + font-style: normal; + font-display: swap; + font-weight: 100 800; + src: url("../fonts/jetbrains-mono-latin-wght-normal.woff2") format("woff2-variations"); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, + U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} + +@font-face { + font-family: "JetBrains Mono"; + font-style: normal; + font-display: swap; + font-weight: 100 800; + src: url("../fonts/jetbrains-mono-latin-ext-wght-normal.woff2") format("woff2-variations"); + unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, + U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; +} + +/* -- Design tokens ---------------------------------------------------------- */ + +:root { + --doctr-navy: #001e3f; + --doctr-navy-2: #0a2f5c; + --doctr-red: #ff003e; + --doctr-red-soft: #fd3246; + --doctr-radius: 12px; + --doctr-radius-sm: 8px; + + --pst-font-family-base: "Inter", ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", + Arial, sans-serif; + --pst-font-family-heading: var(--pst-font-family-base); + --pst-font-family-monospace: "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; + --pst-font-size-base: 1rem; + --pst-header-height: 4rem; + --pst-sidebar-font-size: 0.92rem; +} + +html[data-theme="light"] { + --pst-color-primary: #0b57d0; + --pst-color-primary-highlight: #0842a0; + --pst-color-primary-bg: #e7efff; + --pst-color-secondary: #e0003a; + --pst-color-secondary-highlight: #b8002f; + --pst-color-secondary-bg: #ffe4ea; + --pst-color-accent: #e0003a; + --pst-color-link: var(--pst-color-primary); + --pst-color-link-hover: var(--pst-color-primary-highlight); + --pst-color-text-base: #1b2433; + --pst-color-text-muted: #556274; + --pst-color-heading: #0b1b33; + --pst-color-background: #ffffff; + --pst-color-on-background: #ffffff; + --pst-color-surface: #f5f7fa; + --pst-color-border: #e1e6ed; + --pst-color-border-muted: #eceff4; + --pst-color-inline-code: #1f2a3d; + --pst-color-target: #fff3c4; + --pst-color-table-row-hover-bg: #eef3ff; + --sd-color-primary: var(--pst-color-primary); + --sd-color-primary-highlight: var(--pst-color-primary-highlight); + --sd-color-primary-bg: var(--pst-color-primary-bg); + --sd-color-secondary: var(--pst-color-secondary); + --sd-color-secondary-highlight: var(--pst-color-secondary-highlight); + --sd-color-secondary-bg: var(--pst-color-secondary-bg); + --sd-color-card-border: var(--pst-color-border); + + --doctr-code-bg: #f6f8fa; + --doctr-card-shadow: 0 1px 2px rgba(16, 24, 40, 0.04), 0 1px 3px rgba(16, 24, 40, 0.06); + --doctr-card-shadow-hover: 0 10px 24px -8px rgba(11, 87, 208, 0.25); +} + +html[data-theme="dark"] { + --pst-color-primary: #7cacf8; + --pst-color-primary-highlight: #a8c7fa; + --pst-color-primary-bg: #0d2a55; + --pst-color-secondary: #ff5c7a; + --pst-color-secondary-highlight: #ff8aa0; + --pst-color-secondary-bg: #4a0f1f; + --pst-color-accent: #ff5c7a; + --pst-color-link: var(--pst-color-primary); + --pst-color-link-hover: var(--pst-color-primary-highlight); + --pst-color-text-base: #d5dce6; + --pst-color-text-muted: #98a3b3; + --pst-color-heading: #f1f5fa; + --pst-color-background: #0b111c; + --pst-color-on-background: #111a28; + --pst-color-surface: #152033; + --pst-color-border: #243247; + --pst-color-border-muted: #1b2639; + --pst-color-inline-code: #e3e9f2; + --pst-color-target: #4a3f05; + --pst-color-table-row-hover-bg: #17284a; + --sd-color-primary: var(--pst-color-primary); + --sd-color-primary-highlight: var(--pst-color-primary-highlight); + --sd-color-primary-bg: var(--pst-color-primary-bg); + --sd-color-primary-text: #0b111c; + --sd-color-secondary: var(--pst-color-secondary); + --sd-color-secondary-highlight: var(--pst-color-secondary-highlight); + --sd-color-secondary-bg: var(--pst-color-secondary-bg); + --sd-color-secondary-text: #0b111c; + --sd-color-card-border: var(--pst-color-border); + --sd-color-card-background: var(--pst-color-on-background); + + --doctr-code-bg: #0f1726; + --doctr-card-shadow: 0 1px 2px rgba(0, 0, 0, 0.3); + --doctr-card-shadow-hover: 0 12px 28px -10px rgba(124, 172, 248, 0.35); +} + +/* -- Typography ------------------------------------------------------------- */ + +body { + font-feature-settings: "cv11", "ss01"; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.bd-article h1, +.bd-article h2, +.bd-article h3, +.bd-article h4 { + font-weight: 700; + letter-spacing: -0.018em; +} + +.bd-article h1 { + font-size: 2.3rem; + letter-spacing: -0.03em; + margin-bottom: 0.6rem; +} + +.bd-article h2 { + font-size: 1.6rem; + margin-top: 2.6rem; + padding-top: 0.2rem; +} + +.bd-article h3 { + font-size: 1.22rem; + margin-top: 2rem; +} + +/* Lead paragraph: the first paragraph right under the page title */ +.bd-article section > h1 + p { + font-size: 1.12rem; + line-height: 1.65; + color: var(--pst-color-text-muted); +} + +.bd-article p, +.bd-article li { + line-height: 1.7; +} + +a { + text-underline-offset: 0.18em; +} + +/* -- Header ------------------------------------------------------------------ */ + +.bd-header { + box-shadow: none; + border-bottom: 1px solid var(--pst-color-border); + backdrop-filter: saturate(160%) blur(10px); + -webkit-backdrop-filter: saturate(160%) blur(10px); +} + +html[data-theme="light"] .bd-header { + background-color: rgba(255, 255, 255, 0.86) !important; +} + +html[data-theme="dark"] .bd-header { + background-color: rgba(11, 17, 28, 0.86) !important; +} + +.navbar-brand img { + height: 30px; +} + +.bd-header .navbar-header-items__start .navbar-item { + gap: 0.75rem; +} + +.bd-header ul.navbar-nav > li.nav-item > .nav-link { + font-weight: 550; + font-size: 0.95rem; +} + +.bd-header ul.navbar-nav > li.nav-item.current > .nav-link { + color: var(--pst-color-heading); +} + +.bd-header ul.navbar-nav > li.nav-item.current > .nav-link::before { + border-bottom: 3px solid var(--pst-color-secondary); +} + +/* Version switcher button */ +.version-switcher__button { + font-size: 0.82rem; + font-weight: 600; + border-radius: 999px; + padding: 0.15rem 0.7rem; + border-color: var(--pst-color-border); +} + +/* -- Sidebars ---------------------------------------------------------------- */ + +.bd-sidebar-primary { + border-right: 1px solid var(--pst-color-border-muted); +} + +.bd-sidebar-primary .sidebar-primary-items__start .bd-links__title { + font-size: 0.78rem; + text-transform: uppercase; + letter-spacing: 0.08em; + color: var(--pst-color-text-muted); +} + +.bd-sidebar-primary .toctree-l1 > a, +.bd-sidebar-primary .toctree-l2 > a { + border-radius: var(--doctr-radius-sm); +} + +nav.bd-links li > a:hover { + background-color: var(--pst-color-surface); + text-decoration: none; +} + +nav.bd-links .current > a { + box-shadow: inset 3px 0 0 var(--pst-color-secondary); + background-color: var(--pst-color-surface); + font-weight: 600; +} + +.bd-sidebar-secondary { + font-size: 0.88rem; +} + +/* -- Code -------------------------------------------------------------------- */ + +div.highlight, +div.highlight pre { + background-color: var(--doctr-code-bg) !important; +} + +div.highlight { + border: 1px solid var(--pst-color-border); + border-radius: var(--doctr-radius-sm); +} + +/* Code must read exactly as typed: no ligatures (e.g. "==" or "->") */ +pre, +code, +kbd, +.doctr-tree { + font-variant-ligatures: none; + font-feature-settings: "liga" 0, "calt" 0; +} + +div.highlight pre { + border: none; + border-radius: var(--doctr-radius-sm); + font-size: 0.86rem; + line-height: 1.6; + padding: 1rem 1.1rem; + box-shadow: none; +} + +.bd-content div.literal-block-wrapper, +div[class*="highlight-"] { + border-radius: var(--doctr-radius-sm); +} + +code.literal { + font-size: 0.86em; + padding: 0.12em 0.36em; + border-radius: 6px; + border: 1px solid var(--pst-color-border-muted); + background-color: var(--pst-color-surface); +} + +/* Code-block captions (file names) */ +div.code-block-caption { + font-family: var(--pst-font-family-monospace); + font-size: 0.8rem; + padding: 0.45rem 0.9rem; + border: 1px solid var(--pst-color-border); + border-bottom: none; + border-radius: var(--doctr-radius-sm) var(--doctr-radius-sm) 0 0; + background: var(--pst-color-surface); +} + +div.code-block-caption + div.highlight-default, +div.code-block-caption + div[class*="highlight-"] div.highlight { + border-top-left-radius: 0; + border-top-right-radius: 0; +} + +/* Keep the page TOC and the navigation light */ +.bd-toc code.literal, +nav.bd-links code.literal, +.bd-breadcrumbs code.literal { + border: none; + background: none; + padding: 0; + font-size: 0.92em; +} + +/* Inline code inside links keeps the link color */ +a code.literal, +a:visited code.literal { + color: var(--pst-color-link); +} + +/* Figures */ +.bd-article img.align-center { + border: 1px solid var(--pst-color-border); + border-radius: var(--doctr-radius); + box-shadow: var(--doctr-card-shadow); + margin: 1.25rem auto 1.75rem; +} + +button.copybtn { + border-radius: 6px; +} + +/* -- Admonitions ------------------------------------------------------------ */ + +.admonition, +div.admonition { + border-radius: var(--doctr-radius-sm); + box-shadow: none; + border: 1px solid var(--pst-color-border); + border-left-width: 4px; +} + +/* -- Tables ------------------------------------------------------------------ */ + +.bd-article table.table { + font-size: 0.9rem; + border-radius: var(--doctr-radius-sm); +} + +.bd-article table.table th { + font-weight: 600; + white-space: nowrap; +} + +.bd-article table.table td code.literal { + white-space: nowrap; +} + +/* -- sphinx-design ------------------------------------------------------------ */ + +.sd-card { + border-radius: var(--doctr-radius); + box-shadow: var(--doctr-card-shadow); + transition: transform 0.15s ease, box-shadow 0.15s ease, border-color 0.15s ease; +} + +.sd-card.sd-card-hover:hover { + transform: translateY(-2px); + box-shadow: var(--doctr-card-shadow-hover); + border-color: var(--pst-color-primary); +} + +.sd-card .sd-card-title { + font-weight: 650; + font-size: 1.02rem; + margin-bottom: 0.35rem; +} + +.sd-card .sd-card-body p { + color: var(--pst-color-text-muted); + font-size: 0.93rem; + line-height: 1.55; +} + +.sd-card .sd-card-title .sd-octicon, +.sd-card .sd-card-title svg { + color: var(--pst-color-secondary); + margin-right: 0.35rem; +} + +.sd-tab-set > label { + font-weight: 600; + font-size: 0.9rem; +} + +.sd-tab-set > input:checked + label { + border-color: var(--pst-color-secondary); + color: var(--pst-color-heading); +} + +.sd-badge { + font-weight: 600; + letter-spacing: 0.01em; +} + +/* Step-by-step lists (".steps" class on ordered lists) */ +ol.steps { + counter-reset: step; + list-style: none; + padding-left: 0; +} + +ol.steps > li { + counter-increment: step; + position: relative; + padding-left: 2.6rem; + margin-bottom: 1rem; +} + +ol.steps > li::before { + content: counter(step); + position: absolute; + left: 0; + top: 0.05rem; + width: 1.75rem; + height: 1.75rem; + border-radius: 999px; + display: grid; + place-items: center; + font-size: 0.85rem; + font-weight: 700; + color: #fff; + background: var(--doctr-navy); +} + +html[data-theme="dark"] ol.steps > li::before { + background: var(--pst-color-primary-bg); + color: var(--pst-color-primary); +} + +/* -- API reference ------------------------------------------------------------ */ + +dl.py > dt { + font-family: var(--pst-font-family-monospace); + font-size: 0.88rem; + background: var(--pst-color-surface); + border: 1px solid var(--pst-color-border); + border-left: 3px solid var(--pst-color-primary); + border-radius: 6px; + padding: 0.5rem 0.75rem; +} + +dl.py.method > dt, +dl.py.attribute > dt, +dl.py.property > dt { + border-left-color: var(--pst-color-border); + background: transparent; +} + +dl.py > dd { + margin-left: 1.25rem; +} + +dl.field-list > dt { + font-weight: 600; +} + +/* -- Pipeline diagram ---------------------------------------------------------- */ + +.doctr-diagram { + margin: 1.5rem 0 2rem; + padding: 1.25rem; + border: 1px solid var(--pst-color-border); + border-radius: var(--doctr-radius); + background: var(--pst-color-surface); + overflow-x: auto; +} + +.doctr-diagram svg { + display: block; + width: 100%; + min-width: 640px; + height: auto; +} + +.doctr-diagram .box { + fill: var(--pst-color-background); + stroke: var(--pst-color-border); + stroke-width: 1.5; +} + +.doctr-diagram .box.core { + stroke: var(--pst-color-primary); +} + +.doctr-diagram .box.opt { + stroke-dasharray: 5 4; +} + +.doctr-diagram .box.out { + fill: var(--doctr-navy); + stroke: var(--doctr-navy); +} + +.doctr-diagram .title { + font: 600 14px var(--pst-font-family-base); + fill: var(--pst-color-heading); +} + +.doctr-diagram .sub { + font: 400 11.5px var(--pst-font-family-base); + fill: var(--pst-color-text-muted); +} + +.doctr-diagram .mono { + font: 500 11px var(--pst-font-family-monospace); + fill: var(--pst-color-primary); +} + +.doctr-diagram .out .title, +.doctr-diagram .title.on-dark { + fill: #ffffff; +} + +.doctr-diagram .sub.on-dark { + fill: #b8c7dc; +} + +.doctr-diagram .arrow { + stroke: var(--pst-color-text-muted); + stroke-width: 1.5; + fill: none; +} + +.doctr-diagram .arrow-head { + fill: var(--pst-color-text-muted); +} + +.doctr-diagram .legend { + font: 400 11px var(--pst-font-family-base); + fill: var(--pst-color-text-muted); +} + +/* -- Document tree (concepts page) ------------------------------------------------ */ + +.doctr-tree { + font-family: var(--pst-font-family-monospace); + font-size: 0.86rem; + line-height: 1.75; + padding: 1rem 1.25rem; + border: 1px solid var(--pst-color-border); + border-radius: var(--doctr-radius-sm); + background: var(--doctr-code-bg); + white-space: pre; + overflow-x: auto; + margin-bottom: 1.5rem; +} + +.doctr-tree .k { + color: var(--pst-color-primary); + font-weight: 600; +} + +.doctr-tree .c { + color: var(--pst-color-text-muted); +} + +/* ========================================================================== + Landing page + ========================================================================== */ + +/* Full-width landing page: hide the article chrome */ +body:has(.doctr-hero) .bd-main .bd-content .bd-article-container { + max-width: 100%; +} + +body:has(.doctr-hero) .bd-header-article, +body:has(.doctr-hero) .prev-next-area, +body:has(.doctr-hero) .bd-sidebar-secondary { + display: none !important; +} + +body:has(.doctr-hero) .bd-main .bd-content .bd-article-container .bd-article { + padding-top: 0; +} + +body:has(.doctr-hero) .bd-container__inner { + max-width: 1240px; +} + +body:has(.doctr-hero) .bd-article > section > h1:first-child { + /* The page title is rendered by the hero: keep it for screen readers only */ + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border: 0; +} + +.doctr-hero { + position: relative; + overflow: hidden; + margin: 1.25rem 0 3rem; + padding: 3.5rem 3rem 3.25rem; + border-radius: 20px; + color: #e8eef7; + background: + radial-gradient(900px 380px at 100% 0%, rgba(255, 0, 62, 0.28), transparent 60%), + radial-gradient(700px 400px at 0% 100%, rgba(11, 87, 208, 0.35), transparent 60%), + linear-gradient(135deg, #001e3f 0%, #04254d 55%, #0a2f5c 100%); +} + +/* Pixel grid echoing the docTR mark */ +.doctr-hero::before { + content: ""; + position: absolute; + inset: 0; + background-image: + linear-gradient(rgba(255, 255, 255, 0.05) 1px, transparent 1px), + linear-gradient(90deg, rgba(255, 255, 255, 0.05) 1px, transparent 1px); + background-size: 28px 28px; + mask-image: linear-gradient(120deg, transparent 20%, #000 70%); + -webkit-mask-image: linear-gradient(120deg, transparent 20%, #000 70%); + pointer-events: none; +} + +.doctr-hero__grid { + position: relative; + display: grid; + grid-template-columns: minmax(0, 1.05fr) minmax(0, 1fr); + gap: 2.5rem; + align-items: center; +} + +.doctr-hero__eyebrow { + display: inline-flex; + align-items: center; + gap: 0.5rem; + font-size: 0.8rem; + font-weight: 600; + letter-spacing: 0.06em; + text-transform: uppercase; + color: #ffd2dc; + background: rgba(255, 0, 62, 0.16); + border: 1px solid rgba(255, 92, 122, 0.35); + padding: 0.3rem 0.75rem; + border-radius: 999px; + margin-bottom: 1.1rem; +} + +.doctr-hero p.doctr-hero__title { + font-size: clamp(2.2rem, 4.2vw, 3.3rem); + line-height: 1.08; + font-weight: 800; + letter-spacing: -0.035em; + color: #ffffff; + margin: 0 0 1rem; +} + +.doctr-hero__title span { + background: linear-gradient(90deg, #ff4d6d, #ff8fa3); + -webkit-background-clip: text; + background-clip: text; + color: transparent; +} + +.doctr-hero p.doctr-hero__lead { + font-size: 1.12rem; + line-height: 1.65; + color: #c4d1e3; + max-width: 34rem; + margin-bottom: 1.6rem; +} + +.doctr-hero__actions { + display: flex; + flex-wrap: wrap; + gap: 0.75rem; + margin-bottom: 1.5rem; +} + +.doctr-btn { + display: inline-flex; + align-items: center; + gap: 0.5rem; + font-weight: 650; + font-size: 0.97rem; + padding: 0.7rem 1.2rem; + border-radius: 10px; + text-decoration: none !important; + transition: transform 0.15s ease, background-color 0.15s ease, border-color 0.15s ease; +} + +.doctr-btn:hover { + transform: translateY(-1px); +} + +.doctr-btn--primary { + color: #ffffff !important; + background: var(--doctr-red); + box-shadow: 0 8px 22px -8px rgba(255, 0, 62, 0.65); +} + +.doctr-btn--primary:hover { + background: #e60038; +} + +.doctr-btn--ghost { + color: #ffffff !important; + background: rgba(255, 255, 255, 0.06); + border: 1px solid rgba(255, 255, 255, 0.22); +} + +.doctr-btn--ghost:hover { + background: rgba(255, 255, 255, 0.12); + border-color: rgba(255, 255, 255, 0.4); +} + +.doctr-hero__install { + display: inline-flex; + align-items: center; + gap: 0.75rem; + font-family: var(--pst-font-family-monospace); + font-size: 0.9rem; + color: #e8eef7; + background: rgba(0, 0, 0, 0.28); + border: 1px solid rgba(255, 255, 255, 0.12); + border-radius: 10px; + padding: 0.55rem 0.6rem 0.55rem 0.9rem; +} + +.doctr-hero__install .prompt { + color: #ff8fa3; + user-select: none; +} + +.doctr-hero__install button { + font: inherit; + font-size: 0.78rem; + font-family: var(--pst-font-family-base); + font-weight: 600; + color: #c4d1e3; + background: rgba(255, 255, 255, 0.08); + border: 1px solid rgba(255, 255, 255, 0.14); + border-radius: 6px; + padding: 0.15rem 0.55rem; + cursor: pointer; +} + +.doctr-hero__install button:hover { + color: #ffffff; + background: rgba(255, 255, 255, 0.16); +} + +/* Code window in the hero */ +.doctr-window { + border-radius: 14px; + background: #0b1424; + border: 1px solid rgba(255, 255, 255, 0.1); + box-shadow: 0 30px 60px -20px rgba(0, 0, 0, 0.6); + overflow: hidden; +} + +.doctr-window__bar { + display: flex; + align-items: center; + gap: 0.4rem; + padding: 0.7rem 0.9rem; + border-bottom: 1px solid rgba(255, 255, 255, 0.07); +} + +.doctr-window__bar i { + width: 11px; + height: 11px; + border-radius: 50%; + background: #33415a; +} + +.doctr-window__bar i:first-child { + background: #ff5f57; +} + +.doctr-window__bar i:nth-child(2) { + background: #febc2e; +} + +.doctr-window__bar i:nth-child(3) { + background: #28c840; +} + +.doctr-window__bar span { + margin-left: 0.6rem; + font-family: var(--pst-font-family-monospace); + font-size: 0.76rem; + color: #7f8ea6; +} + +.doctr-window pre { + margin: 0; + padding: 1.1rem 1.25rem 1.3rem; + font-family: var(--pst-font-family-monospace); + font-size: 0.86rem; + line-height: 1.75; + color: #d6deeb; + background: transparent; + border: none; + white-space: pre; + overflow-x: auto; +} + +.doctr-window .tk-k { + color: #ff7a93; +} + +.doctr-window .tk-f { + color: #82aaff; +} + +.doctr-window .tk-s { + color: #a5e075; +} + +.doctr-window .tk-c { + color: #637392; + font-style: italic; +} + +.doctr-window .tk-n { + color: #f9c859; +} + +.doctr-window .tk-o { + color: #9fb0c8; +} + +.doctr-window__output { + border-top: 1px dashed rgba(255, 255, 255, 0.1); + padding: 0.85rem 1.25rem 1rem; + font-family: var(--pst-font-family-monospace); + font-size: 0.8rem; + line-height: 1.6; + color: #8fa3bf; + white-space: pre; + overflow-x: auto; +} + +.doctr-window__output b { + color: #e8eef7; + font-weight: 500; +} + +/* Stats strip */ +.doctr-stats { + position: relative; + display: flex; + flex-wrap: wrap; + gap: 2.25rem; + margin-top: 2.5rem; + padding-top: 1.6rem; + border-top: 1px solid rgba(255, 255, 255, 0.1); +} + +.doctr-stats div { + display: flex; + flex-direction: column; +} + +.doctr-stats strong { + font-size: 1.5rem; + font-weight: 750; + color: #ffffff; + letter-spacing: -0.02em; +} + +.doctr-stats span { + font-size: 0.85rem; + color: #9fb0c8; +} + +/* Landing sections */ +.doctr-section-title { + text-align: center; + margin: 3.5rem auto 0.4rem; + font-size: 1.9rem !important; + font-weight: 750; + letter-spacing: -0.03em; +} + +.doctr-section-lead { + text-align: center; + max-width: 42rem; + margin: 0 auto 2rem; + color: var(--pst-color-text-muted); + font-size: 1.05rem; +} + +body:has(.doctr-hero) .sd-card .sd-card-title { + font-size: 1.05rem; +} + +.doctr-cta { + margin: 3.5rem 0 1rem; + padding: 2rem 2.25rem; + border-radius: 16px; + border: 1px solid var(--pst-color-border); + background: + radial-gradient(500px 200px at 100% 0%, rgba(255, 0, 62, 0.08), transparent 70%), + var(--pst-color-surface); + display: flex; + flex-wrap: wrap; + gap: 1.5rem; + align-items: center; + justify-content: space-between; +} + +.doctr-cta h3 { + margin: 0 0 0.35rem !important; + font-size: 1.25rem !important; +} + +.doctr-cta > div { + flex: 1 1 28rem; +} + +.doctr-cta p { + margin: 0; + color: var(--pst-color-text-muted); +} + +.doctr-cta .doctr-btn--primary { + white-space: nowrap; +} + +@media (max-width: 960px) { + .doctr-hero { + padding: 2.25rem 1.5rem; + } + + .doctr-hero__grid { + grid-template-columns: minmax(0, 1fr); + } + + .doctr-stats { + gap: 1.5rem; + } +} + +/* -- Footer ------------------------------------------------------------------ */ + +.bd-footer { + border-top: 1px solid var(--pst-color-border); + font-size: 0.86rem; +} + +.bd-footer .footer-items__center { + text-align: center; +} + +.bd-footer p { + margin: 0; + color: var(--pst-color-text-muted); +} + +/* -- Vocabulary tables ------------------------------------------------------- */ + +.vocab-table td:nth-child(1), +.vocab-table td:nth-child(2) { + white-space: nowrap; + vertical-align: top; +} + +.vocab-table td:nth-child(3) { + width: 100%; +} + +.vocab-table summary { + cursor: pointer; + font-family: var(--pst-font-family-monospace); + font-size: 0.85rem; +} + +.vocab-table .vocab-base { + font-family: var(--pst-font-family-base); + color: var(--pst-color-text-muted); +} + +.vocab-table .vocab-chars { + margin-top: 0.5rem; + font-family: var(--pst-font-family-monospace); + font-size: 0.85rem; + word-break: break-all; + max-height: 14rem; + overflow-y: auto; + padding: 0.5rem 0.65rem; + border-radius: 6px; + background: var(--pst-color-surface); +} diff --git a/docs/source/_static/css/mindee.css b/docs/source/_static/css/mindee.css deleted file mode 100644 index 94954e57c5..0000000000 --- a/docs/source/_static/css/mindee.css +++ /dev/null @@ -1,52 +0,0 @@ -/* Version control */ - -.version-button { - color: white; - border: none; - padding: 5px; - font-size: 15px; - cursor: pointer; -} - -.version-button:hover, .version-button:focus { - background-color: #5eb2e6; -} - -.version-dropdown { - display: none; - min-width: 160px; - overflow: auto; - font-size: 15px; -} - -.version-dropdown a { - color: white; - padding: 3px 4px; - text-decoration: none; - display: block; -} - -.version-dropdown a:hover { - background-color: #5eb2e6; -} - -.version-show { - display: block; -} - -h1 { - font-family: "Helvetica Neue", Arial, sans-serif; - /* style fix for headline that it fits into one line */ - font-size: 240%; -} - -h1, h2, h3, h4, h5, .caption-text { - font-family: "Helvetica Neue", Arial, sans-serif; -} - -/* Github button */ - -.github-repo { - display: flex; - justify-content: center; -} diff --git a/docs/source/_static/fonts/LICENSE-Inter.txt b/docs/source/_static/fonts/LICENSE-Inter.txt new file mode 100644 index 0000000000..40589daa9d --- /dev/null +++ b/docs/source/_static/fonts/LICENSE-Inter.txt @@ -0,0 +1,93 @@ +Copyright 2016 The Inter Project Authors (https://github.com/rsms/inter) Inter-Italic[opsz,wght].ttf: Copyright 2016 The Inter Project Authors (https://github.com/rsms/inter) + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/docs/source/_static/fonts/LICENSE-JetBrainsMono.txt b/docs/source/_static/fonts/LICENSE-JetBrainsMono.txt new file mode 100644 index 0000000000..8f7ed67113 --- /dev/null +++ b/docs/source/_static/fonts/LICENSE-JetBrainsMono.txt @@ -0,0 +1,93 @@ +Copyright 2020 The JetBrains Mono Project Authors (https://github.com/JetBrains/JetBrainsMono) JetBrainsMono-Italic[wght].ttf: Copyright 2020 The JetBrains Mono Project Authors (https://github.com/JetBrains/JetBrainsMono) + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/docs/source/_static/fonts/inter-latin-ext-wght-normal.woff2 b/docs/source/_static/fonts/inter-latin-ext-wght-normal.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..479d010d2902fa3a5b48e84a973db1978b2e9949 GIT binary patch literal 85068 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 literal 0 HcmV?d00001 diff --git a/docs/source/_static/fonts/inter-latin-wght-normal.woff2 b/docs/source/_static/fonts/inter-latin-wght-normal.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..d15208de03cd1ad7c5199f0a0ce915fe841e4722 GIT binary patch literal 48256 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∾Na#*TBTU(!jF?9zmR-!C*+RdvGrd0&{`| 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 WDe3x{Jh1bgDcAe|Ep*;>2LJ$kxGXII literal 0 HcmV?d00001 diff --git a/docs/source/_static/fonts/jetbrains-mono-latin-wght-normal.woff2 b/docs/source/_static/fonts/jetbrains-mono-latin-wght-normal.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..cd5102a44c763f1cfe9f2b199fd5d7257491c0dd GIT binary patch literal 40404 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 diff --git a/docs/source/_static/images/demo.png b/docs/source/_static/images/demo.png new file mode 100644 index 0000000000000000000000000000000000000000..9095e3727a17698d937e3e5503c0a2ea75ebbafc GIT binary patch literal 177099 zcmbrmWmH^E(>5AHfCLQ?f^XJkf(b>M-iZ-l8uR@i@v?_Gmy27l`)fpp}n!OwS%dR<1u2p z(6eXno=JTDr0kl0xa6j#JpI^zI{R)+4%Nly##;QA$Ie!MDVpuYk`B0Ccch#1}z?uN~j~zJi_Zo<{TUEc0Ha zd$8CET{%RqWhMKRhJ=X6wvf41HK9`cFWF-?5LGoH|L^^uFIRq2s%js<{);xf<@Kch zb^nzN6*c^O$bV_z%O^iJ?0=CPEiEhczgxvZLhAc>3!6W(JCgs~KuCzdn>Pe;x9htn ziOS_V!TZw(@@?bdbw*Bs6RSjRp?)kJKQu0o1@8AkiRgzYSG;%G$}*Ye<3XwyVX;?aDvF!lyfr5l-U7tI2qFAcp@V6<+w+&+>e@{I zV%qK-{}=%P$f(tPg7O~H1{(5Bay`0eBnfvinWhBT_m&jOMFfPG&~tjQ9(-fZAbCX! z`>eRFF^F|FhhLF*Gj3VQ^5I{6@y1RTD7HB3@v&TK4k&;~%4lbyW!j{ z?Gvf45&GBv*9G=u^OF~H!I=7v#JY>ms(B;ZzqnMHj%mpDPbye{8xt+mq*l|TX}kM@YXV4?zA7^KSF85AM)a)C-Q|o<#WyrIKVff5 ziIQ@Uhd1U4QIHt}m^8XrptlOsCUO8DQef|)NZOpkIite(+jT**!mraB9OjUe%UaxT zRz;0HB! z13Du@G8j|2qK>bE?8gjx3O!$Etazo#B4lEYt+My4fejxPTJLb&V+MF!r}%}behG*` z$}-F{-LsUP%r2MgZ~8sKJ!WBZct4B+f7)+#wcq}KePqXX*Ls*Hq{k)f8u_Zh~cGq+PQqdk+=R z*R|ng+{w{)c)Ta`JD!dA@7BgoT*uj`j&8W_HRC7vy#6H+SMmkV4I>v%EP9J0+D&#s zX`hjOzy6N#L-iLm60QL+`wtcy7NPH>I7XE|b_NjoNE=OX6@DM9gC1#`Z`UX;!`{^x z&7ow>>c(f1$8_GFv7+E>I|l}8FW%@v!J|ub%f`&)Pb(5(yxtaOMRUS%t9b&xM}3nm zkFszdCxP1y>*@Z_=PU>C^9xgZAMWqYNO6d?%xwM1SIf}iO?he`?Q(U`?QVZ@qACk-`ghF^f#?S%LO**!0X#Pn?vnuV*Z)3jan9=jR^jP5=7sVIda-PE;;~51ASDW*L3npXQ zh#WEZq{Er=GHueJs6>B4so^fXlc-CHSM_z{zC-QcQWPQvP&MPM!W0C*r#-1Rh83Hs~{OEHV{|lDLj8KUiUXyMh za>2{cUgD)ewTfp)eLZJDo_0%u``JvnvZ)K*l=Fu|F25u#9i)>BcIx}|+aCJmMbKHE_mRzrB`=OODHazj0H_t-?mbOE&%Sm^YdR^PJYUit;0& zF)jJ#^6lO-&vC(>diQDmvH+1H+mPKC8G z9PdLEKAps%Z&+x5m~cJdRCZy0^+JwiXf2ka({Il)Z_aD-OKBBr0_fy$&pXKQuD?auzz{9lLC z0I9vC-iWCr=9?$EqPwy0YA-DW@;LCve9!8I*Bh+wV^{)P)1e22mu!H-gg$t&d=igk0s z#O=m*>ovZoL3bPv280ZSK3#=zpsK?Ip?F!#I00ipWPvQejStb*mWl>@6oy^SW}Kv71thYYLG9 zwYxr>WS5!KZ#F^2jdTDLgl1N` zq9%WWc6u%@pT^l{|L)65ZooB&+H~1qw+T-=P=ca8(Y*Dq6Er`Y(~e_eJ|dZm`5 z4#|IYd^CJrSxR7cMJGNUI&C_$O{HV%ngu!6Kk#v@fD(MVm{rAbxQ(rMsyu8CU_6jk zpdn${8T13QH#)S-=3a%U+_@d>B!>ks63g-*Kf}CW$hePU`70e*B_22g4i0hyFRIgd zhfCAnGl*uMoK?~79Bl=@!tsCZ1G^<>BaqZt-<;o^y?eNz@4)5qz{}QxKEKLY0J0fK zvoYzk1P6~!c^q*~GPtj<=|9JLZpdtcHj5+7OYBZvq+FI3oQ$KDL}%t%$aeD_TS4`t zZWJh~jbGduViP*FSqE&;RQ+PN9}hF?y$sMN+c^5}h>;mmEar{+hUxR5z1;X6++>O+ z_Vo+^_*l0`46cB;D0+FP_Jh6FC}N_m^+u@n8L^Y%e4I5GlJ=!0nIHR8(0s{3U*Zav zYnogY1hT9eyHqUlVWlZMI8KQtZ!Q?u6Tl``JjG%{0uhuVL_TPOXmcoii!!2V_tIo! zn}Izgl4!GxsyM1-xNZ%LAraf_r>4wg!UJ_%)$j^=D;+X{_$#8D{6@^&Jg{$IaSVvJ z4$j!m#bT&YYVCPrrb`4jY6pei=%#~5ifYk-P87ZI!V%YKIAml1otvvoq*P#{-XEDuSxhq zFYsdzJU?8rjFG~_9KS$4WOn%uc8nCQ5|B~|W{cK5Xg4IHnB=0w6 zWy!e&>5SnoEeu)w;oy-nTgW8roZiu;|A}bP{+o|as!X|crL^ufLWH1=u8>sG<5rpa zOKqWql;$`;Da@`Y2+S*gJv%?xmioTOB(M!LmOa zLF!`BlHCXRU)WqmJ*M~8Qjd2IcNf^K-)XWr84;uA+gTP59@I^~P>&E5K>uj)dvI(1 z{RlMuGHbW76=$1JdcN-&a&UFspGMy+pZx%9Q`_bK)Z&qcfQXK2f2Y+L=17z z=B`&n%)!DysQA4w6{?2;XM_B&kXK_1~E-r_Dr=^}Qi=2Q_ZgX(GBU{Y# zKNk5aPqL(b=dTxpp=MjKo`p42FN z2KgB@H{6pK@+|4q@6Y-aW`i5#AFIje2z!oeVA4F4n)ixVVnTnW0v}AqiKdv&sQSUw zdGjQ?*BFo|HxO9|SMsB z-=EW2XQvHNt#!1%S?K7_2EY8+re9VP3T03?+4s55SqQ&UZ5#KKdUJgI|}Z% zKv9T640y&o(++%uYiY>sOD6O*jMa8a5j=Dz9hM0N)soLhxL}lpS1s#*o2c!Exg9`L z0@RL2cdsDw!;lxQ^1o;Kdp9FQ&j>Jl2McV%)tt}ZJ07(B6_{{@5Gu=yH^^R9#8>(b z*9CT=;wnTJ)kKmoM<$!M0_kgDigy_4K_$VDg7QZ!SPL9B^0T^8rMViQpg$ zla&*FHN$iuv8{X<>{EyA@m3+g{nBXKK-VGQdGagXEWFZw2yP$D02?v-c8rLwGE*k& z%;YpQ!2RtUj5Le9v@6>_vqQvrL`z!SVBR$e=f&(<>&7vTTeLa`+;x9LM7qpcINI&v zn#)A?F8&eXv~1Gc>7J6X(e?wJ>hjaJo!(un#Zrrvt=naOEayk5Oa1L*UHr5A zAJ-84(Vs(0$;}OE-BA=KEj@s^NQmVvxRmI)>@GcVthm$58Eb)+lozU=Se^WRP`PF> zMOt7!M_9LZ*XK5e4K!Edil1~eefp1gr8uChceo$K)>8c*3NBai3_LBpkM*u2lAQP< z=cU@(9wFZGzpkMJ8`c$kX>fI!nADru`)VN-(XYc7gtMuf79;NPLGPEBNV(a$@^b-C zUbp1&c9@%&)%vQ=0J@IFH7Oj`BZm8k9h8GR)_K#ee_q5Me4M)C^|}{Q|4!&50lJ&qW0YC5J0Mrb-R%VA#U@}g{uYeu)*v5Ka#6ja_uK`i|N2ekvafGYm7K@#iy727=g@TF&R69HwnC@ z98RH~sU?;Jy9cXO)@2)sde>m%X#+`FFkgOdS!?U6h4@mpm!n@}P|_)O$-lxCh@6M-1GYN0FeUqoBNB4`K3iQNe>u0@~BEpLA&LuvhBsX^W3G>#~$wi4$Rd$8?%ttLAzsL zLK-uf+$;d*y&QbJ0|lX4b73IS!|KLm>xP7l2t0>9-Sb(?xu6uU#3g%tXex5yy=(){ z&`d(HdbP1|u;LQG2!nFA!p4r9Py+=VaDEs;(50M+W~{EnwKauHf4&`WE&} zL!noDblmBM2M zFa!L0miaE`%^Spqy_Hb8l_I(29xQo@iT*n)Q4&F1644)t& zSoY0oC3;DQ=X2x(l?S0)F-3Xwj#bSR)h!rrKJ%lBho9)!xobR* zleq%z-pyI|@@nNdZIVFidc<5iPuf47Wr($BD!ZV=f392><-tbrZt;KoD16E5p4iU* z8-*LS*5I(>t;7X~-r9;OB%1)wgUwLSKkwkIZdQIDY~v!l-+l|rGJ4OFNwk;*611!* zDoIjrGxte7_@Q;{#^puKwGsFbr(Uu3QXkt6$oT4NFCsZCeW5;L%P{D7lLB$m2*z3# zL}f#gR%*pcs+8-VfY$|4IHTdCk!9E9mar5Feph6b*SPYs&C0iI1Sy_$W1EeYpg}Yn zx!bS>B4XneMJDX3Eg?^5D7uY6G8n@DS=~PjIsTAaUe(EX1qp$e_4w#aj!NUeU_!7Q4S>)D+OE- zjrLW8QKDa{!I|s0-VA)8S!L?Z1LCWXIMvqpojoiz0;~-FvNkTE1So8qF>k%(Y^G3R za!#%1`Vw5b{#`kkQ)hlSL_&DsY9k>c{BDGc)}%KCoc3k+I4i;j!DL$<*=41yh!>g? zy}nGypT&uJlwqj((2wumbgB&FCa7e%x47H38Fpo9U<0?p>8fX;Yx37f!JpWk8E$@R zJD3mL!3Q0AdsZBY?9{b?z*6=2o6`|!m~cyA_EHTOSih&lBd%F5{f-8N`Dp)yuKmnI z*+P*9^=`Vj{_s}!T#6uITi=h#GH}v3oryCqt_ka%;0@nhNH!NaTeFtF z9_tTPrPwX4WQ1G4!)S?n{8-nNuodwXdxcVOoj7qD^oD?n+#QoyBe0!FK+;Q6s`arg zti}joqD}=W)3L72G+&kMn|Hd)&0kvuOB=ys@Kz)#ujm7U^|gz^P@%Rf^*i!N=C~F)EWOUFIM;Hk*LbMZS1x2LILba{+}%4Y z8@JxIR%LOn;HvY~)@XHq2+Xmu%a!Kx_QNvO&r2;`p)BEq&MnJ>qj^UHfUxJpo_TNYW@H~7XLB!@a5mAXdF`YDD7(TcX%&sx z&_sNhB~d3#uwCy<4;1#zAq9LknLO+2+%r~#@=#8)7FMQB(8PRKm(qvKsHFi&#Menl z+UksH#%nx&*3LioF#CWQunZ3U`3M+wH0CFNa-}Lc=q)?C0(t%2KvI-RiCFoNhMGbK zDcW1+*4cbcTjJp#SHM5AN%HEWdPaDiUl*QLu2hGuif_o0-{r&mDZbk zh%dF?{@pWZDW2fuRB9>Lwy$*~JNC}QUa^_lZUOM#;RF1QT6qLrww7yW%$8lKR;r<9V^@7X)-oR#N5CevThT(l8Y5=0a}R~?LP=BYc4 zeK4Oj6a36ozGd&g^Y{71IjZqb=IE#$ljH41N9U)<K6%jCWuTqhfuvT@kkS*KfsnUCipu_?_I0@EN@z=8^vc{ z60>}hp`w#9rVZ$O1_0MU!hmmJJ3dB%X8u-*Wda|VA~B=;7Pj?$M1&U|ML2gjY5KZI zcQ0J#lgmmE4zZ!|bt0tOzhBX+I+--9dYmL_&oZky_W?ZRVz@S?7RT$8M&SEo$&=Gy zuHPs7a~*K-GJ7Oo=$2E|q};!8Q=19T-f6+bM0`=UtRoPVLYt<%AFz>;!4p!Ch!4nJ zh8Dhtg)9!?SC1`oyiX+ni8;!J2rV?YQcFy5#^F- zyL8|!tM>lV;A-_q5j6Frb#B3D<%+@GFcaw9t3w&Q z&2VnKY>nBP+^eQ^DE0rLZw8pMJ8u|47vD zCA+?-DS*N=iFOd} z(K{wSxw%i5qJBj{FFthg;i(iQxPd&YF=_k-Ut5Mu5rC+S+-N9|9Qxd%pm2F}n8|~; z&H~Wv0^OY3HfvGn=JHzTb&sKnOEjXrWp&w9_l_DC(}Qpm0_^AkAn(3H!Tqy5|0>hmD--`*yA8^FrPO(CFt@$R+IKM|Qf}~#G2HXrS8j-}aY&4^nh_geR z_i?3ZcCj*fTq7+Z#g+c9eB1QM=l?@f@#6FHO*qNSh_z&IzmI0et<+e|YjJoVb@A`e zn7buWRu0zQ$#-dW`l4CJvNmcULEJKO{h)o(@roRAmwm%*{Rh# z{&Zu;fo-c#3Ic2bUnT?+TW{^w+asX~-}+wZdL)qD2eaE9*{fa@8>!XLbq60qTa#a9 zlG0TBtYBguYId%MUize_;tI>rR;QFtX!0{Mjaff(EJpn!1lT*`+=fq}2TBH>p(Zw< zVPmqr-uZ-cn*?Ww8K;2c=??(BO#4TkRc~lQjx~m`j@jia4@Gp;=KI>1B4NyI3ESl! zCKF614J+=9)oB{d6KHx2M;qs7t&uE6&R+^Sx?=7nQ9Zqdl;E1Z9)^rGMd;-qtE|fP zRfH$+Hr8Rc_}em368*`q7Qm4Qy@+Ka`PSD#hmx|j*DN-8LVH)?+RpQ> z1rOl#Ir`%&C}fP1sg_7Ni7&I&)uczLc_grb-s^g$UQjV1B6lr1gKIW4j5ED;P4(uQ z8YH2$(&(##UDsLF&;`n{nZV@UEY?@Rp7EZx`(j0@r`G^^4kOH05RY{ z`R%Y*xTM$w_2fwXKOR|QvZ}&^ESvw`~7za3REP$s(hB z&Wp^Lp3LJX!cDHfzzmsbP|W$T(yE`em5gV#8xKmEgiL=22V{gD9%ZBz#GYsHMtDp3 zN%-7JspTfFJR`!GGjM2YbYV7{hp%qlvaP>qFKlWAD_eik^l4ts1E#%IzP)?xq3GG_ zF(ty>VdbCd;=p2({z^^`SI_R+zAqOUOF;10KGPml??ZGX_m5E&0{9DP;SC`4??t6V zmrl8|+W7d(?~~MW)47?-fcNZYrd?$lb`Ni9@9t&aK&JyNTfqkXu8xX}H^eRw5V9+` z2c6q9j_>%N?t=lpM1+XA(OZuFay7$aP}Bvk^a?H;XMPedk;=R>rX7M+&&c2YMu-&a zIV&$@!82FR7OzV&khwn&!TT@`sh7rdq&hR33os`?t|mlBpZ)k`9c5<{aH;TK3(1F=O^~JbZ zuY_&ptz3@N%g%5}5uv(>1CTqa)JRBI>>ICSh6mb52%bcibCJXI;}IDpYclZ1MwBg` z7G3CLc1_Zs;Qm1O$3HNm!S~X@h(Sbg{r5D`D*ZAyeCZF-8-7_?+u?{9&`dlD(q-TE2iW8{U7HLW%S}C+4IZq$ zOY7<<&RYEVs|aS#Pk*o{^Iq=Vbd&UU{K1$yi|t*&y;e*?ek*M)$A%LIFE(c0itVgG z3klYO2YwHVqD-*KTGj~DWBf%V`Iho8na1@f_V+(gaoJr%7N0o5v&xs)M^B_lWwrk; z>P=eFYrW7AFVKv>vk^LPA<{Eqd(G(J+{|~7q9?dZ!ZklrmOqwJ zOmM(+LkfymsFq8`sQJk|n~CJMl%FBADESlHrZ0KGaMQ7mpYm=nm+gi z=w-{1YACxH%7r@hX_b>38QgLmTAXv#O1Z`Ld-~ztURIc?H9*f}gFI_2)L5hd+Q;P{ zzaReQ;$k=G{-Dd|BV`ICb6oxL^IH_-B{G;DK`T8@0KMlUb^;+RHkxef{Ei61j?9^c z$X(Nq^D%@dOB600hv{M5q&ght+E`$wgTv<{s^L@arJ8jqpVk zUISTgvkv)aF8`aVngbdV>B`F-ixKrp=B&|W$4EodA$(3eCf^0l6K_>0_X)Jm(L$&%ikf{+^<4=agliv&HM5#2p@thv*pp2t-1UK89rEX z?ZB zMxU<(V4NHYkRk1EIjJdZ9r18~UoL0fb@XZ8m9Lloe+EP={tD$v)*X!KKi~Fv=I${s zvjK8q5Rb?7#BpMb}^*WMs|i2_L-u3{9KZnz7>wDqR1KkWKmD+GQU5syG?8K z^u*GfdFUv}2%a<@_SpNh=ktMpG_QuLOd(D~x+KLzuyI)%@FveO`##(KC|WQeuRiPI zd3(^;#cK1duR#V|v?=bIcj{cwC`aH!VsSr~?WS{>>3v-^f`i;#8J#i5!V&|ULoh7H z|C!@u4E*o5QwP8J^63t-6&kw3M?NYNjMCImsr-rLDekDkm|zf=GFiQnV^%HX$?C%G zG2A*>(l`lh@g{A?d>k3XZO3t62Sq|xMhZl9*^O=?_n z{XHvBNG_tF>H=1dF5Lr(*Z%xASF$-rw)L-1N*f7Fp4H2p@9r8SMplgZUt0Ex%iGp& z>V^HFl-a+TgAz4*6Y@imWkyM|`26G&!6v|4>M7GpOme2>EF?cl6x7<)43o>9H5kNF zNXv%`dS3zp&g3H1LeAGB9{k;^L25)C`(uw84Z{9ASgMa6t57T9SCEZht}1GF73!{w z57N5n)~0l6tO}L-+KO1E&5v;5AQnuAmf;IPiCZ-ai}PN8g(Yb~BlymIlJd9EYSnRZ zIf<6VtA}~E7&2}5i6eg}GxTl58Ndh`TZSQBj)CeIp?$AQyf5?%I#JB0pcH^3-)&Vl zfPv{Lrpeo^opCMwbH1W!sTFqJi8SI8J?~-+eO{Lzy0PMjw%X`Uw|@pT>ryL16At8(0$Op#Go>P9RT>iRm*K@`kn1}4f!l$F7X8d*X zKks8@{*)^W60+3JO2^Q9!Yu7pkU63r45xMaZE~wOc$$6y6na@yt73Fq+{x@dNH4$9 zlvdvV9g8Dna_SLUdgQ~HJ8QvuJ&NzTu!5VE47jT@MJ6wNiJaVB2e<;zl51s9sJB^1 zp>TRQ=NvYHt&j&WW{NG-E}4S;S1N6!d`FcC>xZ2=eiOJwU(wu)_Y;n$vjj3*r5cOkm)_bgzBDDP*o3lhc*~FDr%C-p?I7>|PinUS3KWO7=3^ zbV~~jqmNmu(Foyw<2%V&ac`5gJKki^GB8gf({j7Q(@;C#uyf$}!TJLSQ= z9Y%6({&J~Ja;G6ktO!uSBBK~pp0L*?R;o5mHQmI;jm2cB9Az9XSy&e3wA<@2Z(LF7 zs(HhiE*EuCw-a-9uGm*{&_jWuPJpeyV;8S{D*lz$XEnWpKtSOBm~blK7s+~(^40@? zThQtK?3^X+3`W66!IzN>!nIa$wUB2eUe*8sY%MEvs2#_@-Y`pg%!)l~eF0zns3cWODA^$^y~dKqB#ZkWoF z-vQYMBujMr6p!cS{ULm;2JE51QwpdaW7_lwW6r+_Sl5=E@X%`xxMZI6ABWCNdVjYP zHC`N93->a?{y@+7GQv2RYh<%}WDmMu0{W)uc7ut!?Nf9_`V{MYizPI$?ilINT}txh z21)7NmiKbqK@nla>q-Yg-DByUkKapz#OM}UxDAn=b5iA;Q7>KPo0`ZE`K+p^Ybsc# z@u}}_+XZR~+wY}xMh=fPXzJVlf=xC(QzaF?eyyTn5WVA*)f>$wGD9&&t<_uXnR(+< zk*?(4e{pz2I7#{OD%oo}9+cvl$Xl(A+rIL2X4LojU;h%*D>%Av{etj~+PjbVp{O9FWZVz` z{+Lk({N%9BbK;t@V|${Vc`?}C%G>DqWhaQfAqtg zQa6wbW<_+p!zMi>!XG3{AHfALjeRVkN;-8O zNu}d-j@|uFDLRwtLO)1V*a;X|@ruE|jbT6t?}-qyy37=bK;n^K3cBf{Twv#{j=M{OIX7^FEbURb_ zN>YENE)sKEjXrgj@tFB6rK~4)JlP2zLl6>(Hrd8Chl>TAK5Qx0DN%pcA`BuzOjFq! z(>#3Kuf-iUmq9By=XUEA1^Dq>eD zf*kT{%rGPt72Tdq9rlGYf$fZ-=85HyA-VT!>0zPW&l}v|X6xy_Fr6wSrK+1N zi!!XxFRaNeaHboch3?Ga z(k(1@qaA-1p;f8G#7N`LS8-}D87vslOt`{lDOk?2NolplM~M={wXkbR)J}BEp)Z%# zlqz1~s_;I=vP9<{tgHxd*N6}$yEx4URz4d-5gbPAl!NHDC(WFU&t-5;W^1sWeFZ3t~Q3FOHV7!=U@QfjQ-6wvs3Ap{GI+dr2Q3T>fCi@z@Z89 zFFba4=sN~XK(_TGrPq%gXUbL&&zJle3L13?I;Q7<;mgaeuFn&i%2ErerFXkQ|G}~FrmaaHw$DKDak1T8U7L0W_v!yEG>@Yh z{8=V>RiMWwpXxXjB?1g)zgQ5c86!87W``ytq3bGbZ|ia|POe~C5i--p(<{-;i7^M$?` zZ=!(&Z~Z{`9f3jnXDxHJOX%8_GA!UL9$I#MTrtf*-Qb!=u>Gf-4gk5E(%mkOPbiXh zszbIY=dYVvg#pM?fve>d;aC<=SELu{a3-ht?Hz~6u~^1GD2pn>QZ{Oe*wC3LBk{>f z9CY`q734oTDochW$@GtE99LP3f}Tsu{`%|Chlpe5{1N#-WdHojr&PK0p^BgfmzvMO zmZE1{O)^Gd-wgipb@p26DI_aSKlHcR!z1%KGA^s-?lG@mUQ%okWn~Vvr**>-j^b|G zSljcf&tiG#l~e%yMEG>^OKAciRm}9y=(hf-Ckc^1uFZca1|_aQ@y-9-J$=RmcL}0} z6P5&D*BE1&=-66+);Piim`=N4w)0;zKAdEfd zd#OqXf4ljg3$IwJADjOLL0r~x2g;8+zfu6MPEKE5_f?C5%X(CV#rH!F|5m9R`T0`T zQj}J?+1Q|xvcx|E@;_vRSf;Lx0IHh1+x)b~r&9Iv|EQ^oU0PIm0={_)L6?O;Ev2gQ z+OnpKOIg#mUb5w;Uh~mtT`yEb+n7>Aq4hYWsc%TS+ zkvB#Jz=e0e5lU^0IN=%4rceISy_}txgpibM$Vhlf=MW{T&-D}|jXVa_S*V;X%Y6BF zv6y&b^8sg{R!**+haLI~b8`31<3Wi2z8K~#UYG`7dT0Br-t~ml-Ff%pY2tyRy9{54 zQwOIfjpkWf*9eBi9QSs7)C67WLT>?#%63@DWj7MDQ!+(63J;8qsZ>N*?&Lf6# zmFQ1i<-X+Vv)i&JmiQ}`|G88xYNPa7yC>y~8a&%Cko&Tr*4A^Am7|!@G;qne7QeTU zSw*JDiTCa&h*^7WZJ153@5B|kY+qy?%=@a6A)P><@*)wpaZFmaoPVdhq8%d z%Aumt$gFeBi-AZ3hO7mxN#o+1aMLuaCp0y75_#{Wpj+DXrflY%DTQHYuX}iJ);;;b zXT#2ycKA8ju3g?cx%L}-`c3{yQV{s=@EvSYPvaq4pf_heIjT#o6V`|jE^teQs|$}5 ze)Ncs1-F8Cg;WNQr-=SXHvfDM+$WmojhLTwK<;fWb=ojDB^J%8>2KJN@B|g#NE7k` za6P8K$q}-=qv)+{IT?0ISlNh`A{w#Nf}M2rBVtC8jX2gv0o$^P-28rzv;1bU6V^R` zQ`7FQLPI=gHEfC%ey-SH|_8E%rLnAbwO^=aaWc+a6 z_4gW)VTwYXh}RkOZBWEcIpPWUskG+)RP^C_*EUwc@mZV}LJ9Q;(cD+uJJcor$J)IW zcZpzINeTkA^w73bYxA8^yDyX*T5{%8^+!CB>A({(A{OP!LR>QofZ4u2|W|EMFF$=8fg<5#^ z2(3qnV?dXBeE}M$`yA;}uw#SWYK)&(>*A3&i4D1&eW6pBt6AeLXJc}wcldJ=a?LyX zcIAm2roX>MPEx$uKY0W9i^WJ)FgdVY;5Pj%-)u+XQ}&d3P^kNN?WVXar~&7;{6f~n z86yiEhWMyI5Gxe#Vp95K8Alg-WJ2)&CTjoc*ccL;rEs=?saxzAl)yhx%Ky@td_(b{ zLxJq;U*q~eJ8-iz@Be)6|E|RJ=}`J#iV6Pq|L*z!v(B}Xa|uh^L4ODu8Wx7&-)Y;v zPe~C=r&^qF?aHwIXl=XEH(F8_`Cp+lQZh3MZ*1CL$L9XfXx~UnOHDDK+Nt+WjTxWJ z4zRwT%1~VVucFa;<);%v>Buo|@Q+s^*!*7|M9E}^+-JWvab`#n3)`Ki`tN+1jlZn= zZ-@U>(*FM)=Kp0muTh3>A&yoxKsQM9cq1uwe!g5tM0hT#hRVR1Wr&*)3?>xpI%~VG zzfSMID){Eo`LIaFkpg8X5rgOH%Pf?(JF^sDd~B>S;TipNeqtyUfpNJh-gV8`|CBn@4z?HCKb>=v;*7Fg1TQbX9nxAdt@k^`SYbDb<8u-e=SO> zDqe1);4^9e$x=3mHu?wRSBD#EbU9U8N!4HtOs{iBzYR<(8`i8Xz3bc;*SC4Caey`& zw5780G8>{#xu^+r0u*c(%y(~oFpCteWy$*X6Af*yzT-P?Iy%4E=Fx9Ik#bbXEIW|1 z6F$Cmj{qGBIZ^}q#a!~-_uN~qH%Lw1>S&104%x7>l-460rFpBm=aC;lY&hl460QGdg5A6Aghwy8ibU3dZO&*#?WOu>DH@)Y&J?}( zXN%(s2F_MHI|eEQsng&Fk4sN`S^oU(ilwI%On{UE-|`+naGFFNM)_HUk(k zYNH+=+_-FNt-r!iIg6%#^834pP-0-N$*9lCGe`P)@73XZnhPx7H8_wyun9DRx zKb7Yw&#$9t36b08^rBlf5=e8A&R4U2y+!{5n?p}x!75&Hy>{IClsT~tl1QI`a|`*T ztG#&2gt)++>#k=!Bsd+2Ef#)_4=c1acnr#TNwd5X+%SJ{rYg9Wy5GjmX!eLpE+|#B zodr9%@Rxr1tIP0<3tx$1)9lxv1;b~(Y2l#Zg71zNK!6!34=fcS-jqGm$)c}d5@hnQ zz`?nfS~ge0k2n)(chA*dhdJr{_d|H!`97eweqrK|tkcK4Taa$ICr$!bOP%IN z?ivLe%Vdxl*9Ic(rph>@AD8waJr5SbF8F9Sj@f^v!TcO~^2@~FfYeewSHHOFEb1sq z)w?^s$HV00lY6{xKe_etwKbROyuUiwUb6m~O;0^0`g+n{$0Uk)x^1Zk&C2l}k2>{> z)cDfn5YWm^!j0cKosnxPHcyKp)+&knFgX8deQ{cVo3V&sW;*`&Vn?)1US!k2e zu6Ia5!p{63HPa~eH@xC8F!DW`^=Z2-d$*<~%X{@}Elw9SGSKNmBvD%T+{~XJz)-LAje1jrH z0ztj9gqWb`YaGH|Qw5DsAK9i!x}j=Tr?f=zC{0*WrL#Uu%R{>8mD^e)R?E{H(Cb{iQRsVE$4?s>Y)KZ15-?=a_~jLOw}oM5i@;>qCn~ z23IUNYFiLHDlDWh+>DXf$K{>rg;3Y!=w>O*;r}7-E8F5)vTz{;2p)oa65QP_SP1U! z!QI^nt_g0926t=REx0?4L*vl6bNkH9xzC)rKj41pr=_}f)!NI~TWcd}tMsuFC=WP& zx~Dv~(I2vBI%Bn4W?AN?MV?E#=|g?7U$n#a-K(X)dKaeQ+jE5RvH>=J2#9^jEOk3^ z?})MebKW17Hr0muXwEQ%7T<)b-Id98Lt{YH^T2q-%emU=;1|hDEv-(obQh>`dT|`aY9piLCFJ-`gQiZNSZgEukdlxf@L#Q;ZDLGTZm?$~L!>^3`Lz@05!|v$=^BdO;Hu_B( zlVfAqA9%>4kwp?TJFKX-tuhU7uE=$rD}OD}D-eu??9~1~c?FDiIKLBWPU6ijUkwCgJyUv2$ zTyRkI_JhEufCYtPL-W#(QFeLuvI)bE_Vq-Ckn{twn$(wCW=wX+ey{U!Hhk_LN-b2AlZD`8oF!t5^=0(Wz7 zM=g1c5yR%x+rHZrbK5eEP}x!DpCJc%FU&HQaRbhd`VEcCV5TFYq%qEu(1G0#`!MDZrjZJC_slr1En8SgNn4CzZIe z3)kU_2r>1l^Iw8_{-ICSLExOlw|-3VT~?6raHh?4voD;r*TT38=5S_tCO8B#^rfLE zLYrSn1R&qyj<{9|F3GN<1~jFbBu2tKFg~FAJAbhjt?QTM{gn)#2xp5-MD-j;4@z;c z3GVP|PtsH8a=#-{cKGR#cSP?5b94KNZv;Hig}a50Ay zT)8f%nozYkH!sr&=)`Ck<;+yIgeEoRcSJMOkL+E)Ki1>6@HN_uyLUbhCAl#2&{n&+ ziRLORmDrK{SQ8R4)uuY6;#E_H5Og+~SW#Vsg5ItGVK}3bf_nj}|?eMfet`$Ig#T7@Fw+BN3vB=m)G& z@z^?08g!!SU~si=!FiA-AnBFp-K^dE9Kl&KCfR<3i<}2iF1--aT!BRTVk#9E18ihU zdb|TeG1Mx~EtdjH_X48rWbPVwWy?h@I$pYZ4IHhB7V&@;=l`^zQRFeGkTz8#?IkSY-$IP^Ra9X(B zn3w#vZmRhTk)ORDcgv{h&8_%{?evF?}nl>}>li?FRA(=*L{GP)azB|3>&B zWS2$sPNL##MRk9-vcdc^H20ICOn#e5lhgDsrd^S&(?8q8(6wa#fcyLtp&fM`qXD^K zfT3|b@sYcxca!nqQ47ZEC6a$E_JE#e?}7@@jxA9Hh>Of8LU(AE!tmlFc$-*JQ9WOn zkXrbfNjMU6ReI-5kWC{)Qu~8sDQ5o__@kTEBu~|{MKnsjepHTvM9oW!Zb?h<>&s|0i%O1Csf&n~E3$XW*5aTXx|d4cM}{HSY=fF>-8?tZ1)<&K ze6D0Uo$czgMcOJknEFzeX*BO7N=gTapY6lV6&p{OOlxLzJth1I+Lw%RN;Nd?M{KX8 zf2rfYUT8R{jb-0`>YKsB8xXf#tpQ~oc;_w+{gb;Vx=;8-rdgi>k@+D z=raZsZ&i^TbeJ1RK(GtBMf_qV0A?q#+%Wr<;is8NI5Ge5f+JNUZbf_<>dx>j%}s5=(=~Rb*p!$bWxs>=Zg_T_?~4x=WrCUQ4_CWtc{u=v?**x}H5O8ocetec zLf$22(LiH^2u9Iwk8yMLf~4&3j`;7*#U;`@zV~JM#!Z$NZMiq(ZAEFV+frX4MPS{DTyMAl43u$u-F+04+ znV`(zi)Q^(#wQf$VSd}jdv*oxv$m6f;-~g9X_P#F4>%7k3Mp?lCu$`Xh6Wb@e#>Mf z;B>_B`HI+-Ipi{Moodz!jk(!Fkw1rd>Ise#YBsxa%-=Ky`%P2VKh&=Eo1a3Y#KlH6(Yoe;#MG3?q0ASL&IC{mRxgR(Z#N zTZTWElAsAKI85Yyu5=}uG@GVFsCQu1W)cT%m;XRCb{cPu*S&?u)|sHRq^^$$J{Wly zFzcKt<%g8ra{pru-a83r_;rScn%vdKrSlM5`Iu;`A)HF{FN6Ot4nzBZPcO$GrnF7u zolN!;U#Q@mp`0|HZGdL9KVVU*de*xJAak^r_4ZobpLoG($#tB~2-|#aXScrf(f8QT z{(wv{6;4%{Fy%LshkeNu?6FpokJV(d9Vpptgwa4N-cJv)O1b^XFC-93QPnuaovLSr ziZ{(*skxwOU)Yl)~;vi~iQVRb)+KThclUc5nJR@n<}IUfKOi`pmh9qRr( zbCmNs@6(eALV}KOH-@Beu2j_LtSvf~KP-+ty|n(56apOS8Tw>Lq1ZFv+)$$pN;SM4 zt9>=`>fS{z#}?xeyxDO6K}tk!pR3&})zT&n`tULO7G=G^pwClK1o$-e`yn@1i|d;Z&AseAVOc*KV!Nf(Mu z+$CRXTP75a5DLdzLqE*z@9- z-^y(9+Yg`&yeT;47&mrOukB0F^)2tv@YlfI0=MQiC z0Nb@Oh`j)8$_aycUSN60KpFdd&G1B8?Txx;I}+^d!D@|15~dFLvIC%&>pYx#7w%!# z!a2c@DD4CSs|0y5N%7|z43ZZSt1UF=I^+TBj6@HD$)X0^TFmVxDxjmML4;u8zmyoV zUgy_gv@f<&Kf1og?LX7}Z9<=XsgS!CJEz}sKl%!^`#8UP&f3WK#*$qw&0BybMYon( zfnoNI!Z~xbuEe^NSQw)<6)OP?0)Pu)7|bn$-^FefzhA`Q#3_ZlwEjm;2{WWN1k zrHjf9vIYy@#YIuf_o2OJ<^;K_(OJ$krIn0 zsH(c*3cVl@J2M&7*Z{n$hUw~C7IFq`p}fY-~m4WS(fKgjcj=gWy0G*DV+`d($v^s z)hDd(+4A?RL4I35Nx8%2Mc)bt9VN%>*78Y!>dPBr(eO@Mz$KFOv7jDGBef-x?kvxi zO>#UpwOS&rehL?4DLFq_05vA%PRW~@24wpdWTfuFS6KfCC9?Cd=?N0u~E- zAB>!-s|9u#rZ&SgSxsQDX4Z|?-udhOR9qh!Yt*0m1oVm_+NgD>Ot_WABJm3+3-cL5 zNFqSy*O5)Q65;lJz9&G>Cd88}?}@PDUGRntIh_AS7_vtpE}^UY!3}6;ayU{-aj!zp znJP)LweVA=89Wx!RNrT1aE^9_lfW6y|pC5l+e4e8 z4X5}QFUD?HgUS4(W|NcPO5zIC<+_KqQ;!fdXa7wPRn#JG1@nz96hpHJnI#txXHKWQ zK%4I6f)s6vN-iIlx*b6n!TJq}j}VBCc@pVA2Hc}G%gYe;h;SCo;)~cT0tb>u#`rdF zjiolsvf7L$vHcEg?|QEMw$HiS)-t2vLg9pka!U!yr(h4_WzC*^Qf2N&^B`DyYO58h z+Lkkor})yjF&vlmAFmn9ShtKbNQZ=d)GMb`Hm6Q6DVHC$01?V+$-}Nk;B4>VpK>Zx zj8Can)O(Yy*6(|{*LEA4M^e=^7KHy4RPra?%J*11(P(|q;?}TQU6hJbfSzRfviYrO ziGAO?B?{8+J@a@3H))QUfiU~_Ba=X2E9cP;S}zzB^K0zvLT3G!kMS|L9CWs_8ZcT4QbH>VlPWBo}kcl^5IAj>yqZm~_envx03K`}xfnU3}%2e0LPF68k#1g_uL z)9S{mZznOoGYL&fV8q~x*?Z33a)~0=W_MQdZ|lWltIlT1wRb<5+vvpvW-tTUp z$ypcZI7ad^#ln1lSZYSU=G4-2W*j!%phMQ;b|hvv=w7^H!Xr#={fRSF<^Vn{zrKI` zK&WT{0n)Ff=ewJU#mG1Iy(+#3n(~Tdj>BdeEQ6GS(}nf&N5&kO6wM>4j5Rq6NlQcW z_a|Aye~oNA;I~KXkz0LNQeFPqgpoFu_q9=ryA}h0Fm7VqeEMX+>!H2-R{Kf}XP(B& zPq3>Eq`BwHvUwhU>O%YgXRaM%Y`4(Tl&v*N#4hI2jb?mpZjeN0I>Aym$Z&&?^bxOA zhum_1kHUq$>1M3DuCCt(?6Lg(UTy1X39)`}jz8?4iiYO4?O+jzBP2M#|K=1~vV}Qw zM6xg}ZMv1{uSMkN;nXcmjAXQq|LpmtZHKFyzD$y>(0J$-m%P!!oH&|)m=@oF#k zy?&bsqv*lnF`NsBcHpQ)+VsXa9*)WJw6_0M?DK-lr$D2y=`Sy}U0KQL!PEk=MU z#D?RE%|MxZ79T!#_x^2;%lAYpsSd7}x*fX2qX!gdg-oPx-^PHCD)l}6S*LeBes-@==ob!g&)00Mn zBble+aB#K?3Txlt)p(k{X=~q0pUNEI0(6~F2CC+S^A6a(bVo{|+5Vz;u=kj3yzvv#^GVc{kT~qPrF9KN|rzO!)zrw#@BmAQ1Zj5}f$r>i0rLl1>c1J|)ls2yFqJj3^sa@r$%}1ZLk`*_wZRIOe^dto`7MQ7 zW*vCbC-5-(uGehCWxm{Cpluw7hux7Sn{3RpKu7MbFEE-%Elp&EyUzdBY(B;^dM=rF zG=gi5h|zBRTPP`K!Ax|4jjnLY#3~b;{~vt6VeaD*U*#YSB`S+gk8!7_;6e0YIs75j z9~=qlv4sonDJ7HUpQBQI$My-$@BFSQYe`wfl%yJ2JDsCnD>i*@=HO-s;Y0M!py|dN zx3SZJCn|}r&YMu!TUE0y5lLa zl6TU3#AV_sO517cOK9JyO^&~W5_1&HT&W!|vc$zzyzC@&sKj(WGY5N|_DN9uJTx_7 zVuPGvkw}f^?@7|5IZED9ibi||$Xk^n7br_;E2HKL> zvg)WL0$vHzahgzn8nQa2w|7)25iOA==RL&sc9(QmX@`aVa18r9^Z&*ew`oEdpmbw1 zyMbP!gVn&*wJ*18M1#|?a~JA$C%u_-&yefsPBeY{&*ZTU#K*aI7=mnR^fcVJ!TFA|H>C*6?B$w%u#Z#LT2nIF2Cv-33c|ojnysH?#uTJWd^9?xr8~F_o=jX0J*V*+^I}2@1 zxX(kxT=1y8aqyFe*J2J&Z&DAy_+=$z4_}Q;5!|DA(7!aBB9)y1ze9o)uEbcHA-j1x zx*q08b@}`(Duv-;0p$?P>g zs9-f5%MEaruq8h|1I_of`oYD$4p)g|v@oG){;`9r(zadWY=50szNRr@xo@?&WY1z> z8k#*{?sYN+OH7k`rs_&Ib`1sW<0Rz7|7bBiD17Q-i5qu4Z)okWOpw|z6?mUyWNUgp zxk8M`Y(9J@wN0fc;{B@^Q_I6=nP&ZoX#S;Y+t(b21RqhJ>LQx9%tcO7JD!d{8D~mGe%6hj zJ`58`iwN|r1>VXwQVAn<)|lGX0&ja#?^66na<+s|3E&52EoKR2%WcR=s{crDoNrM+ zH8BUtSklb~XuD!8gUbyiy84=ZSY6(pJx=tGqSo44&G;;%3NcyfCuI1aZ@1ytV8l?X zm3)msXpsKV3Te2c&7XRe^o&9sEz$4E_uaB}YLwfg+RJ`8TK*dgpo#7ExJHap5qTut zRZ<)?#=;)9B8{U+7zk}En?`6wj32gs2H!DlL6d+b;A2AvO%ov*0E@;`?mLy%nWNNN za3k>xm7x)GQ%wS_5I@Q;c(d%@n-ckN{r|6EaI62?=8f^Pc+XZtQ~UM4QC;31D&@W+ zXGbPW3T>8~X3l0`u)L=u>xTZ7(GA@)1oVP&&dNSGycYS{9CwPU+G*n(uIjt*19?)j zwe0zAeDU`nA@K3`&U(vduCDf?cDYkvERRDdgKIbQtO;#-v5l=wJ~1JOmB-TZq125{ zFy(x**{bz5FXF%*-oyN8>7RFctmV}}uKa=BQ}YxMp&T2v}GoLL!WsmeD zitzOP7o}h6cJswzw+`n^5P zrRJ>@I}M(1W~Y&j2|;AHWE7AXTvf`L%Ok(tdcxYR?@f7EMbc7y>a_X=2F&*JW28M{ z%SKn%HGBGZq+Isxu&VU!wx~c7o~BPah3K0J+UZy8@xb8?fT&*oA~DV+VD zMa=-E-H8Bp%UkhoR{Ayk)i^@X;Dx_>?_GT}-mV&W5oiG`tcpLBOBvXN+hEz?7VUFs zj(`{=!di=Hzqm#X>Eko=bx(UJTVO9cCGRcxJNNN#q4p3FxbD)tFY~_pY=HrzJ?hbH z=9})<9_bjUA9o50;k_Oh-z;-fA(+|Xw9`@TI{_FmWGyCHi|tL`@MBcUo`YjxZ5>WK zVj*JlyX#ML-Q`-WF#f&hV#pW>6ZeVq+l4dZ_Qa;PrON()7Dh=k<+Ibo2()f_Iy{^6ce?{TyYa)W^oXirR$xJQcQsM|Jka5+Q@~^swD4 z_))^@@RdEFs^wyqpCS<{tCaw44ED{PK#p1(*;B_rtQuhUpn_ z`R1d)-dbO=-K8hbD~rs!2UWg=5Y{Jh!l^zNwq<*5fur(w5ZMy8YzwYV-Pgz)h5u&o zK4b3(Fas_1T3rLI>ss}OI67&9JF8@8m zSU(e~=^taEWhE3jXqxMvQ*4EN3}pT1r0*c2Kf6-@F&i{}@adc3|8w>C6fA#(3I3i| z|J?_CtiM0}=laZVk)r=jU;J&;@p{;iqD`M_epz-7IGs6ix4A_(M`1V~SehIP%Sl}& zH^^qUXYQKUDQ2$?)L$zV!zjP(_{)fX^BCZTLKgme!5+)9+4|G&JWW0*-08Ok8Lgk! zxz*R~-)mk&;azs|N$r-eH*lHPWUqWRX{PQOtWRT+U)9x}uj78$pvY02RN~T8Gi$%) z%GVFcJUer8oFH`rv9$ZI&}*o?KtrED;RfbD)`)6Bo~v@}3CVxEOqW z9oQK|T5LQR59{FaY#nVGPCj#guYE7qaj2f)w7NNYYt5UO)fgEOf>t@EGt;~9Vu|bL zcdN`pq7mrU>#aD5{m15;p{aFw))rGjkVY-TvE8Y8MG1V8Z~AnD948$v1Kv!nrdnwa zQAPSidR>TJ+Mz%h9x0W)_0Qs-H&u4e$N+`7x{2px*yw$&uvK=dU3?Uv@D4}>w&_g{ z)%7TA&};a%bSOfFsl=+Ueo=3RS`>3tFx==1Z@TRBAYwA<)%|bExflRqGET{hnRUyZ zYTxXBO}b)-E-zI8)Y-@EeB`V>&UMkt@uab5h*Bx`M?ung$(R85kFOZU0a#&k@d|7)XT_mv-8 z=QH8(2{#|heB71&sQmmOE%j)vVar5DF|8CPv(J%h*te`4xiPS9iQ*4pS* zr=H#2k4S@ej=e@N4&K>R3d#ryG%M#nOikMuvu{Y{YOc;k_tkG&;?gvhYA)P?1`dT) z?txB29Wsaa#^tZB-04Cj&La{!10m@7YyFLV=9Z3+3}W|0MmC)r@&;!q(S;7+KBnZ* zPVuN%y}M57U8VJA(fwFB2GAo{cD<9&75w&c=G1n^(M$FPH43-co}b#jK$BZE85c3t zY&&^OB(M5OgYnb(ky_?T+n8Zo3T?J)7>eXgo!v8>(7p~?nB;DWjVoVViM%C`!f6*E$5?NvsJ4?WaD=ssGiov_C(qd@e&C~u!4hH9h#j92mZS{Pyk>Nfv zRB|RgDKmHlzK->9E8P9i=M}$ft{-m<2NlYBt9D>JSt#cd?0%#xfegv0m|XW4yJ0c- zRl3p-(MrE}-XKUVDNdm%J{&_WjQhj)-f7uM%$CsX-P%BU0$5Rt@A(+cYXy zfJ=w}^}06VWmhs*dmg-dl=4l@`cLVG++){6i!pV^3OKI%-tco{ZLW=}!g9TJaFMBe zv&n^3jBISS>eh5S-kHW!k?$iznLm$w+XJk|9Y)^ZAC&aUd&c?|UXL!+%(hwv)tfN;9`uYUDZh?RjwcpQ`MxNFafC0D1VK3^j{{ zAF>&yXJJm-uh3e#z0{0FhJGNjAyZ?6(W+)av~VLxux~6E5(>D_`=W^I(mpLfmooO8 z38?(sI~^HW7{K)d+mx5s29@+oqd36!hD7g40-U+{1jF(EOtmM3=oHIOPYV((VA`*aB2VPv*A>utQH-y3)z3 zY}6R0_2WwnQJB#8;cLSa1gR|5TodzBUVdbc*%`K<1SgQbRcHP7XiDaVVHcVaLLblBTN~r2rfG&;b3nDI zMrY86T*#wQ(gh;orqNwd__HVk@U`4_i2-~n!5;R~{(z*K=T`8>)!1lkq#sS|F7=dJ z?-On78+n|l{fktw4Ed)qrzSO8kMC(JxuUdTMW`c3WdEzCvM+R9o>=N!=O<1~V>4Pw zBFmC4gfu+UqRSeG3bzu>x!AKnVag7cP+V6w1Am4$^c*_9ibKCmZC!(j@Sj2k_>TGj z#Kzhos;WuS#f9AVM^C>cU;L4s$hNt4%o!Q@nKsF*fdbj_r5||=rxkDzHbPyRAGSEu z&rfoNsyEkpTZd7)zv*x$^h8gdq0LVW!vR$oYN9<6`^|B+`Y)jDHWeNDZDB{HV9YD{04!UXY?L3?hfqFx`qSToeC9s0&^Mn zMx75VgGVl(yBwSwLR$+F%$M5n=Y3nVQxVT6^9TXLo-*8$D_G5vS1qrsm|u*7hGcMx z*Gf5Gk^@T5Ypmqxr|bPS(pQR`Q%pT7>F%BT`TS)3V31|3Zcq9j<@?_*L|%noNPDE4 z{=;C13J^_z@=rtw=-?vbZ=~6%*t1TANhk}9_#eQd^rlwQyfcWa-ijV)g@wqnBdJc= zZw$;t2vBC;+_U#Lr;(w{pgWdXa$6Chxh3_M$*ip^W3W}#f{XOZ8xLd^Zojvzr6%Xv z%3CdtlA<70Zc0r(O7lei#4ME$hBxVRiS^11XrTHaA`<#~F-%P>55k z0;^wJ5n%c|QYQcoX6d)tYC%xcF9JZhfM;tAZc>q4#D(g>1x_1)?0m!&2Olk35a!Br zc-mnhPXM>DP;)tPuvAIsYny(}ITbDCvMYpP#Mp9EIv*qI2+btMn$euWo&u7hhI7b^ zgBmFqVPmJ;EOsw_&FU0fFh0;p>t}vjeJhRQB#GVNJdi}*w>qf|a(LG*tES|;ifVGH zv8*?G;$cZkJ!!A$R6Y{4(G`9^H~%lv(PTQYRSX`1d48MZ2k+~%MV!;cMdbr~Gpx}P97U|yW3!PERn?`I`<=X-&=0nX2*V@4GQ%Isx`6J@ zP2O1a==x$wfU%RyDGIYr*(792e6Jeu{~_#CtH2zoaiq-;&m@?N5@=`3({Inp((8p* zl#A_YLlGUQhdKu9tukQsKF>;!l9MfnZhXh=&)bErm#b^0DAQ-|1GjA${tkm6sNY;( z+AiJLsOJK&JRi}>KX1N$YAcH|uQ)IaTg5fz`Hb}DOUOu9&~QWgKDeE(81)8cb0S;a zK}ayeNzHnSvAUE=Ar|f6dKr_eN_XhghNaGVH>MH9f~)V%pg!KT`U>ErA7L-H_ibBl z{OCC%f;-U>RcOOY>`Qpr;cR*JZiLyOIW@VzR2he`V?A~tWRH%1V_D1XSf;DN$+bnz zbGo^~MYgO{Lc2hahA*2J2+wf6i+&E&myN4p z)c0))|QUS=^0iYadXU;=6DJz9xQ>jWBBILJ>I+DEfJdCv&jJOJNTvMIpTgB$~2zQBo9}k7MU(|rif+2d@u^hENxCDw= z&35FQ*R4}C+xI0!o$@wjn-vQLGXoGU^WEm0;kMgGV9GzE)R&BxIx*VF*TPX0aP#Ri z;mZUC4Z`v)N~Y3m?zJ;EHu)pMAd~jw=P&;gHuvR!i>m>LUg2Zq)qjioXYe@iSCk0J zCjXz9a^R0*VJ_~ zd92qRTBmK*z7Pkr^X$|)EZ!C`@DE<%k7Q(Ck*YDFt(fNFxr|BIBQkX$rbGRV`fok?bE!_h zuvn#wA5s0u`~9<^Yz8Ic@Tfy|UH|a#2lnUqTJ>bj<)zIl*-N$h<9)qRec;b~#P}>% z^=K%x4AR~@{i&M%IY=ej)h_t`Yqj-JD8w$iq#WcQYfXnn_)#Zmd=AU|&dtOlK4pG zrv0^cU%2^V9@E+}k$#tQ&`dhqE=$OlXOBMu5H5{2}Wk; z&6(&dypMHe0 z(oM!`ltanH)7Qg`vWVrMiInf3*IfvEhkvZBQc1f`oF(*g`ko3^Xu2aK+3ty-rQfmWqMd)FhspH=rfR{W?uiX% z$=daicE(<8%GlC6?y?}8nUqt9<;jE&tPz{9vkhbQ_;zF6ktgAn8pn(Lw0l=3$3F*B>N65 zHjwHeEdcKh7S34DibePVdWaiKNI-;R$%|cARb0lXxlsxkBpH&y{b`fI-b;H-e#n4G7KuhTiXv%sWQ2fZt8K!M03$vu{0IVk-Il^bpSzakC_&g;x!kZCb_ zO22sj8ozhNI>;9$v$}gb`Fq8oaA!mVvI|ggH+``Ec;AEm6%qJ5RzvI%ie{-sdthsJ z3r~Y{0V^@Sa=B#HKO$Wkm+RuOa#T~g`nU`}Y}O{Qk!8SqA*zi$6Rq>GP)>4-N@4GG zH@4zkF|t4V3UGg@ahQ``Yk-T&2ur(AaajxHzP&h^r+{VwY^T}$NS8u2ptq^fy(ixk z1Gn-a$c(A7-m8}+Llj)YYc{`^ngM>Q%X8`_y|T7}`=aS03ju@2W*#1U+pIm#S9=y@ zXJ>C(+%9LH?>n2?B5&J#O4N^x=V@S}TICW_aN1R&3r{@G4DIv5Y}e82yaEItzUaJz z=#Bu{dItom0ClzQ`Ey;jC2*-`{qH{{I18&!ue-u^`QYGmw#*d=5^j%1?pRk|j}(1c0W}F2)(^_PttigOS1>39Q|}a* z4cg3t;V7FHxIEU_IP$)vC7m}`@A!*_;{pC&Ztq&r_d^jmHgO~P!INC= z4AdGf{S93Y=(n-##vA&63e(>aOsqddED8X+-cq(M?D_LIijUH7pYDZo(T1p^2~^h> zL^cq(0o5rFNpiKhlRLVLoY(7z!}&(jKY^RtEClIw_FJC~^d(>I>Ub)ri_XfaIB9>K zk2!k?e@=_Z5YCqxC+dSjKjt2d{lYc!9ZJTC7>{WZaC;%)*zrXeo9x-wqr(Koj~7&- zS7|-n93F;xY1;a@zXv6pYz}Ca0fa+U^j{kz4zHu%n&ZjzqfsR6dKo^ z@H%T0QaM=-(eTy88b#z>PcLB-nId!dVASz#VHa@{Eq>V7&AS*kaz8_54?Xm2gl%#QU8h3dh`m7( zNRBa<8+RIW9j_!BY~70ujw>m8MPst`i%zlrJ%9>N$g%L5m&N>D(KMcuOZ01J{%yX8 z^lUH!*$$OMk&*kr1HnPZ#$;mLo3a|;dsF3`*YPDxP6+I*Y${G=#XlUMNQophDI^|#Qz0yZC+&^4d z`l2%;jn<_adi;$A@YPqm@LtbL`%7{h-|=H$hjR#yuY*_4@*zi|)Tae}BNkuWkK3As?@fp1&RK z0KMf$$I>{iYzt6go1Ht}#2Jj_W>MO|IwyT^eg1vBtZ<>Dx#evN>G3KR93U0&2tQ=z zENNtul2;q<^zZJR)k!OUQNG*|*&JdId7oFGG!(frk%D+>ZGq1^CHXGveE_H8W*?tl zIMeD#7vC0x`$PH0H*tJ$UR<@mHc=@YGeB!VV}kEoK$Ok@I{@bzHyQLa&Q$gPF4!b03mKj%%{F}H1vOm znIXLGN?+a47O{kQu~w>vSY;yDmY&goQ0Kc&=%*eUay^Q=*V!K7#-8fPGIPUcYV}RVERc2z1izoiPOq>yDevMqLal4XFzX40 zBaV}2Y|&5}Fe;Q^9>akm1Sb~zAihLPE#73gM-M9NvSJs9mZL+K2303UYp1HUjQXa> z^Ndez9;8tz_J-@3KvmJ+e$FEv-H-QdTEBud2)oB8S-$7p*0e;m+6fKG&D>qw@IN)Z z^3<5WQkb|A5yM2GWN4b51I?#P4`kyMb0MeWk-m?2zDEc_VvV&;A%eKv7?=0appdn# z`dFTk>%bPEFxBT&30r_t&gSsE+{2UBl+^$gdig^tU)K+|hIjziY#GIzLo9A(HQj=VQiEf%NpfKsl6xyT1FKV zs3#|-HwzXBHDCWu)@j#KK3XeH0&HIek z9sf+wxdZGo5!mm8pChKkz9l$+i82Xo+=-pR_#@5m!Kn1Eh;K4sMb=~Ksx94Sez2TVZ(<#lu$eeI| zA-px*P+CiKEnhUYgj4U7()*ZpjYU;Mj)V#rsC(J4ds(f^$k#Dv?=nD?G`k$n#Nu9k z3{Cvn)@jDMGQc5*LZL?1ce}z>ZT;Nzot0PrdR=|^`{_$q}=@u=FHSd8c*#-YH zZx2vMKJbQQ4aL5!f`QcfmXRenC1ql+UiM2tTQ@AT`;RAqH^RGU=mEpf?~r1VKApDe zh7CNeBMO$7!%V82gmhoIz)=bZCKNE}ldhjj2$A4_kpP%J4o}2_6ZB7MQkR-eCfC!A zb=8P11uyhk?zFxVt$1?mRWQHA4Fqh5_?FXKWLjC>8n1=UG59reOJL@j>dtQxEQB3S`rP#++tT)RuW{bFePjf)q3jNn;hvLVftl+ojIu8<}b zNw03ZWuX537N&_o+?4a+^pXZ5-c60olLf-{1iy{la6?oboWhd_on!ne3-1*QgNm})Ss^&U(~segVRO{Ttj z7op6d!Blb(-G7$D{^FQ-9nNieV2iPTzR#8FkN4I~)ELDpd5-4gR)(Tf-zCLB}1u#J;Wj`F_&vBgE3RETY)4^iAkMjUdMBmucsdryh&S z$|KsE#jfo=k!StJSfCuNLu~BUs%@gT&Y4WwDPCp$z0)V}WcfX<^&W*-dRqi-zU~vO zi4R%>s_oDPndmb6k9cqC#&wJ7q9Yu|kyq7c8m^l588ykQ(Ms;fW|ss%+xAXTLs28E?5HuR+82&25LPCQDhdAvWfDZ?3ZUJ=!O;mV1wPb}V24pnA5g4I?!joGfJYt=xlWshm* zbq)BA8AZL;aseL9_v15)Qn0Giz`(*6AdpVLE#da=7Z@$Ir6rK@8as`kd&TWy`h^%ar3p*Kefg^M-2V+S-OZOGncs`&1GgM zq)a}@?Ls-^5jAKxIO?s?Cht?9GN`sYa!IhaudfS~2qAzK^0YJOaK&X0#}#y?isPw> zi6>gjtDke!AtaL!5RgK)toPZolQ&`Td!xn>s&}o$xmY`aJM+KW!VyLzq zH#VQ(7}UEL3QjMDb*N+Z3LZAAetz-$au*+hv!|nMrdDvAmqnONmptOdUwOh{Pn3VC z>LXYpLb)&e%psI=IL;Pt^wVYTcO52{D7jJEqw1mM-l?E-N16fQj9!mkfLYCV=7l`d zRu>Bo4I?&R1m_r171WRY;%Si8VY1YFC%RB&=|Ol{O>>Hi0Cmw;d(zr zqkd(@sve9IS&>kP9$mC=mfY1Th-+iDrCldqG$s~UD>JchGZmHw{S8=h`&hazyvKdGe|E| zG^sS#KcqpDgkA^%{^&b64`Z*AMV5|a}ir_)(hH7Ar$6FnwVD9W#i-J@rFtH&uV ziouEhYEZN(JhR%3_9ppe>ibdDc9V9)YhfV~gQ!lf#Z=lKR;|@4=G-aXK;tgI`|2MH zfsAq2RD*p_jHqF*vW;PrdS{=Gx_bIK<=%-;5)FMrVf-&(W9GK1YH|>C*}j%%lUqz*Q>^xNH{*mudrHBy*QHwqb1V76dz^k=+8VXNqsMeB zzX@DcTnm=T;u&Eyd^K81(Ykkce%;LlA>R;w2M;uG96&_*8Pzb?D0DRU0)lqKi4vL~60WmUCnU&7XSX{!h zSf}{l2u-}>?xnUz2B$A>J%OV^>tXxlBO(|OF~@AK9T-_bq& zio(aqYEk|+9I!EGU|QHT**>>+>#kln6!ok0-hR{KHsVmCzJqvrIu8-CDsjue>hPk; zUSg5H)_tfz{DibRH$5~vw`&B>ggMqF^aN@6H+py+7O9$=@mVFsN?Ve6Pjlv#+#fOr zY94(F^n%jabf_!t+%b2IAJ#lv$9H@e`%RYKm1!-{KFLCxGJ1xl{1Lx_vO1i6mo-gC zDdCO`VCxnIMia)hUcuuR<@EQ7tOd(y9*7yg6gpwN+fm$m(qc?USy>F0ORUv!uF+i) zbLJ7<{oMG8it0}L#c~2C#?~f-W)5zQythd-v~G6cEpoP0ATP$YL;<*KbzEY*p*u&P z#|D2{_pa7}|NV7F_wykOZ#}2r5sl%6_N8=QnlPT;5?NKPq|>a$kXU)!fGh86{d{{^ zjf>sqZHgK6IuEuS_qRNnT@xf|P0Y^3Xkx6?8*TA&V)=<9>FJLisrRs$v1g~}?5$i# zc4vBWE>=S&j!n)a1MaeUPrd%}Fu2!ju2a~BH^;(#HP_wB5X`}R3&M~2kr1s|J`?N!p<1l9!ACbaF@66W&ZxdOUa|nXy zy`{)1munaaz`Loqbw|^k^XK5rR1hTYpZ$*y*&>)(h7JqnvUkAE7k%*3L*Vux7{459 z|D}y-YON@HsksII^lNh~PZByB*QPM)9^OL`%(jCiy}jjMu{AKe?v+%P4L##aPgI%p zO@xqZY&+eqI;B;pM(gJ#1wwf}1I)a|Ds0cQ@pkTxC*{OYa65sl84QJ`h%+xVx z_MiUf$2-rT`EO3xuK{(UfoSe&tqrkmaI{7Oqc2FI2NNY(2@;ixZ*KLCthj7t>D1)u zj<7Xi-Zg@A;g+NgCzO16J`t6VONjl_mNc?Z#-kBAqQ*TcHb-5)ZvQRkj^ZF?DD)8; z^FG5XMoSbIgd-x3b6h*0hhcZi-NBwFp(S5w(=-?swUG63)AGDvb`Fp$@hpcH{F6D> zUpqIfm`QzuFJ=cLN@*N@W2pn4YTf$V^Wuly*%L%oY|ZVIXzboDUjAew9v}Npb7^w@ z4%Ma$cHD56&36Zi%kBj`xmg7lem^ukxkV=E?hH#)_T4`Ur2tlcl!Kw4?)M#o-SK=z zR>VzVN%PaXS}8c-5j-{|9nFG=a?6a5$Q5fu*Al!5>NjZq_BS)goTySs9q^_WnsL7Ie@HK8%C$(?4R&So%4bLP!sStQ*d;CUKv+iU;HN~va_Rv?0 zAqPL6*QZvG6M})->x@@yBXNj43^Igk{4FroX8yeN-+Sycbzei~|qc`lY4Y`%E`jip9qNj?9>8<&{k*j1t znaI+b3?uX44)IkN78_jJ^6D~N-K(@|*c=HsS|(;2RJhI}c|_J-du(gW4>{t#1a^NH z+}X9GNm}uj1Z4^o6A{QGR9hWt(w%ceAhb{)xFr-j^h?bHJ+~0b{O)R29Z73@{8nb) zk%TZ0I4Q3yuB6?!gsZVvfFAo9EVh=r=7*ciSV04p_tLkz??j!CF2Y@%h>Yt#dPxX4 zXkz7g3Dlp|rEwRJIv<8Vuf92q)kaJV1uC=a;PKM5biaM(fXuExH%;16iHp5u*~XDM zyj;F|B{czm$_wAy+wTfZjJ`S|K36G6-G4RTe}Res#b639_?Awf{3~_A6CP!C_S4M< zI*S!gTU4dkx6+$-7dw>9vc~UivcaesmJeF9_N3h}e1SxC25egb)G9o1#G_^}zLT*K zE1HffnbQh#NsT0f6 zBKNE^j0Y&U5okM@*n?f_&KvLOj#YxBYWIOGbb~$n@;@})F8;6YYa_v!%ubs;W$Ce8 zRpUNXM7h=+-^4lB3okIDH8x#nMrEd(Cs=87O}dIb5mdy`b8F8#rY@ z&_g|v3|SBYjmq{0lewOsosI)MJ=uA{C9>XoR}l0WK?|BMaAVjo##N)Yfv)cS{je zq8=V^*Ru(?8uO2cw`$w#%TO@Ms?YWc);*rrKQ+j(@DG*~#`+vL?wi{Yuevd7G}iqB zK__D->A-d{9%Xa1MzEHPiPy@i`nL|dh|ZtUZPUH}EMy#|B@%Zb8VV)Pj-pK(S|k>fsne5c6d2DEG6ca zaKm_Sgn_t8HMhlY%ag4cd}OT{UnidN5MrOO5Po2EYvOrWk}Ubdj&{ugt*ff+lx2Q4 z-U6|&>efGUp;G_bN{S?vgT$B#YZ6hnsrpjOP3ZN_>S#;O`Z-&QR|Z7eVMPcqqnwA z)6a`$li+fIdyL{;7Z%&}6#^WPyw-}hob|_wpIK~(x>d`m>dXz|N5zj0AiVCfpu$$U z<7m2PFC4}VxE-c)$ZUoOGC4g158!IG=wmS(W9ZbCE|XJ9kZEo3$*>iye|3+0YBme4 z^xd@o#?+`s#(jh}8*B;2Pr8%ZYV0ruNlH(hqUy+K7p2CRnXPkBeiuLDR+_$>M9`&Q|0di#yZn=gopLq0Oyk@bPXkUhk3s(R{5Y^gg*NU{;7Vi;r!!5t ze0+2cnJUY=Tx;uCpy)M5o zLySnPDDFr`qEmwI5b^j`@k+u15UopzDg#^O;lW*cz~@!hKmDZ=-kNOj_Z6h z5S;KjHXXNoC7+dWPR0S{Za{@OtznYi9GG=SYj$Ef(!8W$#vEvTLVa%9=gNS-{`JiO zA$FMcktw@-ztBwW9z_D$kip5$U^$T2DUK3xJgLme;7&FmGR^vG0Y;xY(*;JOCJDW~ zF8^0O;_h#~GV%o52eSp61pC%dbgo--XGb@w!v zpGo+;*nUmx&X)|hv20Lf+|I@TQ!~=tIM-LoK)<0*cTfK#CW=Q*o#C`KB80)=n9@@& z)<4-EPZKXLNS$v?rdiC^N=&0ObwBHfbKHz-apxh^$T79sCKU-Hg(WwJfPvz>aK`45 z#FRX?`hY5RIHDFD-p-u!Ab57yDm(iKB#p2Ju~lpQs&1!HsfjCAOT5k5L*V2-?|jAX z>F&=nc9f*#l zD7EVhvo7NwXUo$h-^D?DqL_m%v21oXYEJTuL-?Xx!o(M>ok4qGef?f2R?djkLqhXOI@)e?6Co%} zDr)Fs((zf9kw(8Hzb|dH7m-7m(+0^_hw`L)$>M1>xXSI!p{)NY z6y<89BVpQlDkdRLJkMPLgOejAmq#j3b;Aq#3FCbc8-YcPu1B%$bf|3#*IO-GXtBu$ zb51+Dn7y1CrZO_zBP6n-hULVt+YNUPRhF(P-(W6#BU(9bI$5>+9NK4>RhPQ6x)0#m zax6tyvwm_k_t^Y|eg)dUK|)l;MX@lGvvq65zMz*RZ)4{buWBOHRp2#XQ$~Ndp}BC; z(e(xKPGhqRza|AsRQ~FMkaAz)kng|~(;gQW0?yF630jI~X>i!fmGMzcLTlv@FATip zA5TRTV@9x~ury_+1XSYFU7cR;l6f}C$&Y{&p#topA3WR;u~VuK&-Jo-*#clYu zZAn|$2b5}#8YLSO;Fu8C!CCePoh-z8I(~u(P;?zf22PdSN&jWD@y|KcP8Q<`va8R@ zu>8fym>>zR+B8#w5!>z2ew`^H*(f-{#jQCKdBm z_d1}Q6L z=nPhYavo?PH-uRFKGs~upsN65`$<2&PR4`H@hy?ALiHn+sf+G7Xp*p02oWP;f_!f@ ziolf*G=5LItXhG>6k=)xmG+xow!ubu9l z!DsuO2f!mDof9G`Qe{^p0=cr1!g_>oHjUDfmrY*K7I*`~KI5M*^P{5q`h0@od0>%3 z+J+cut%xL=GN98+qj>VXHx%EH5)&m>LiMurO_>Jmh{e$y&Fcp%OZ>tY1o5M=bKUvM zDy`lNxjE9>%<-eKf%L@Y_Gz%?5jQ7;5hP7*Q|OJO-ZJupVH=_&@9IrPV*XF z;R*I1%wXdIi~AYGV0z(n7yB_x|2|9^w;QdjE1o}v;<-8e z&4tA&Lm8jr-b9PVgvH6|`mP_$F1R_~xqR`2>d=<=8;whPZ7d-?rq> zFG=x3-d=<;0V(H*K}!p~PhNVr64(M~ilv20?daaEYr9ii*1bis&UR#HDno9;bEtvH z$ErRl9g}V0#!PHTCkF!0OYQhfq0fvI(SlXKRpVnF-KcaSZu1mg45p!uyV|)Q{m*Ms zab*9ML-=L0@?09c&rIR~Dg7+k_JJ09Hm#%46rLS5ohpy`YNkd^lE?ax$8&ug{vN_&8ar%Zp4wwG@+Ry$@M6bavSawA&w zT#DU&{k%TZ@15=}bqD{4i|pTrd94$1fRirh0tT|B%B^9VC{hL$C-fPZ&)EIq0?hK) zoEwUS`#Bjpd!1&_DYFzf--~C`h#h3ipv1s(*+-5{=RIjrK;-^#JIo#qpJ$o;IA+rm z5p&w4g}^?XSX2V-DCU(oJk$I`VhVSulooCF*;nV2et^DQj%lb4bS&nFR5=c!v=O>o z>J3GQdbx;Z_}UeOdCn&xX8%4bwh>twWh#;Xfjj(kx;(TZS)gB&pP7XsUP|l`?CwL; zJes;P5P_J-#)Kn~O-Ba82jd5Lt41Hwpo~t&;%oaG{BSE>BV=l4mZmMRgwj7fLDJdp z6#lW&d47}7>ePlAi!k)qMB+}Rk1>oL-o_}JJgg0NV`22VL=zEXKzy=>KXg}Xk(Z0W ze$+#jKJ9F_!Q3IWN9Veet0M6jYd|%K4ng7f#c^Xbr*v;Q6~O-YC&tH7hu7CCk+-mL zn%B3YAAnpYrOoTlf`}cE-*iSKMwA~v0;T;}lhr#X#G0m(8bm9!2y+{dGGd(06Hyv% z%OUkO1(oeboE3- zVz9Z@#;k}7D3hPLizrT*$u=y78?HS+e^{e7UOz9+@b5IDp#Bm5WYJ1_Acbwzx@Tp` zYRf$Cu*Td(>blcPOtgm&2*r@*gG)gm9Um!0=1Iz6&ASKjJBJ_amwU+u)=ALMV_uRx zeN%@lIWu43Vxdk8`XMIzqqH-$sa12^xSk>{y#BX=8K&0Q!oJ>eOKXAJ{Z`!Q10mJu zor!b#5_$ih;BmAn(D4nG(ofxw%pG4)hjv`$VgJVvg=V_hbSY1ew433rYw-&7Bts3) zTHY#(2N@{MU8<3*uWLN)A;X{CJEart1RXAV$xdlQ^Qm_E&d9E5#7PRKf0>U^xN-9& zC3!_Nf_)d#Is%#8qta6qgcW>3&BI}=vK%zh2rd{|I=jwKZ}*Nnh^djAWR+wnqCPbhQSP6tG)>Bv%j^ddeC`&!e+ zrM+`sL!$7v;Kk9V^mN`Ebxgwl)SwsFfCe2*UmI>vVo}8{HlkzPA7Bdu6}vPQY3i8h#XuZR%}L*hJ; z>x`2$Pd;A`mB-^{!#;&@1W#Y~NHtN;mG&(icskM6S$82(?}%Kcc}h6Jb37&0AMxKA zSNJ#(0P#yuS%h}!Z-&n8c_)4zu{D94zeqg!FAC@l^wwrx--+MfRDl2bgD ze;1Wa>i?ZH&x!KCbLMfN|98%O&bYTnK8)G2BVYBiHWE} zf$fneg}8>mV>8D2BeOy+(!lWdO_Kkv410L~xR1me>gMpC8AYyMcqDxL+iTAj6&I23 zenk?5Iv_)&)sN;!-23Ez8wT}M`%(f+T6{6A_l{QN&^Gf*zmzMnRE zbDZS|oCv5!hksRDXo$uHF5a@Sc^h>B-ou4INBtk9{2dgFj%yC8&DG@q^NyCGsjpy8 z7U|%cG7Yfq=0!y@ndLFDsX}GLXo#B$@(KbnNJs4~E@d_D7T5QJJ4oazk^}uLPcMq) zi8pCOvTv9tn%6BM8ABs=?Xl*f6xB8DGRk8D@2jw>ol_JQ3)a}Er3>cZ5S0k=@Q^j5 z;=z*2o6~rkQd+vBDNuPVH@hosQI;!S5f`0l$(E6xzEj&}^Lc38gvwr8LCo3zrn0sc zODMnDVY!8K$RR|BEuz$X;mDEWOnHNiG$hxpdcg+A|7K*Y-YkbSfjvn)VGa5yJ=61~ zC6pU{i0#nsu5A^Va!>bqfH$4j@-nB5?bT~p)8FB7H_Lp@LXY4q<#! zbwbA&Vmv<4rkvKW=u9HMd zQ$B-}_{&X@Gc!lU6lG75O&5TdQQzgKJDmE6s`-Qn=19+JZWuXn@1!H!shnHYPjhjB z)i_93e)GdpEIclhF2iEw=-wGh$V#H?zHB?Hu_6*6q8YnV@8lErq&(F_E%;p#&*-@#fLuqWb zKO3y@L43hsH{V{*-e{A>VbEy3%G(}4dwP0;1i<4;t~A-BbGtRv4pXVt(VEUu0^rJ- z7%z|^5RAYI4h@9{VPj*vK3mINURFz>(Tpf9rD}h<#SBHIF&Ky;Vr6BuI$!4{mPqLd zLua_(O|@k8eC4!ky+Juys^1$ z+Z#>a8ev(}n=X(MPh~!7x+_vD*MLE%?|F3E{u8a%VAc89U@}t#^bIa0B^3aNEvloV zQ`s?HqFh~|)<_>69UX?tlMxgI$!@pb;Rl6iWpA&4xjk^aRA2rxd5rss@?^30{RP|k znI4-wZx8UUx5vCPNM>ecMl(go1cG7f4||#IWoYFh<`ePQGB*G?^+P9@bc}Kz&NKZQ!G`b5ZUnu<<|zO6Q6l$I_Ae zBfdir*ww zUPVPP7>q&d>ss%NucPxVox{;!Do?`ha2m=B_*Wla-$LnMALQ~S0Ugs9i95DE5c_ag zTrMmnWq7?m@k3DXvKLkJ3l`Qe1TJu)m2Q6o_Vx~Prm@HAG8@nqon8-;I5t=$mblVz z3@GTd3iDk>1%pDd}9`6|(sQ;Y!pRV}JpHTwY$zw|nvg!sF&iWpdB51DK0SN)ooRqBR`L*!dGp@H;p6 zD=?l8Z?KEoTR{bd-LXt50M*8;Eo`HsqrIc=V@%_4jPM47h>4Buj^ue2mX}9re|zOn ztuq77a=km9Jux>o4-N^*mP}^{uodg^@bh?VFP4^)+o+{%Rj-)U#noI}T?u|yr#rf6O zvm6{8I5|049Zr+E+#L4qj-(C@57(Sdl_)d7VXxdv0q)+b z(CPi`@q8f^0E6yRRP;MPzuN9VmfhhvD4X>8%=4|9S<>-%o>yA>%Tk?r4$x^B2Gi$o zLH?lxDiH~ZR%4UyNw=FBrH1BaIRI?4W$LEx9?K2ZaTH1spOMJ{IE!}&z`g^2&HWA= zkwj7tz&cvEARI2YS^C26(UF*w6Dvsj>mvn#UhTOu^;zA=`+Hi$(KMa#XNgp1P^;&A zYsE4(kDUA_QP=_#s)=cx>Q>>#MtnOq`(|qwi*?xqLj!1y{^7Ka1IU*c?BX44op>5 zjv5t?7IL!f-6FLhhS)g0zCx@Y=`ytYwMip&YC-iS_4Yd^)RlWSL80}%BO?*hHEuAH z$~{E$8~X)YqN3b;G~2SHy!h1I@a3WpSnMYJ`ZU;vV|$3U%$OuXe@20*eWH+s1-0~i zpL|7aEns`1Vq<+3i+lU}0$N%)#fcFe98_#C#}AG#tg3U=*cx1zBCGeRX_Ms{ zG2#h+F{?>d5j=!Yg~SLM zC`+E2U`ykIH>eH?56_JV$;PLlK`m7bT}b2iXd~LpBgHsAt|1NaSuhh+2!)H11FA9S z_*A2yq9!{N_pI?MC}?;*=!3l5JTFkN^Q)^ZKq2Y@R!6>2)*qQdkrr6I(R7af$D5n(@FLx+${>3&hoywQ8 zCEEF1@K8WHzqlwf-vkXJX>3 zS3v=33bVP3)R20U9T_wVrB;_86rikcPgjOQkSXRHtOqx8;~ zdej;%f0iuUM?z`ZAUW^l{bEU^b^$q(FI9;LM77%fNbv(0nDa$1>H@$vJUl#r9@iJ| z&KGM&tgPq=Rh!-b0t`4985tQMI4SQ| zGCp1a;8g&H)&*Fu+vNa>*;-pV3YE&wyB9!WAmQOjI5}H>o)`Ttl*_+daa^0olfXow z{0R^=z#x9E7)~qFZ09a4EIeLrM64Lze%uJe6&4ZM7~^@X0bc`AQ&)H13?}*6>_BB< zVKK*)W;$Ka3Cu&e-Gd7t=&F@-nZUi6hcm^FLPyqYtgN(J9UvK=ug-vy9~c;z)nzfB z>`~bT8cZD60Tu^Y3|S_oy4tqVom{cS!#k{|hLQX2*%pOb?GIqQm1~S-k`0gkdb6Cv zHa6?)(Xr3BPalp?$|f1JJ|`bknypo0=&EocuXM!OXYla*uwk?%&nFQyG#B;sJ@Y@biOl&IJHv@F9!_~8J%vx_nG(oB^!dMuTdbcE`aamJ$qB<#1G))yp& z>&L?JqReK?IO4*8BwNURW~oEx_q)v=w;a2=-|%>7J{kIglL&F#27a_9VoM2|hRhy2 z?w-JpEFOqHo^OsHAFpjl7~43EXLUGM@81~b`i&VI9Kk)hQSqgPOTAE~H?~NDd}Ft0 zZ!-7F?0L(P*<4vjQSoy!`heL&ZSrx6Jh`jV4^!wsetx{QA2Z|`dU^}7sj5j9^s(bx z8%E~z1sWrWzWgZ7w^ZFpHVC%2pT0@@Ne_$!1lW^LW=Rr}JF{*o;`{DU7$D+0hOxh{ z?w^DMOBo`DDrJ3ZhQx7qmhBKOI$fw7OhT@D=yb8E9N~A`Z^n#(;t`e84<}O_LQ=>4 zV76G75lhm2aS0@{`XDyL9e-okB3Edk_%*{G9Zhzki2rJ#>3)L@FyUT6rjC!z0P;Hq zF!PSrmnYCuXK9!$#Znc!{c-R4`JX;MJ|Oq6PiG5F_7nh91dU5(cj&?e5uU7 zk&*E0YdafT+XsM}c|q{(16CnIzDz9{FvKR)1>V480HUkQ*j53O2goB}cj_{hp3d6G z0GtH_>KD-Y@HMa5W_o?^Wh*bxj23Iin3-&k3bfKK22 zRe6P8Gv;dZCFXZ_2cSBc#S$kRlci6O9$5^2eP>4>HV7GfP1JUO9DjLbr8H7O;oZYC zV#HYWcrx#xZwB(An1Bg_3dj^_w6X){#>v@P-LVDmCFtEB?Er&Q<~lMkP&hAK8dF_t zFq~v9qzMiPDz5wW*P@~->n%Y(K0c?NcqI_AsAA=6gWfvJ>4L93FV~2PG@5-YE9v9o z(ikij!|@bKC3~tinK7JPT)`0$)VAt>qj)&T4-XH1I2<9qrGpf{j~n~@KW<2hzo4Lm z2*w6V79*fIL|yJ27i`NU0|s`2tbj^cxiG0}>ip6UKg$CInTtFsK0Y{{I1=F5F|jl@ zugk`h3}Jfux!FZ*M1v!}wJjM5R4JRXo&K#54%QodjO?YNvXcs<>7iX?%?JYns3Kxw zT}wmhS+}JNP3{Dk9-85TIlr1RS)>$QeY%BiH;)SlW}K4a;=};!^tDuiyG|62nfalh z2tA#Ou|PA`W@qph>1RnvNwtPAzO&$6Qhr~NZ&1N~5g*u+SvfeQ%Pm0q)vo;nuyQ?G zRXAr#&?`~RLZ>waa<=8_Z)0oBry^oyNEYf`86F;z=NGrLtHIt<+T^dQYi82ZhpH{# zG&aXF^qxr&3*?%q6R9;f0bMe`Wcr}0>9||Lk&}KhmWf3|tJ#!4~HQB*yJCn+mXC5v2f~sVY{D+6d0kRb+ zn4=B&?@1#D!v+i>Pj_b|L`0tq4GjT*;>>t~!{N9?i`MFTU*`Duc-*9x^JWX6wf)LNXr zrb`O(@qKV<#es*1kHFyyiH)7| zfbfZ@v&RGc2~$7@jZWv|P$G@t;dCJjY!zsY*+PtE`%A*XRKD%OWUfxRe?Y+I(UGb9 zaI>HeB>LmWkK+~E z{B@RVl7RO#adZPhNJ4_Tly9-p1q}@xB{|tbl?6=0y-Op;&j89| zNQyYM)4e^f=jkwJ;XCH~6BRm58@@PpR!QuTmnb(Um@hf5Z*KAxCs2V5r6{?=2UxMQ zrvSmEvb?-FmD}E)q2tBc*tBJ}Dskoexe^f%4{j(ZsNcEyQW@ZSw`ay;EbTeLWclZTVRaNym zLh^cl78wK{RjGxG>p^!9x5i=yp`wNb@b-ZSCT|Yu{Jc@gkvnpHviauSNGcl!hGcRxX<{-*Sc~H>NMea^lE^co00dE|T9l&`I1bkb7A86kk&fGsefh7oT z0cHY-s!=H#0KRpxQhA>iEt2W>;{1Gt$qYHrxq-U{;77l^xg{l(0J#9%o$W+T4>E@q zbOwX<(^E+xn)9>P1Q~b(0Y1KWN5^+Nc5DE5TeWi<6m?QNgYl(HsI!&;qOVU^Qo&&{ zvWkE}Dl?^e6OyLpn$8X7vpe7seS*$YeYYZn#KhS}@Zp^X;{uXz<-EiP5ymmt+7zpm&m|P^|cC?#TJ9^-fq)vTbAS3Lt~M zf+%KxJph6-t8p1YMHFY?j+YQBL0t?eRK)X=Z4q%Z%8Nwmjgy0cc#47FhWZF!zw#a_ zmL9B@Vjdiz6B26}+^x1gH#pH*hNF2a7Uw$0=G9ovWdLT>;FUIix@xMriq-Lz6PRX> zYJR@)L<ml? zFwoS=!)v@F<*MUmcS;wp zHO7?z!0rNeE5P&}j=PY81Rn11*SEH8SDJphv}R;*xn`4w)QSV4-y>TPYHI3hfUo~- z1$azJKfpK=?Wa`%Sb-W%WcS+V41dN&wJ0wl2iP!xq$L+hAo>HK8#H95@SK&Gmv?p# zG=;^|Vr3T~-_-VcsYOL-FyMfn?7Xt}i*`oW`02gXV_R{NOSgu8q1r$t7Ot;K}!3cE-Hn;6Br>8hr94La*g>u)23$Yct+Huuyp0}r*+(m~L&-Z)F z$_!#L1A0=BP4VKg8#Hdr<&%KfNERQVG|V(QPe%fVVX4;2;FJSCSQ0qH2sdX1bE zJ_|`?91@3Oaron-%dF+HaM6;4t{ee%U~EXy%Jl3^Oh!h;iUr9~s`u1E&xY{9b_rX2p^`c5wZ+qpS)^1`9$@&xz%DY|VMuqstX$vzGbf zQ0(8`AEtdd5qsgp$$2@~Z)}{2ZHR#3(2O0}4du0VW_Z4ipM(wfdbL3xfyR+=8DgVY zqBbBEnHds?AOV>s2@%x*X8|2Z2a_`;P1uN@tY)?9{5>1E0hO!ZO_D4mn{>^S9H{RG z{KE4s9gGsfh0oMeiWB>IO6G~;O+o{A`013VT@qKb_PMR@#PaF&Q2}WO;yYx;&)b%> z+wUNJgmw1M>W*)&hPd?z_Si5va;`dKN25~vL)&lHoXiWk>#OXM=AKKp`L@brcia#I zHY%H5&53X9aCI6&nb(0n$RPu5urda-v_EQ|;vw*YZK_Dx(q{*R4GQIU@i+YH166kyeWPTIK5pf4a zI5M(RYWJoz3(gF;5@s3$G4@K<9{bKy6I>Ki_I_NB_?Q@kl#~>wgZRYxy4C<6A6~yM z;^o4|->j2R0gU3r6$>rD^LC??7ZT%;Xb#Z*f9Ik`B_s%`Np+fxbm)ob4?IzfGs=Ba z*J}r5#iEv#vkmS&xjxez{IelcWi5to&E^07i;gwN!GSZ{qzE4AK2}bZ3YFe(LtXlO z#P9{HCYwL!NV045;9dR$o4c`N%vBEVY#`kMFxtz}TlWXs=x$9-VIhOWe82E;q~K1c zKa|vgPs-XlZ=Jx4xCwW6fPz*0Olw$a{Gp?mc8UeF(PeglM>JpyK8`}SHL~wJE_(ri zkHOXO=J&p^gTDx$y_s($zRMuxA|_Vfp}xo?3CP6xR^IyBt8tlYSi*1hi$UsHFsIV| zAsNB$`$mL@VEe>Eh2Kdl#t78}wTTkU=v^i<{;^3UTa|D(={v>;ey?#t7kPpka}wnt z$8X)*w06H&J(Q-m@R?Ub$yS7W`hRyIO-<+^7$XaVPJW{m$K${WjMED7LSfj4>_s<# zwM_-R_`wAtk%-6JLlmIkRY=fk=E^`E9W-WN^X(&DXh(&Q1%eT~pW{zq^*S&DG;zCS z96dy4j$fIu9r9>GDMWmxnId0NjSyg>S)~T#ihZZqKUKqkrt~0vVx$!!>>=ukLyJOT zq7@I`I>Yn-E(*$*y@dGkrvY!#tgEF8M@F^$gI??Y$vAW?*T>vM^95q%OK(Yjepn92 zc*NizK&(5rK|l7JuOXb^MW;%#qt{!SFF!7=O`P0&P@5$+1!!Qt^c2~v2K%=HN&K zf)F}%oibaWoY{QFlpvhXcog*XoX(x-A;DkXgDKhB+`?oFjkbnQ{EDtsblZD-h>#!2 zXx4a1k-AK3qZ1Rw6cw3aVQ;2qX6zqU?1rOE&CP)kMjalS0FwoFZx)Yq88Bdh&<_f* zEr0G(4Z1(4MB5~vRpm+Xu3uRG>X*sz&tdQChKG@ycJ}F;@1xaawQ56$x-UP&FDUP1 zi^#!H3)2c=-xp*0O>t)v@K0~&{Io$q{n62o!oK54_|LDu>RD&e`-mAS`EvS^HEs{( zChceE>r*r60tije(jF#QH|Gw~!eP}Pr)8(uE(;CHaGDT{^R(H<*?d~ZlvW~z5w6*Asja0s+e9N66>b2M5 zE1JmI#jsNs5(SGL@XJg7@&P6%Cj$J>t)170PyyX>?cnQq32rd;e6gkATYc9jl_!T_ zZDGGGIaln1uZZ3xWU#-*Th8{2ZCxy)Tys&R;trfFvT|A`G=#)v&oVYSxD>RidGYX| z{F-iO=uRW9W^?QHaD%UO(b)NnlEl@Y7T3@?^6}3s&aS{mk-V2m4I=)kZ65OYY{0Jn z{TXDz|Cq$I_!}xSt_K!7^vi&mH}OY|4^yBYq+RMUV`Rv_8bDpJcF}f34d6vvOgL3p zLt2-@M3M!35(yxK6HepPLH>X^{`K_WK>H=aojLkm$0!Pt0^N%m@kt`R9#pVjV#0lS zCrnJF_?HZ(L??yMiFG|!Karo7A$s_GFCnkVf)PEO6B;6hYd!@}Yidy7ahh zR7^=WL{D=~){nh|?&ZRZy) zWG$2$DMk?WZ-m0O-z0w31pSaF$q?3_uT=ZVIpdd0=~tVLf*wgCOV)?DL8(oblRv*W z1w$;$;_w?DiSO8*W=8K2Up>n#lG}J7Dt*7swcH^r;yG%?p=K=QJ7N}Qk`DMi7$Itp zNLi=>pTTdPc`8@pVtWlnp&-eLvRlTGlPTmMLf6Il3+m~SRCMZum8AqXzh~RZk_|*} zDL_hzAUDoePsjqp{+R@@*jOeeee<4QuWk*KZ-(m8@9y#&TkgllzP{7ju6>V>8~Mx}Js~;qRhsEhIx*ZOJ=aGAB z8BQxaUxpdcVjkkR=e;XRmFtfRGc&`fEcN~Lp3hruz@7yx2zA?iHa{EZe@61pc#w94 zisry{RUPCJB5$Gy+8`bpH6~@%*MRzP0uOmWlW#>uMb0-fbD+1MBkVu+8Vs|_eCqwL zw*ToWjz3QcOm|4BG(RtIgCcRQE+;0ZFY?y|Ntg_c5%F4a2dGfND4r z2rtO^^5wD8&{cg2dnCD6kiJY$SX)E5Z>6ms*YOl=mlu>M!*my8t{S@b9U=og%4+T> z$=fY&Bo=OFWSGy2m&EFSN?Fo-(Hyf^`{%HS3iICjO<&e@H`cgym4-!D<1}ryZd?bi zfBYc7Z-+SB8as27%v}?mokx5axkVOnO-=psDd&E{vTP@h z>|wwr#S@z5|MBz|Kv{L)`!@m-l2Rfi9n#$?-64n|(nupBB?8hN0@5KZ3ew#zUD6=Z z(gIQvzUzLz|KB?!qcbSpbI#d&uXSCYYn^Kw8sFy)DI4FP^`!gaREkvV_-v|LNj$mT zhQg$3(qdq~tFQ@h3F-{1(3CLqloq(C|L4IcCW$y+KH_gCq2N7uK3MIt)bZvb zN=#%}#c(!F?Cni~8J( zag2X!4-pSu_cE+ie_cCW`qA~F)u{a(v$Age!ISsX4RMXWqFE9D#3J!Z+4EQ5@V%H+ zY2vxLv+uoU#X~0W`%e>j{ZBI1QgNPm3GwKOE)dUYc`~xyb%SMS=2IQ}zEYXg+%I zEmxelh6Y(pHYSzW%uI|p8w0a{Ey$MI{(TAOvs&t*;wpr0->0j@*Q?dP3_C4y*x_#Q3}Q;kfjZCPF4*wF=9)^NbWWZ+e<}TereV^nQFaMbzms^zfFIMyqSd5&H;zs zI0<)0qd?F*%aWYT`)%D@9H~;YUR6tS{R}rgymbD|b|eNA&p*j3u>#~s23x`lHNW1< z;|{7mCgn~V&`a-Ga2M=6FYj|Rv*|qVzF6JDixvLBI{a7k-=!=S(~Xt#tNHZGo9@<| z>jyR3sp*!wl1IMhosoCLq*5*weU1ww^gVmbGJm`!^Chi2n=JRdB)_^qL1*G<2s#dC z>ab(*Z3sG=@a^uHe&I5ha$B6LuTY|MB3Z z;w7S@gBuMYL|DJa%^tP3(8rJiL5va@R(4+{KRCBF$%Sc*|ys!BRao zI~82ssbaUU9v4pY%an}G{z@icIPD_RzcHd$!R^3Th`pqv65g5oIyuU9V0x^g6opt% zyCg$!hEynrv^UB4Hv_)G+3mF5&SajZW9tPAs~OD%6fM77`GU~vN3fPQ#RXyABe)ZU zYqNB==>8xUBd+;;CF1=02Ic$z7QB{^YF?lThFGSo=9jP1X0?x=efs(`NM|{lhtvWX?dSE9}B?a9TJ(qb75lJ zyEA-%SCbJ?G%+`)%uGa!kMT$Uz+_Gvs)p$=c9GtM&D<_*KMs8B4yNQcB;6#RTvdma z4Lw>i=UACaQ#Y?;FVCC~iOBppn{QmvOe2LFiZ*95H@%}FOI@)bckT z4bu1KKBu16Syu(VaPErtdWv7Y-KYi9h~p)lRegMsYzAb4+7n81j#JIb&Qi_8Uojg2 zqO{<3&0O6B@iHrOPek;ZZ;AuZRHIxCl(zy$5lAj5nRO8 z`JoU6?&mLG`i6$&CitN4h95yhOkD1D<_Jzxxjx(ZwNJ+~7yO_QPWUcKM1Imp!T(PD zBZqKV0zp%|ZR|nD-_K4U zJmN`%F=sErKYpI0W+(njWQ`gS*3d4X^eC5JP*kh1;!a?!Y_5L|*W*b=0|P?820h8| z(~r#KWiiU;sm0Ysx6zHU0z1RVTlH8y#!&@aSEaNP9(`(RO7DH(n{FO09Gn|1@-T(H zVAbo57?lEs-;mWK3~3>X9(w`0K&fe06AjHldjWF+-xI^l{QP``a^K&t{M=*tHuw_D zFG=5lFnHx7X;pbYr1O2T%csg&=J1MMJOM7WWubI7m{yS{MyL34@aeujLnlcl5G@CWNF?e9l$DO04=zi9upFF=OL!xTlZai!* zRqG7{#z(@4yhy@i#}>m(5Z{x{LC2V5QJ(&&zxgNZp-{n}V9SBTa+7vsXu6m=I0~w& z62O>vd3`c{9G`WC8qqDIrF9paIy2DF@(K#fYUfk@HHt%l5i#(MU${r1&5r!Ng1T|kTX<*UD2g~zA! zPP|~mOAU4WZ`-_ZI_yqD6MZPd_K)w~B<=4!(J@tAS}p140^j*%#5imYnUJ-!Yq}(T zrH(EP{JPUU_UzP(Pb@3nb<)f}za{GChmU6H_HF=kIn*z~#L<{=cU4#I@h*>PO`g_M z%7Pk+U?RuBcc~)MLda1=VY8+;Qncc^-RT&4e)I#ZpGuO}HW`sUpW{*RtKaS+k`t~% z!=oBpPcj~^upFq{tr+<9>5~aytN`K!1NxH=wk-Zfl{Q;oY5wfZC%wq@L~C3Gt!?we zljo*4R~OH`PbQ67JSMrx?Z@+!9_#77>ckN&1I!Iq^6F*gn{5`y)@wH)1lj;zssDF# zS%33)$8)cGx@A5-o4McTnp%g&ZR#!sR#3;1r!lQ|d+L!MQr?it*xgDY7+~c<%#UHK z-}v=zL3(G(D!Nwe76UJDK;|Po?g8HEjCd?zM=5``t~@OH@9nOe=;Y+2A`3Vb z%hRnl{Pp$q6mB!72wzX^>UZa0GB@39Yk|#z_t_#~#q1aKbHbbHkCc_~;NXNM)IAEu zUT!)b?p%KP`-|~4Xc>dx6UaI{b9Z-lH=WMe0bJ;^k@A8zP*a-wzq2{vAMFQS=fu)y zDwF#q_KP)PFdrx&lKMo??FqkGWml11==k^VGP>1xS>V9+kWj0Ok+dB+(UW4Yl=X72 zl%OIHRaJL?`ietm@veG@{CBl{Xm7{&De~Ro$chrN=u%<<`}08EFA~&4lnlJhVH-VB zMC)>g1%DOGFIc|ukFMStUz9*)7qXW~XQBDKM(&|)7}lH0vQJlTVAf^k5I9F4tV~|O z+)qOiC11buwJ{kC^y=zrg#TzWQQ!<#B+AQvmco~duG8-`GlxMqR|1xIXR0LKYrkGK znahvcyazu@K1`Mt@c_0x@gl9x9R#qee0~r1^qetf1u9Q^fwZWXLXin^@J~W+p`iVq zvnwr{H47gf@EPUp5$Q5>mT@qpz`gXt@Z2S>K^5FO5S^MvFakWfh~G|D>he$Q{c^z>_+&htuPx z-M7qg&8gnqbFSwF|3<%>m52?zBmi*J4kMeCV#MNLHJ;-FzC7FCQ$mf0FYx zzj-ODt8tTf-}gs%XruAEQ#>JSmJ+M|8(W$f{;Pzs=bzqgV(wp42N_Fq3&-eAkWLsDpJK4f{Hn>FGu3Z)gtBNQrhv%l9Uq7&CElCILY7OA}A) z;;zWe`Rc{uflqHo5SERN%`%YfYgH5K=CFBLym%20#xTRo_Y36el9DJX>NarKzV-L7 zL<#=*8BFeoAo-+de@#ABQ^Oe=8p5WWJ9)${E}rq_YeTr**Lt*f_l)1ZhqIY?HhR`x zy};v_$I9T&$*Zor3J8*ihnIKEH3QHl_`{@J)&Hav-}fe5vMw(Cg&A+z#;lWTYVgMt zarh^7NrR<Aysta zN2Cdt|KvtNb$8%Us+x{D7Nd*E{Y=%X8>?{&GGObO`1zw=ro|NWC~t4?gvy&o-uD)I z;Cm(E=~>Um$G76v=v@CyC_^1&>QGr)A`+4nrL)n|QB?z5XQwRS%6$U&>o=)_amah% zQie`!Spcn#*zKiOF3-OjHG05zJx*s|+!uet2f>AHZC`L0tE#HFUafr#*nXnimm?P; z1eczLl@;M$52g#p1MO1jacG8yOYsd-0L+}6g?V{_!2d^v5i))LnVj<{=YgyV+eF%M z5ijFGb#wMuZ^*zjMT2wtAyejx&&Iz!0ge{dcbUTPI!9UpE(@5Z&d59`DWAC<%WMoK z`;Tm7|9at4ciE7#+p>LY*yD<8%2@D}{KWYAU&%p^zsVPZ3nMk};;+Jzeov=ajhDBS zWJ;#$gh&o8KDkL{cW>%mS>;XUJD_oF^rDHmIuu+WuZ|P{rKnziY05#Fi9y@I!~4=O zZEI)y4-H#Wy2lTVFiwMSAB+VEMkxBZeH)VML)=lRc#}^Hy=xgnO?EJ^wX#JIg%p4j)!$l6%!&IfR=4T23s-(AeK$PJFtL!6Hj-Wvw@p< zH2WgUd62soiOaH|2!618>m_AWRFsjwJt8ci+^58p(M9gme{5;VoPO>VH8rL8!~4u=SY)TTIlA2C<_|8V`LCI& z>zqcHjA2R9gMXhL_C{Lf_7*m7o*(RBJvysc>^*U9v8J$QyA%mVsm}jTO01B~t|7g< z_=qhtd~!o}LR-J_R7WiHant?h66e1k1>;c4h-H48%CTWYzOh2~V{BO{3z*QL9G)uK znXRu(*ZdS^^x;F@GslOltiPs99~2ci>XklKF_kv9wVO8K$&bz0Y3CxCW83_ z{{AwrjhIO9jL*&WCzcrA=kee&{(2c_`Y5Er@fxk^IVUV>`ybDOXYHjYP)|-=RWE15 z^7hT^(GgA797EEx4(?uxP6!rwLJtEwZ$d%>K5obuU(~(l9)6~s!Q6295S3A0f`x^} zOPE9rP;@7dh(*Q4YxSF%qMv+%@UQ+9O5P^eqCm%^N?&-QtsS@U!xZXH4YF^^rr*^|cKLr=H+Z z!ULwHU0yGNz4vy|Y|J&?Vpzfmp^muwfw1dzFfylPPREWX$hV z{UMMk^S*S0^5k@_MV~FW+f1qE?wz0pwq0`Ekn;JntAC(jc{OX1lk z^OU{w<*nw=z=8HuN5bw@9LC>$+aj`Uz?Qfs%*xKbel)Lrtt43;M>s9dX!-1i}T-ydpjZ3ccW51 zeZ}G`GbZ6|xe$Jl7{})Yqm5&cGJ<1 zck^CE=QA($$7}oxFwT(72oJv_@w_Fycn}-VXg_x}AgOJws* zLO7)Ela4ix^YTkMwCU>iAYP>^@#aoTB8Fpad{I0urD@k*Vx{8~%)45YXfj*AL2CDO{_ zmt{co(Q=D|-=%tHQax8xTy9!%LPwy|ZlT14KTJPo&B%$BSI^mKSM0%iY3^Q4%}>~( z7gnmvWV@!RGaWw3@Bi6=mnB+tj+UkFnGH6XP;5hk0T~$?DeoI>aI|-sOS4~hmHm*& zfLkmzePF3mpt|Mk+v~mu))LkHxyVx;P*i<%{16q~y27gQzrXiNn@`E$yjUIN9ocmj zFVC#WFDTfrE?K>f*O2IQ?xj>%YVnSrf5veSfmlJ`3f@w)mmq9$35kjOXEJYmSAP{f z-{c>I>)hfL*p2+P%U-=`$AnZdB53#vkFrt7>C6cQ&wyE5U1pULg1L&zG+@_bRXNeRgyg1cr(a^VO(vDZ@{1rk4MdLzPfW}6CR+1C z3#PiNEtL95Usc%KFJT6tMae0Lb~D_6>MY;bZd=Y}CVPwH#T`0@8`Lth+7}-&nIGOU zB^9x;*@EhO#Qoz=Txu#ApmIt-G^2Z0lZV3QHG@s*r>FL23T?Kfr5S0b|Va-;ZMobRHOW|6G3y@~I5U*TkOq3E!X6Tm z>V-Pj>@59w$#){JrBv%y#Z&R5B@cZzf1kw+3!{pI3q@g2t{(~X>&p@Gv)|w7VtzyI zRtA8I#b?phrI_g*@GCQ6Q?}qLZfHn_rrlnE-23u09~h?;+R@G9!%fM5DTr9(jCl-A zeqKdI9H6&)rO$`zoL4^;7w3Kc91giU9_vwRa6Av+G=o%PTCNWnx?V19$a~0{n$j@F zV`hzneBJSAer{H-f5hn5@Jo+qJ*4ZGVcVZV0j}|}NE#Z(+v-DYwDiuX4Yz2DOo<7w z2pW~Z<9=7vjKe~0hS6`XZh*s@njo8x8A9^H#Zbg)k=OrfdfJ~)3ggdfCg1u$MvTHT zim1q3?tg#5`-)vLhh0bW^R#1}gAX3_2&TLb#*LGmhXu4$Zq&%|MNrXg${NG8v)Ja` zpUm(fD!Vk3j0=H1A)nqm-rH=9))Dl`wv0n+R>ODSYHiR6655lDR=vKG9_3RqB&swykwW>Km&C-95Xrp7_;M*Ue zvU#LI#Wt&2GakS0xbwCXEB)VZ=+#3gJ2O+UBlkG%I{he^S3BGD*d>!2LTo7(UDcPa z)p}-hc$1vX`>l?0WxxO%#hB6q@?5h#)AsjdwQbCdlepdcP-SrJgu<6 zeBg6V1G+*7+&U;}oT0sQySNPNU47;{sf$Po0E3UHt;<|C)!|7HLwu=ATv+(GQwN)B z>gy{$dW5q4G8rC(w-Uxj%TG0Zy~2;Y^N`Kq;`PV)_Fjg3d3Qb>{Xl|b5=F5Ubyp|KfC7yUCYUfm1|V~9x-WR3LN6lV0q zF{m)Jv8{FDNv^e{KUjk+!ANw+c}(seFqG0tN|=D79t=$sGKU}WD;5;+b9Fh&>`8?EC?A5A>#;|d*$mV+Sb7sAxTci`-;S&Z!lY6s z)ah+I?Bgu*7$sU&$&!bVJ7bgiSg#`@VztM=Q*=4HFJocYli*hbC6YW?wtkSuH@0wx zF(Sl7NKwa=^b3EGW*R+7QKxNRKJ$a^H2UCMR=mF&y7q|l*+v`XnNV6Hzm)_86ZKTQQ^%Sk;2S3wn^{!=&dq-`2M?|*>m&xce$jaso4f; zBB7J-I=~+=0hT$KA)2H}FC#>;0cy^&lkX+@J)_rmlb*f89J5XUsm;0l_Psw-Hd;iM zl3?0{+J2!066)2#zZ*_Kcm<%_ZXm(W3i5p$t=msQxY8LIa&>8Iy)!yLU=ucL=FFtX z{+>X~07uaxy#wiroA4?BUS$JPo~+)JRZ-Con-1Ot?$Pu2WpcJmtm*ex;(jTl%F=!? zdzQ0B!2Wd=+g<@)?h8y;KaC}6Y{uQ}SM%uD4}_96nHBY{lDD_Xl$CKiZL9A_bSrA8 z`mkpj@+%@$+%gxZy4aK+V%eJH>S?zhO=E(;p{CYrn#9Ndca-aW{0BJ~7nBCa zSThxMn00Xo%qQ! zL`<#j`gFejWXkZqq>mVEEu4UVi@IzKF8gC~XtrC+U1VzizrrTFxHu9NW=I#RLyw>3 zefpG#(^nz212h^g^B!#2zkqc{NQt1HB0?4r_(9)QQWzf{l>(SM$;jumQd{Dl93%fjy<2%jWm21Mw^T;v{gd*e$UsUZUEy zoTH`s&p2t&|U8F~q8c84MPdmRd$eQS*C@_!vkCaqj1# zhY*ODum*GT^Meq|aMD0GWWt7EcH+ps!su<9ips5(D|!FK@9@|z6rJ@OU#^LwnWu5l-m6^ zIyrWjzHV^vPV;`)kC&N%A9LV!Mni!(N%8zlF)CaXw3mpONbU2S9*|pe*bCq_K6K}G z?m$f})sOBrqoL9e3tT_D?ECgxv%WE|LxPUG%AS@RJzL;Y(GNMUUrdu39sL@5JQlz4 zA3h`(x|zuh>z>llG3<&E>CR!?bh&!e?9H?@hny_$KXa}aSFpQ(Z{-rIKu z#l!73v-01N?`5jZ^7*@!?%Z>~PvoHG(vhc)2Qum$^AHQ0T)PBO5Aum|2OxGQVL2I1 zgAmgKrYsB_zB0{2 zW#2cAl&y&YrWG4`lzii#Nl)Li^4BBBR587GW$0flxk~h84ojc85JkzyuTHsU=(8oV zEnTO-=D@Tb~4^Pv~9*Mm`n3WqGm|WPrR2p~e1ZuQ3i8`0J z0~}>PeZhO5NkU5{7(eLx1&FJG2H$%-9!uAS!1_7<4=uj>_4;|`7cczWzj3Q2ha2Z+$GlPfa zL@p~%G8kO+!E%qnPp?B|=5zURNW&8;~&hEz2lcRu_^ws8z)qjn&diKJrI`4lY7>c+Q~^Wlly8y86@Lk-lLYR zqz;kyg=5jOQltZvFV>DT)~r&to{T?88c>1_3eFpgjk-^t_f;%i$s3kGYB-_=pcT-_ ziF5|16xmh1(r+dB{JF-w+6v|jDd}cpy{yah3&8=U=RxhfoN{=;;Gmenm1!{UV4+#9 z`lD4nw&8`a<^Wwdgw{4JtZ3$w)DN6(AS#73OQ5Ht~GVQDDt2 zygeR*BWi4XJTATOwihz(BFdv|%}}V2&LBZk{&Km4gN0P&_072F$F_cl+QpuIh#fOO ze7N!{H`)xUqD${^2V;#EO6#ST-O|CEIflPLP4u(<`>&=0+*mO^9IkODLkId<;R@DoP z+C;@6=DStfB!T!{dDQmFu^21bA60M~Ntmql%P=z}5|Oxz-sg0e-wC^gio=W3ka3pw zs;H$gaPXfYUhsRxf1lt%Rnguh(dLz3aq9}(A-nlV?4*b5#%l5A=#$N;br><1$4ip? zTmGLMJJZ$~_{GC#?QfY{zTUzhd&@XSOXhv&@+VeuXb)dgiZ^CAwIC;98ox4|6(gyD zjy`_xdTg>Pa>zs^$L%Ny9EEM>SH}$MNyPEGaY^w(OJyb|?P=nXO{yr3ozb&-j|Kx1 zz|ci=+nu>ZZ*`5*mvX-NV#D3Hbmt8Z-Ma*WPOiA8w?yW)>m*=N3G;T`Y`e9{A3U#F zO>I8D*}rz9GVg8KcWv!Ebafiw!Ui?Z%H-D;=_!BDzGY=)<$VEr{iI^_@S~-#t6qPh zo9p}bjapDJ3Ci(s$jkj>tsVRRz01(4xf^8ZMaxUXpF;1_y-`i8D=o*MLByP(1Jm@4 z2tN|fK{iL14s@%0Ys5P|UOxCufbd6k7+%Ya>|8nB){9$DYlC8Hx3DQB{rWgC_UF1P zMrwX0i-p=xv{z5+h92pred?#^DrXp8<5ctbdpHs1{Sx^X%|pGCjfo0ub&4(BR(()) zsSphSU=>LX4I++p%V>`E>m(4(fKyNc(G8{+mS$mvl|KS(9;hjJYCX|e7+U{MmO|fv_!d-a zW39fvc?q(#cij$tsAWlbml>3J<)eW$ej$yIEan_twWS|4Ws{j`XMa4F`(kM!(TKvSz=g;mJUh8$fCzOPjMDH(f=0R?{D46TeOvZAJ(n~c&75LI- zFnLKkd6w;}f1bP(rXCGU`SZGcpG?WI1~8?+i~-hzGJIr(WA}O;i9L9C^;!AfmiXJ3 zQq~%N-1+I25;sDGpvNV={~~#fe3Kl#9KMy2>8~ojRa6qNRqN6yF1|3Ov$%iRV%xeH zQ(9P&F~7Za-nvaH+A5f$YBV0s+VA@%I^?N16<%tAmW~d>`GsjU&#+A;o@ib==_Ck7%X4K4F#!_L>$-O3TTLtjlnfBLgC z9RoqS<{lTA72^y;WmZq#%)-n8Z~&p;11ZX{>y72MS4+;Hug@d0gtSku4oi(%aU#}# zh7d&TJslL~Kf#w>V5dThI*r|`Hb+kPzVq$JV|jC_@e#V;y8LEqxVc>)gh*aw(cYews^|+&)u1S9uJwD)yO*CsVC@h;c6Dp@g@89j{0HDTzlLNI$ z{d%GyVln`^prZvi=m-D-JjLL%CEqM8&ZbzXFAG$zmpel$f&YL=bbIT+YbUq;1toBU zpl7iH7UAk@Q}PA;p6)vJv{=8~A9x@{DVwg&1Y0b)^rEwg`2J7{)i^Hp!^{Pb?V>`& zmk<~`%pk-AtGNN|avkP8Z6anpL1P*6_ciElZ@snszq)*{bdLV_M^=>^lZ=!sY$gdQ z@-!iofG_2orCL@@?T$%^pZHXIdbjIZyp{Sh5fqyb)b!M&Ih5;X^om4>U94*8j~IQF zjR2}LGSf$uQMuwPCNQ$azR1%ZBGMtspPqFvnW9(UakRDFw&qp3b9Bs|rdC(6E89U+ zwlP|YBxZx$NXd80nR0vqA49pr&!Orzihc=Wg}7%jy8wk7R_0@LZ8B@XpyTuhV>%t_ zCLMaY=ml6k=93ans+FZyD)>kBjpf9sXhX3#fA^Ju}EIdS|%}|^dRP>K^RvEVTwWh3}TI| z%_@v}`RKINf~d7Yp1|(>n4Rqho7)Fa|Bn!=qb73~c%+E^4H1K+igACM)YMttOEmzr zRV2QDMFo#z^NAkS+uzcNY760rBE%zM7e-=Y;&jiAl#n$F=&y7SZud~QHT~ctBR90R z!Fiio^U8&{+$XASu04(fz5a*zft--)XjyF5xJ1SxSHtA!JE8Y=(r1O{c;EFxOu9w% z1UyN7A3ryJKBR|<-@#0$zh?&{cNHl7dRI-M z*M!Q6KP3~DKqJct7Gq$i>5sR^YKT4(Ad&vj>_;r@?3Po-Pa(2V4gu4fztgP*7^wO{ z1wpd27g~<2e^-SnCfL+uQLkX>9YayNi`y0lUk!p^m@ZBVZ}59Io8|xc>gLv8U_7sSm50X-1xGUD$%DmW0xQZ zqC^Ns&wub^^sjryfh^6+NJtty46)X>@_1hvHj>WJClhN}1kNImjOjf%%iR%q`t<4J zy}#-H{>Wlfcz*95xO`4qk$9Rs#F%PGP&vUf;b8G5-TvVhS-Rlv1nE{8tg)Bk4OG2m z{kL@=Ju@`VtV1N*I5IQ~^5ky6FC0gq{fh zlVjtaKqhqj#d@rqtyesLQY$U4hKA&Fa&mQxj?fW?4y+>tLa7y>0C41n|4{H*EhpW90QsbeveE!DOY;0^*q1;k|;ZU8o6*qC#Y@;l$ z!^!!vv2JodzbM8AZjRF>iq?JMt*!yLid<__1~@rC=ZVaFY44zCOi6OdXO;+R6oLX+4NwFOXu0NiCQ`GNi%nFxyXAPVP1g#Q>915~g?r;^*bpkF7@Ov-`i#&$V`R?67s%=!|*tYUbSyFgSB_$U+$$ z*mSo~GnRmShayeFTZH$;@ERB(osP9GP(PUSr07>!-vvLN9Y{qngun#Tl;|mNQ8Wz< z`eAJ;1I`D-&{lz<+eBPc;QbO4NswSVh@6TF7K|tpnKp8#WJ-UD>?eg-wLq)%fOZbc zaUEnW^@0~~*WN44R9IpKpyO@Cscs!!Xp16CTL|Sa=Yl#)6DjP zgP$~;t@+PDZTmF6^0!9pKgxxTtO77KFne8#x#cPTow~mL{q(ki+OEo6t?zeO$dcBS zb^(;o7O$s{qoCs`7Tg;5cz zNPuFY!5E*?XMdKt^dSCz91Xq{wQ|eB^uWD(mwn;0^d0>D!L#&(!wXVgD{RD4gWNX) zY=MUq!K_^WnE=aS0ft?{b4eJ}Yvbeu)Z~xsf`Z`BpC2|fHhTW_L-&9NzaB0oPyu46 zGv%O(iMJkc%SVYv83k!i0TX2>ko)f5KgH1K$}_=7fme9>(x$P>Hl z1KQX7Nh_D9_sKKo+wdi~;Q?GF5`t%g%_N3UL+q{;PZtJvD4ICesbwyKw1lS<@y^@T zWFHe7y*H2U4t_zqURX1IEZj z3Bh1D^`{%^>Gjx^Hcu4}L2q#HU_j?jsUWtn%FNIXqi4FQD|BnS2-tdj8yv$If z=K*2Z{HfkXrf`Nj0^JS7Z!Y?dCKTI$H}OVir^V~dY|*v7o1J70HEVYuzOk66=S3GA zC#!^kw8ChY=^Q#!CWl0c+RAIZ7Z>5~DQ+_!66a-iBPl-jUfNiXz11dc+x$XH z=JK(+V^sha!gudem{k(pUcm-}_Vd!hP2q8A`nWfYRcsM>Nt|>{z7NA>{rRiytgSzF z?w$VL`s+#`uauxIo2w;Z)EaHV1w51ldkK42Ji|MuwnI#suFO$m40F0<<@y&FZbn?ZCwrL>j@@Hoc21kBl4;673A}sUgmGlK~U$zts-n`Y)0S zV`^(l9I9I@r>VYuJufS(oc{5?rYezhCTPar6kph$HnWpZXi-Vblbb@Fe0`KzCEI?q zrlaC#d`y4Q`KG~Z4Q29mw+YuS=2yWCV@gqr4grs{ku3dR<=s%FQU&qwi4>Ksq*~W@ zTsz+DDbOop*9`BvmCMB>s>LXDY`-fcBu19;&SH?7!tJM5Gi7S(CE89Pz8OB08S+sx zAs#tV9dFU0FId}@q2D%NIPV-2QI~rv@uiuLg{3I3d|5|?E;cJkLt!+p&Vny3weh~z zdkr}`27EdST<4!_ef05|1?nj>w08^JjHUQUx|d%PV7%6R_RN2Nub{;TWiq}XCn2Y) z3ENj9CG2soLKLImbW+MkFg1G0!cFPpNiYYb?9{kO2gUALN}8YgL@Sqe{1U%wXNYF| z#eH_OsF7}@O4PtzVXi+jPe4<2emexAC%O&X`)&43M|l~np(0#AiFoES)Dl-K-IS{g zBD3F0CidvRq)@8cN!?!FA1V29)gWxfQ%IqoEK-)kSMsd8!kPvBftY{C;8Udz_C3Co z?iur|`Dr~)t63pj4&NAG&ZTchyXXsmg&zFoUB!4;{xOz_VyR#3FAO5EWO zuEgFq@1+m_Vrr%m-+sDF8=?IX+qUq+<6j&T3meDhl;d+KfI9B<8~6y-(vEK zcR?FLu`!0Wt@4g`qIsp9f%pMZcA-7Q>z3=gq6L8-$Q^g%Wh4UyI({!t&eRO`PqMOb zK0x;X-ktW@K>=$qlH3XC@@f$joXNOM1x4JHBsa)GHjK`~lqr!YH6`5Ga?Z{Kg%e7& zn5$smX7H&CIee9|`@+ah>f{Q>u3f$wn3$d(&UrwI(81{_2$^GSCsewZxGOTt7t z-W=JSGIYw%$)VNByqO-&+zB`)Ae>u71UHy*&d6Aj4`b(w+PREc3P;H_?#DEp^XOH0Bilk-2M zMxtw)#ZTPj9=P>nVkBVFC|YXC#@mq!B}g-7m`)|(8Q8tbAnC7>wySb5*B3a<3&0)d zvXeTnzzC)#WL7x{%)Mo3r^(3Skn7d*OO}N#q@xJ?v7U(BZ6VD%P0}q6mfS*k`=N0V zzL|T4y}n`L>B+Z0DSZiM2Xl23GeG>00S8-9I32;LNPI<6$8k%>*HY&L^Q z+$uMBj1`%~ zb(r9(VbHXA@U8K)W@38vakIzGwH4Vf^wXM&T30T-p5-7Qwg1erj6{qyk7k&gdv|aN zXEQA(L-|u1{g&p8_|g^wP8r3|vbL0Wb%c?bLi&R^muxn2Oaw)^q>Rf}5B^2gF$T&s*hgA{(p)WgPqlJ%a}?!#PBGV`_2_pe`9RUUkU zc?jz(uRIkQ#bJYe#t~%7On`~iS;qXQ(d+a@lo=@+M-tY24Ms5b!+z{&5t-$|=&+M) zqyP&70|NmkoO%Yy>%B#NO(bBdvMwcHNb0a+>E}O}*D$mJeDjs#wJwC+n zB?kv~=p0T@-QW%lA^gJ!|IQVFhv^v1{3#Qf{lB*=1f%8?!9js&U;%UCfw{N{^cT1* zIl$oCO=7_~%z)5BIiTBRFa`}*=qD1c@EX3dii#(U=;Kn02UxhFp#i`L3YS6d0C6^& z!1I+cvSRwqdtZNQa7L=ITaF6!Pgzge?dfSyY@^ySh)}8A?x~XRWlL9i@)Pyw($2VO z=u3UgDepVW_oDyI_y5i7CuB>pR9WU$$>%4f-KsCw7>$$H!r=ZEeurqCAyw=N;RK#! zGTi!A7lG0D3#dvF!)`N9txDggedWcdI(Lp%xhT2_OmhxNCEU5e1)fS&t9wQT^?aDT zxezwzjhG~ZT=?Fia$%meVZNc^UTfzg5}8n=;q_N{aYIr>-5odhOQ%(siM9!wvcx=j z5M9`Z4~6jhZq&2O8`bli7_70J3PV_MxAM5nv%M7b{IL7+QWH0JaxJ`mpRn#?zZ~dh2Flx=f!BQ}RZR$?uC8*YF8%3zd}lge+m zD!Tjk^pL1dKpPnwMZWW`&sj%DXCN3y0@$WUt|zjosRAI|0E|Qn*f|W|!jI^7uBWiZ z>9dIZ+`lY7(pc2?p}b^>tnx3sT*O!a!aQ%G?LkUuo4L9;MlTlhxjJ8*VWsK1_d#qQ z##)o|fR+^~aVt(oUHEnhKP2mbM}Gyq(|=#EWObm)1-%icEym{$U9|YAK0>U#xjAb+ z2Dh5Bgnw~y(OaN7_(t&e;`{50H%?_4lnZ@RUK2lmZ2q}tKc_35hH$=9DglLgGjKk~fb0%!o{n{*MT9#y=Ox(m$^bSrpL?2LKwfd~SOWpM2>yDqNJpR%j8(Sw`*5hU9I)(S-P+~ zJ%NyyKsrW{%-Y7rX;Io=Gr5!bDcH!0K7a0~24dX#OMZH3tJZV|Y^OcsxY^Xm(!&!Lf#7jwB4-Eu=_2nQ zB9ZtWt|A;hlU%Mbp@gU+K09-DpQE4H1!7a-(LGZ00YY3ffiul;uv{g3msJONJiCiM zyLL~#W2@h?E7W@no1DVgL-^1G`t!F2&LcGK#N*XwF_dQ1EkYop`oc`bj-ZVkYO2&#{l8_u9We6QgD zopkphV@pqfiG;vH0OLTfSAd0kZ=8&82A5ed-s3|*YEztY?pVrRn`(Y}H8LBYNp@M4 zaz0@tF?ol?QAg3KHhDr(%k*8D(B{CYB4YF4PK`3GIZ^(^lF+BO`KqK0pGbt!%MuDF zGs@-^EhS~|KlU!nO|W>pI;2!mcd*MdIv0?CiwHM_x6)v##=(Am7}fVL7A;HuU({mN ziNS=lf|Q~(RYq=X^DmnP0fxaN`NUSjpCy@Hvp6ebjPmCHUgl)>t#14CmpTwn{Jx|A zhGGFRUlvg?xVsC2DhetLKtiJi5X^d{q|`@!W&r1QV3k^*Z>sQFZ?CyQ5m9&|W`P`| zCGETQ$H{sRf9JDB+1OyKnA7vikM~3}-CwFB6Qw%9tUE#NT*Jbp>3aT6ljP8v(C?iz zGb*X)+C>w6yk;`G#DhS(*j1E)sk&z-^P1Xu=ly@aU`ew~ zzW9)azjFK(l>A-_7i{+hXLJbV(WR)yrKPFBX^H@|fF466r~?+&U@r{3!eWD!^9^CN z=vP|dJTFaxE;V53dfz=AXdXy9MjR zn~tBCN}VmMlkv?sb00s%G2SbTVD2yK(PY$J?>xNV>$6B7m%-ym3Xr9(K4Pg(Ri2=9 zja_x&a*S-BGGkNrvk|dW_ro_UEl8kcVhVYLC!QdAa~OkwCSg>#%hb~s&V39?78Si1 zG^qbunE2V%8(oANYf!2Up*8?BgAgiVLk92}yeDaD{Er}O!`Ks5GBm`d3m;W7ss{P7 z?gl`KeFMB;tx>j{;MdM~pC1y=)Gg~kewr%gUI~Ang+%a?Iq7J8y9Vs56eaxXh4JO) zy*#hh6oCeY$_%;nde13^$MQ}D3A-803|37SaxQCp7aKKX=uc~imR%KO8DXZ zB-HpAFM$ev1-2|CaS*R#fFc7b^s&iFIce!zu*e?le#QFlRG^Wv`xRaX^oaJegoueP zYN9)4^GZM`4c)|_7Q&pX0!BfFw5PajB+pLTJrUm1+P3< zayK<5E1x81D204t$D)iXcupu2N~3CS@ePJ7vFi$7Rix za-0R*W2K|<8glWY+Jn_Jwb1%3Y&E#yK;C}iE0Hh~E)#11->^q+dglC3U%&1j&)vTF ztW2&!HlGMc*4^X3fL*vFxY@zZ*H50@gPbmN{;0vk*qAgR$s1RoX;m^MK|9p5d3;io z1`89j!PV6jCU+$j&Ckpzf~p^T=NwETI8kqvu|-((DZ{Md0x`0vmA#8o7)`JO-Md3| zO$~x^5*}{R11TGdgOt_(Nj^yMDv;_Pz9H55VAG$kMYNPp?$b$md3j}dm6h1xy&i$i z3u105UQ<9rf=H!zFbk~Q2qd!t@K>;8Sh%nyg#RIZ{X5m_T!71sjida&iZ3j%qk_+X z)#r(5%3-U0P&95CgAijNX#@ClpRDN%c=0A4%jVR-?ltNXIc8xiHkq8`0IV}0AM2uu zBT{lYhc%~&`4~S!n(s44FrV)83*_?%DMly6V0GhX|L;oXJ)y8H6`PwwpZrsg^dj9E z4ZeD)whHlOc8L>cA7k8$v2FiwBmU)0Nypw(N-LDoI)gA_ilTR^_%hh0j!6Ng#JNiJ zL`F3o1+iMWpKTm@g@1h{NS$+m|9E2DlptbOmQVn5AZ#iXfMV0`xv*Z-z0?-M^a>_E zhIl2|p2ZFf5`hx_rIRU9!-mz##WOP4Jl~(G_+c^8@+osZPkdU9Zf&bMwAv0QUqwe< zE9SSwf86}NWwC8l`@x$cqWfjzVhT@*Yr%u&19B-F8x}%F)nCV{_-1D_v%8FOW?G@y zDmSh$mhQiYrns2?y&}@ff7fSDPs;2dIeP_F8xvIwVxGYMzT+L5t{>8N52v4Ax!K$f z9{)(}7!qW8-4N7;4fOJW{`|*6v_nhVbr-=4yM*RtEqm_bt zdK6%P^qjHbN4Oq;M6AKD9NJZ6aEExcL(T!0x-#qyAsE=fu)mOBC>ugV30h#&ffk!7 z16*Q|JH?fGfTA$bY3>ce=KjW7Xanjk_f}O)%rL67F+ZSg z+X#eg)sWsm5ADU6d@3KNdSEe_ZCg#U`f`i|_gZ;MITTj>f)eoq`mKkyn5~a6wAI(x z>s8~i=^PpZ0x%KQ3z&Z(^E|Yw`7j|TXcEmVEf>N4fwywXg%x2$LoR~RRGo9&OckO2 z&wnanXbF)aIE+isXJEiBfZ#5m(O85j)ePby0=2OL=o(Kz&$a}kQG~rd&m?w)O(3#M z_ztHaLp2d@A963tbOTN_!#iL+kIP0S(^s~2qrssiEjB>jsJhL}VeWNn&?8GXE2goM z?9a@!L~jT~9hBe2D6$Pa0Bm@pu0EC}QfhE)Nd9JA_&r=XWyV+7bOHFCCBU_T2(x$u z1ppjK^z6`JY-}tR&J>7uqc9&XSOfu3_jhOL!32I~r~g@NyyG`=ETantZp%AP*L@3* zO<$VSaz>!>xUygyI|`(KsIyJEzd_3@|M+nynLs-X?MCEeN&h(nNjrTW z-h4ZZA$#3v0+WVaCt!RX%ohXt)7uArkQz@^abCQz&dpc(1f(6@W1+pvv}CK2RV_MG=kz~!{eZ~?r14NGmr3ip62{3uoJ2@k0I;V^@fpGn$qKT65WG% z-PBwDp@iaS4{PZ3;_NT7y(c3fdr1*r!+%nQp_tArSScx;j)% zSi#oz`qn3`&i!{OI^IL?9vZ@#lfuehM>ODt*GC+B8&$ASB{Hy3=*dgH;L*jpIGt1elhKjQzD zDirOT5n{`Kr4NT9flqIoQ`m|xshM0hZiJV?f+qA1Spr2ZnBiokUHzgbZ{+_mL!Qg7 z>irDVV}(p982*Ig5*Pl}DJm<9lur-0hf-oSfrPr!nYsxi))znd+&!3hMF1s{^rbPX zuASFOt&oLy6#?JBaX7eDA7(>x>I_89>kcLbKPD$bVG0t($H%Aq z{P~czSn2qX2DpvhYacyeBfR|N$&;cVwuUh#G$xe?zBDKIw_C1oszu%86^vO5Nolq= z#m(T5c9+ph=W-2W;k|qFabt9mrN`E+({qtX43Ws|uwgN89?8je=DumSOw5$m4D@f* z#huL#9N2cpepGjO8b5czcR!4sC>kS6NLuD8{-sO)Z>g$jQj6CaylLGuh}+kL4aVV6 zWiH#%A>a6htt&JzR3OY(>n6n*x&B%7f|GEvXm1|UhL7wl=;*@@CZV(+oIREMwqh@> z+A%3V{g3C+2m_Qo6|^vlq@`&UazbLm@C^>gZUO7hbQ^)DB(amZt#0@efX4!6xeEpy=i zdUrEDDss!9{bLld=5mD2yAa;sVzx)>agS6-9(=KT`YcgOc=je!R*;%FF;02Eya=mm zn+$_4%EVSU`TIrYe4YS3gLuiMQMNcaW5(B`6`@0dTmqjD7z)>9G@^~r4Z})T8Huo| z@TD4uWlW4Xa1BB#2A1P9<5)H(!`D`g5Bf{ka8W-i3oOS+Dw43D7$HB98=UxMyTQp2 z*&#YC!$71tA%z_FnE=MPGv;8^?bjt8xxsc;`%iyu1ME0EaB6|dt@#1gjTV5WJ3&rT z{pVLM(27jFy1k>Wuvd8ja7sS1jeZ1dxmmaa+h=WHi|XG%?Su(GvEHaYy|m<@GA{J$ zw0FF%;Me$a{keG1yez?!6a2As60DTc8b)JPo;m`mLOnUhesJ=c`RmFn+6lQ0M6Sy~Qy3`}ee9#lVaNkow zM29^B%T(Z^1(dLPfWB@KUfzV!1t)~dS&T0M6fzIv=?{TsuvulH=!8@JFl#9xpCtqC z8QQ*w1*6}-e(ulHX$-q+w8)&XQYH?g5bDA2rb)7VlT%X)j~)rI$6%qJkbg6Fx@0P( za2kM#v$MVFGO@5ss%xI`{$`LSreKZ?WAi#EGc(7}59pfESAPd-)4%Xw5RORD66%8d z1mPjB7B(is>^=s;*L6;Rsn!8o3*gJNa$|t;+0=@>K#c~JO%%=9CKmW+`FABR016Sw zIdTJO4fp*J)}qa`4`?vAgXtuhDb>>5CJx(q^a2n;eoCQ#vCSgcGyh)5qTBAL!upL63aWCTh*GQ zo1;W>6qjEYWK_|L+dc?#I&iVy=Bg`rPSn3=A2_7<6OUx!_0`bt?}7@L#Q4P3ZQm9& zwU_Z0iucR9YT~68XlV8DkNv(GcUf=LS40DLpmN0b1WLBA@M$=~J3-91%F921Co!Vg zfsG#M4Rs*>(sErdzjy(?plS{$Q!Y;2*;xQc15Jx|&=rFd*MKg8)aBxYj$mlU2qoGQ ztQ(L@aaijWUa#;DZiKWSa5G=HZ9Nhc6htEj9~C1bBe!*Po%GaHFW?_;hFZJ%A~XpI zyh)4tvT>jc64!qr@Q48g20lL;ii3Zx2=(Wa+}{98LVec-{KpB)|K7dyqE7d9Zz;nwXpB?*++8Z}u3ToK&EFdG}uI)j0dFU~;JwrB^@ zjmONF0G?!K11L496_3`lD3H~Uu=edxJPKdvEo(uQPs-VD7L`pCI+V(A4Y1&;03i83 zJgf}5DUf~x`zW=zI0EhwL^X$uall~g@vB!{K=ns10q!Mu&Rc#Xq5movr28~p4ahLT z#lk0eaE$G*#L|E;Um-r!%-kGNLjuifyU_DA1WBrcuO}9f;=&>fMEE<%umR2f_3OWL z3E&tZ2s4s03grj<3M)e5(ZyGRRZmXU^Swb|*87*tGriliNiQo77%r3_sbwjye0V=3 zeVWH@Iv(Ie#dgK;rVqd`b9Mq-$EV-Fe}7WH(cmYpEkayvcjUCL!T4N}Ax^GuU?3P= z@`0e|2IO9QM=8*e1ExSr2qt~=dw(`vMDmX9MWAfoJaW4zhyhZx_rHJYhChSND1Y}k zrr7C0Sgy!yNK zyGr`SNzX||MPqV#XlxMeH}E0xi? zV)TfI87nX+i3zzrgg(yjFljH7k)ynLhtJW?hVaKhyG>rMuc2L$Br~j%M7>xT{%`ev z`#|N~5>a<>=1OvnbZ*auh4l_S5%#09oWM={`1V~}@O>;C z{{0ii)$xq)#=Jz3A}k+lw0f62|DyOg<3mG|wzjrQ;CcwRHM%roq=-(o6MB&)WoHS% zPiQdB6i)8;lmaWp>zw)zm-tC=A`%j6f7sePI?nGLp}{T|=P-CcD<;<1%RlfMtHxxd z0me36r$ZVhZARm~8mnC*JIAM5_Wh487gwsCwMm^AwoNqumJC*!vELpz{qZo|1wTtk zP2`cWVqb1!XqcsvdCRjQb2GB|)DH`qj~jz)1g;Io$Ae<|c_{W)#=ibSNAvG5*S-XQ zh+ozz-&(Hd?<*5K3_kiZox%cl{?$ZhM+)kem=`P9}7& z7j@fZJTvBz^n5+II10GK755aNLv^~wuw-!H(!WZw{Ba{Y9OH&{e)#ER?$qnjjaM6- zKpzMW30b`23|pi=U*zBUON$k7Hrv3+tNzii0B_NS{izg-)SAEN&5U!#U!8ouq5ItP zb!lhm>IL@#19C}5j_88%X>zzPD%QI`eV%gf0%k;ew2{#-jpz?7k1Id0KMv0VJmWyX z6<0K+u=gS_(vGfC|E*K#9DL6%aEud2jgAS74^CAKNLpBHj=y~6YI)~T>wQbh-g3tU z>fga2zj1hPH0!yN-gUdk(*37R@m^zs0&VTc<6bL6B4T3kwMVkDGb8kPO5v==y}6^S z=C4Y^wCg>l_N~Xdl`NN*$fIJS_2M5jMYCp?Fg?aA!@2ElRfGFSXOE{ZxcID~HvflO zeeZf94MzULmg1pDS)XhQ;49-~I2dkNlVXA;!Zh1~kCvF31LxJi3ID zQklzaG-u<)`KQwo&Kwww#6Ot`u!T#`PWUgT{GVrYi^D6@&wGbDUlyx7Zyx{q*Y@~o z+2j%B*-#CAZq}Id*5^opwcY9Mv*lmElGF4#Yv$^8It)?@saq}|=&_a>oqkK4PT^nq8r`ti8WroN5PNnU+Y?eu8i&QW8$TWZ(QXorDM(qj;eNl zY`Fy3k89NPcocVXcN#jj+Pe+g919lHNSo!<4+1^smrc4CvdyHnepqYwoU;1x^PWX+ z(44<|Vd?Bonbo@>)LW6dd(Y$5w*N`mgM+f8yB@EnI;eQonH$dXJFC~%hvX8@tAAbW zso$|(I{kUGC;3QTA?{${`7tmMk+1sy{@KsFf%EoJ^j%|>DxcFp@AM^kvZK2|4-ji_ zyf)Pm@z`p4*!q)?YO{&ea!r`>;pr>I;-90n0*)w&iDGdK?Yesh*G`Pqew-{WE<3Hy zK4x}3bn&SFXl*LDa!c50m4b0{kL_;#3Bj4$7I}?Jv~9VlEr!_X!V@d!eSsGqE9mSN zXE(&$3{RsmLf993%*hC=cRig}7MBm(UmG~jH+rCUv~@2|&xWOlgd9amIT>tG*11eR zoH|E!<`oKl5EFL2A$8c;b9c%utX+|PvZOoZ4z0@>jg##brSS18{m9{}&ZeniAMOnk z2{)R8s`GH+v$e^@;xosI6BnD1hQA@5|M@h6M6A7<)Ud2|PE_zkf7;;3JCL-WE@%fA zHbiqhCVBIVtLmr(#e%hVB12W%7}(2Oj^0=GF?s@naW5)#`Q20WU#mW`&FAwu8S?@g za~+51xw{+4D&@+LR;4XTT>x`p->jF{o8EtU+oO3db2Zfk0zsi!pf)aJjf#zGP z8DsSgvEIRqEW4xr4^C*-d)Kvu^W)lerlSNOR5KraV>t18p3ZN7?lv@3Zj~$ZUtc`3 z1d0Rszdy$zNo8ILI(LqCC79Y~qpy13zHuUQ{-^571mW2CU`}=w>k)L~AU2I}HKlDO z))v>#&nzxR?)SD^Sf<~piJI;`WAv2eBMFb>F9{V@eWHB0RcNx4Ag0w?={Xueam>RW z?|R21?4^maxsdg_9WRrKLRjRchcA0-iRv_QzU2tb*_$gSq7~JXRgv2T?C+mnqts@v z6InJ6cilNWj%LyvugH$sa3D4_m3aCii`|RT#;>9-;QyBIzZUYy4waDR7HV3%*Ed;b zd)KFM21~SIMN?~3c}Z;1&SQVzQKHx}=e95y@N$JGNV2Z!a<(1?+V+cC&8Zz!j2}?h zF*XV>$kDd7wHGW^)lSW{xZ-~*F(hx-+TrJ;E;6dh$sO+Pc`wYrfOWFxSh{JFly#mY zr6R0AQo%eRab2Zij4Q$ntI5PA(NaTjo08 z@SNyobNS7ZtaFIw*hS%sRkTfDu>VO#xJvg@l2`DLtrI*|n`w>7EX&eGd8>v$m337t zI90Z_+D?<~TAzIk6xbKLrIP0&$?sp|3D@p@bj7^lXNvP?PS@1o#YT6b58pVdx8$v= z*DC8MFm}AICzj2c{r<(WdbY{wad>)sWa`D4fR*yi?9TbZ?_s{HmuiMjlEl~w=JL{6 zv9bZO{GZFf99O_JdaN9sASsJJ~jHFu$X6tPNpRsvN9Mx zzqX8XxTqpEk1pFF5-!C0V)k2P_`JDP66ymh(~j?aJK7UrJ)+}AJB+~%jj;8&Z#<33 z@^i^Mv7)E^Vdq=(42lAg29vtWG;KVMqStG)ES3tVjLskT=y^8vQ1+HZbXL9oBj-^! z@_Vq*KB3L`+N+bYbpCyl^UPl+e0IM%WTK%|{?`=;C7F!(P2qc^J-nGSKlQ%jyQlaX zwuXc-ei~tme$M^4G%N0c;Mk=I{gA<#lG>cv}Off4P)FVYM% zlNs@Pi#fCpY}39h%GM{xVByJAj0bEh`5So~dH2Tr8C<+@OQ$kO`)f&Ru{!bPPg6Q7 zC=z_BU#CC!tngpPG4fO8%*2^x_MBSyX1f4%|lM&EI4MWn4laz#>9YkX>%r?T@>fmUMmcGQ24iiqxtwA{z9njZT0 z@|tRlaf{N}+uwhHURIvvL#mLKnNCkCOv%ees+CQVX(Nc`dQso{y^EOmCrUxV=G7k$ z({t_>@{!`MuK9fwmu67jKsiyhg{zcRctbr?#X?%Q=aQDGkj}HPn9)G_U67O{cRKq` zd-JLaLu9;G%1tp(LM$M!=u3|*dUNLQ&->)!FD(yu>lw2JAl|8+0ssds3OU#QdHJ6; z>xz{@%Y>Dv@Do>@8z+MKqEGysxW8S-^CgRsPaVCg@QzY_^T>#6CGKH2vxl0A8$^EO z%HDEOwyvPMOG4`1p0B2w{zg*SyL9$LaF|zS*~6=EeDo|7B7W}dS=N@{A>G__QOa$p z`~Ceh_umh2{LcAA6!kIj+40C^f64#dJS|hVBD`u`u?XC&k$A{i+#0^@L8UfcUv znt!?ab?bq-5Oao^1M?jA<%`_-Qnyo|KaG}cW^U;j5G0KXWdf|NML+(2mLv=FZkCTm zlJ>iVgeiKt$jJ1~<*cdBS?QOT)Ez6K^7k&Y{{s?)A0DTY^2#BZIhSNZ==!kNZ%|aS zl2WnXRascT-3}#m^#?*AaD;(V=sQVDht{W&USS{^@;gqYNMt$l(gk!kQ5tqS%(HW+e91C$V;w|TnZ znF2YM7CY`S9y*yc(bgb$@Yo8`F$_b8E?FUqxYQ&aGoJ@>76jN7lrnSnf{Ukj;LdYH zXCNv%tY_F@w>11g5!ybVS=JJ6B=qz)X;4sWYWg5!J63Vk0|~B$Mbn#4nZGLLcXjlt zxVhI{Y-?GLl>73HN9L^bQ>5X&082{#L{T{@d>YTs9V?^bRx82ZUGGx(s%aTeJW(Y` z8G2yw>irm=%x&3864LvwXhT0nqCSjxb$l*=7jq@e#;4%P`wD!f;wp?7;t8u(>~?X5 zFyZvz_4M*gkkuhwdf{*o>2dxY z%uW%j!~@WGi58x(D0==C>+NV*Lz~Zs2#~-Cb`pdBj~y3gEe5RImSnrN;`S1N>kyJC z;tY=l`VD{)ux8T3MdtuDK~F6x2!nnRjji)$gfy-~R_i;!6MDf<83{L!6>?+;!y(gr z^#(WRrPFIb%r1YavPAa>e)}dBetOg#VvQ9c{Z5YYXvUWSARbV{m4bmv7Z1o@szDO! z49E!(As^n1kh`yjY*W5W<Tmx;%wJ!x)3qfzlmNd zk0NXB*s`DHsD(852aX2J31L0mW~+W9>J@ki6kkr3lfu>NmkeIM9NL;XK5y2ukCd|? z9KFsE5j1PBc2Q7*fk-bAKjGoW1bMs%!Ug0o{F$7^$0fbhH|l>=oPVMf@@@hH7(>S7 zDI{(My&f(y-Wx9~w`y7qo3mvyCHQo~THNAp1_|I}b>Q%RvR~PFDHZS*kSijhJOuRw z2$%!c7yRUH-np^{d#>efns6Am{5~{P;(+vMu^t{o!fTv3<@dpM;m5(?$N*iW$4r$-JHkboFjKubnIKcYXzo!ZFrMZ~?kIx6$h39@t znH0ZXst%5*f#L3B_3~ft7OX9q@;vvoeDw8WWEkEv5bMbXCqBdPyfrlWw*7|DY1YQm z(ld!)FU39zl|+oi6Xd8j`WSwUs~Izb-6rt6X9ZPw?iJRj5~$1%dB=t68x$T12??+W zkngX;vU8cXxIL7D2PeE8g_xMY9U}m8M@0A^3tDe*-seKBCxH1h2OdGo;LJ6LSOT8x z^fCd_2@JOFM)U$XttR*tAnM#>yf8n15iuo)R|3o_Zbk%6CIjjRed(3@?`|zYSIa6Z zcL4SSW)xz|4dkr};Pe0rK@=*943%LlPrmRXq&{hgVvzf~fE|N|IgH6+z74?;Trlf^ zSpcGj1c4q1AGyp17^vNMpC&uaVFQ;tJ13{3>@^ttBh-4tI0_g<_hE|rPUFTAh*i_e z8RO)Xz-|wQyZmYrWUfLPLDWj}N3(iV-!7>3T1Z~Oee8=jhG|h$k7FdxJe+!TenL{W z$09g(=P`9l*pAa>h0pheco^2ZT=CG9^;#^8xW7Fyy(H^9S$cq1&p7cCg9CT_Id3NK z$b){4-1nV@XYZ)EIy9U0&(30e55F0(7SYd&2ul}Nz7hog^9w|8F5=-On3`GAQH1J^ zlR-d+AxNyj^-Bq0(3=s6il9GT@~PUBSlJ}DY411M;Hur<-!I8O;XgdjK=NxL{R1n% z%{Kb?ANg6eLVlf#;7AD=n)jbS6rfw^WJ<|PE8<8QipFCg_5dr1oSdB2)z|ZTHJeUa zrui#tYoO>gAcvs8ck`XiEB1s}@F)1_{_Fs4Y2Kk0F^q%6miai7WIZsEL$VZr2M8x1 zOrpeKmJhpTjiLh{odZ)o512WD{ssmlTTY35Q%=4>&VYPI;oG-wBia|l7mmxgD>XOw z3L4mJS6D2$g5D{r`GF!24El3?-gT%3bB)+6&!J#qw$2e&K4#vDl-frTOlu@Q|nz(3sT z^*oD&Yw`Fqn6eGSH%@TTlG8+7_7FEl5Sr?yhwaa-}~Lb9JQFkvr%9|7u$H z^gjH?+@Kv_YDe^^hR>)-#xGTGqdhY6a9W<_;9$?5>0=A?%B$~}AJiOB7aZ@9QRsP| z^~?1RQ{fnQs>fMsV+npK8J@rsg_=}-2@#GdMtdn|FNtW&Hr zT@$*(ZoS?ZwSCSRAuR{y=IT-56ZH|SA4OUd&3Ci8qQ3M~sG>~CjEndPC{I^Hch3v$ zFP$&fzbbMe(p7I+6+TPL!y@*rlHHpBJlH?WVK_iE7mT`{(mOafC}Eh05)r-2Ph|Df8NYFG$mcXO<2QmT)WCoT%yUgr+yk`OVZz?VfeRWPEA&BJ zxFK?$1#5|hn^CAm`wvmHcPKNH0GK`ex)?#UIdF;dMefCMk7|X%x`aI;)9jmbiqjyl zlmYo>aqxrz73*2DYzEpPSet9FF{Q=w$44n4#yUuR3Sy|s!O`T{uyX_0-7gBNmncLJ zs(ZI!un~^XRA4R9hYNp!oe&*y^gIF{nIiB3H(Z8mf3B>|0;R|uRlW`J7l_m4>=%F7 z=)TNu+UNhaec*#k(U?G404J9)czPm^_jNFPHPO}eLMXPNY5`+-GgH$U5a$X`AN4pQ z1SjAIAqN(0gBRpnP@Xz`>r7J-#f4Vb*TO6{%nR!GHJZeF5K|6ZlyPt`P+B z2p_MNvZ;j4{EZWQ#H3z;Isiq;^zw zhOvF0QC{##re9QXODG8r_)VOd3(;`TWu2d+}OAr3%cUkSU>iF6CBK8c)^ltvzWApH-;^=MN{BdB?$}{y(*w`Fyb7R zMAl@RI9G*Mtp)01wY47OQa^FmaK+)*r;M*Q&1*t=+xcqp`s1b0fUW8VsSIM9p$wUm z4Pk?C(!T%f1!q7Xu3q6tkXo;Bia5L=j@de#4=;sW0DVWs$m<7wqa*W!J9Tr#m!2?_ z1k2Af9U2f%Ijt!OSG4zxd)ACxKd9t%&}KZF9I4Q*Q4{ zfoFPtsuyqD{UbDe3j;F?EexZ;b@$tC1@hYzMl;%1Rua%Vh%P(n)_4VYVdPx4|6m?; zt*P%F7u}3_+l9`ZiUMUpV!g$UXje;_U915#v(87Z1m~zqt3qk2K@>?>Y>#KYuo~v3X}&=GWZ( z;DR?AXhLxD@t-IWp?0{l?wVbC-$Z$Cq9{zWDQrCvdQv>E$osp+IaH*O{P^5+uIyOo zZX8&u^6>D?FWt>lWXC!`HB1go806-=RLqtDTsCObPESu4wgqHA-hw^t5AiAaw^T^< zGQ0=tHv>k1P-u<+<`oniV}aZd(D4KZ%Q|dWrE~N8n!G4>?)<_QKmp#6SMjC3F7J3{ zTGM_LnjTYRFD+HeeAC`{7WSjKeXp4+_gJup>4kwj)e9x1FF=88OUlKe^W*20;Q+{i zSeku*?x>DsJVuT{Y2y*iT3zcKlM>qXC(Dks-Hc({`_EALpQ48oPHRVpotPpG z*vX0Y1?BhMQ}?FMT4#@C&C#vp%lt~Uc=Q>$01+DZwotI<1 zFswh@+{3auq&aYf0t>XNU` znLry|Wsli)MkAwgHF`%^#w(xphuvxCe-~Z~@J)J7rHPC2ITv?{lsi&&PFeXxv_W%~ zFnH#xtE7r;)$#*vysnh|ST>1!@}}9W8J|AcchzNDwH@2gb8 zCGV@-m;ADbP@IY@N-0)W4->R?)?^QY(r54A^}^@A$RBGYN2XslY7|7=+x+_&b=B!c znBFm^Vwf3n+T0%W`y7ng@w8fN>^x24`ki~M8*t-S+1!YJe34DEzCvf(@7$b(wr4nB zW;b&CBG<@jz<<`%rI|KLqe}2f%0?Ye!Tabi{#IG&CV2uzh&OtY0Q`eNx&w|l421-0rrk^4Mo>()V@>Db}W7wV+g zFFi>@qvhtqpHPt5Cj->w{yT6u{(Y?=Vo61Ug&U2SDmsmsc_gxro9{K>BP}Lhv-shM z@+dMKKeLa%^qMCa1mmIvTjZvxjWjo}de*(BudF?+S2;XQ!@Pc||GNE97ZX8!jl+%A%T z`h+cMbX;rpK2c2#PpR>3K|!8ZCM-2IX?ZO)l~24(FTR)19goK={8RqLd!qz1=xuT$-kQw$t4A0LLVDjZA!p@v?{ zT>B&_GUhuuu{f1V`s~QJ53J}6B*b$U)5;}pWVFjNX%3x5iwT}ce|WWqy%(Vs_V*%V zC!+J&J>4vXB8nKFXOdIk6XU3U#D;ydme_?je(=gW@=bG3qgRAD;)*o5Sv<8ubP0nO zEySFZz7_HejV}{)E(+@#Mcx%l>5b_4#KIb){M3rWFVj3iykctQS^6tkw?YbPPRZEIK z|3;S?^LKq(L9QlZq=mNqf|D+c3*>7vPZ*(iqziYyF93Sc3IRDoe$Hg1dieVLt2zOeYM=%9oEu&krbwebutic2(LG zF57KqA`H5F*8}C+XuF;o@ocfm#=NrP#2T(V#bc#bCrMB&vl;bMTfO zslWL74Xv+H06k7SkJ8!moo0hqWr~I;0~xCyf0#5aW6PG5dFVX8btJ|Q1T6`8D+9mNXSD{&GXaVu z8axrOk&$pdX!d!nr@As?UdVzFS5^D9%9aoM3~;c(TEz!YZQQ!h;^pD6|zPX9Qrzu zg^z^v#JGv>wPW-sH7(^S<>snnO4-v#~K;j!~XHhG~PuhAJ?4o4=#^fpKsA zBX@UtOY#;fMNk)6x;35xd0hp$UBa^khlwPu0E&FIN5 zm+d2A@DeDiD1S;6I*{@+tK_4P1#gJuIQT}qg~kbjie#o(o@gpd$jkHeHXbr?nQ(KN z>{BV_h_Z3@hTRYvZ7{$J&{I;?lmMJXv(oC;2ib`3#URO>U5WKX&O5<`Oj-Tr$|w#5 zQk*{9uXOHpokBr^w>UKZ+S=OSZ1}#z(Dnpq?6546BwG$#3~-*8Oozo^0&$Mio+q|0 zE-q@-cDKOoQ25ifHh9|SY1c+0NxJQ}hqaBzLWltwVqyrMFo9wxbO6ZCA+ChTO#s{E z*_nsvVKae}x_U?B>3E~$|YyjDShtVePFH3~DT%VJ*1Y?%9#N zIr7&JeTqY;kI}A8P4ZR{4C@?joE2I(MoxxnKc0_JgSsD%k*Zub^#Hkl@7i=Kpl8c+W1wKmPePbau z4@WR@R0Os>U_&P}SWu$nyn!(mq6M(4rfNK%+(0PfuvQ?e8Fm35TVQpU4-~GZ{~v5E4=N2Gl2o zo1@zf7ntRYQe*4%V*@>}{6IB6&{rVc&&B4`*fZ@2p?{0-ggTKTEt7iTTG#smyRj4v zX^RZ1F1_y%C1D?Xbr};^P*6jL!R6=1I>d)6kad|GquNx9EPbE74002dG8v{02ngU` zzmv5!;)#TOMMriUOEVtB*1BZf+t~CrQ*y|9%+Ks4Tj$)-wUqfXWkn-Yn|zA_Bpy<& zbP)z{?hDDKmv{C(5epaFGGTXH)$A}1aCTc~)!OoA-P8(vFCA1-aU)N&FyNZG$(yFRLfVH12RT6;VshpV%w&MAsjPTv|&ceDNqtTXc-<*Ek zRovVPPYL1XxYg2OwuX_QD6&U_7!EEliOqsxPX=tlU=L`d{#R*<#D;?IWC2N=LKK&j z(}$QE<}gW=vbMh4VfdcXs>&OZA(I~7L`)U%1;`}>Uh2GK3|S`l$kH4ipK1da&DY@likNbNEi!CGNJKk(?bpoSaz3X;DX(oEjeF1pW&Y)f`9hua?Q^@y&lU$;bVp6&#`9dI~K z1UW|>GGawOG{m)hK9p}8@atlDFUaH!xktB(!`<`LmiiYFyxQ%j1kD_B6VC9hl7qCf zeSUX$_leG3o)v#WFD0jnW`T^!L?Ro`r`h^X7JlbrVjgmSZx-$ryZ77g+FRE#BVQ5W z_j#c-#ztC0R*5p%1N5m{jr(!WO;w+6;zn(o`>AJQN~A|&=G&Bi>7y9`P98w>bx|9G zz(2H2IXy&)c~OrgboKfff3mlklN$XXi^OqSLK^3$LFomK*emzScx3xt5$IE122el) zFwLSnA-6)VaasQs9G3JRpE3c?~;|o=vOBE3AhdoQ(Jn5??w0 zghl;*BxrtNg=-#h7%esc)v#>nq6DceB25XljzeRs;U4^$F+$`Ne;qKpFh5bgipY`M=b)T zre5$`xql#V-}D8^&QQKidx3WTf}Of?c^A~n0>azNQXPwS_ZPA^1nF9ejX)7qxBZP3 z@%9H_smKn)!>NOYc8GU{Itt?4-UAYieyzpc4#`6I zMK>BN(_qGzf6DYq#Cjui);&oMtRBElcDheaPe+FaULMe46&2DrxlH~wNY-|=oq#)y zt@8^9E_i^2Y&=>0`Ew>=`h-#E@XNKJ_4&|+`uh6TMJQL_PUvnvx_K3r3|d=$IH5Rs zSo_A9#^yIiT^4z3!G|q&9krOz+n3eZ=}PbS@N_tlnK9k}{>>nP9g{-BOgNtdFEr<5 z32P@=rkUrm8aqyC;Fo?(8KxF5Vnc}vBBSxM;}%I2XMVAR{l|jxBWu}HkL2a)u0DFaDRbr!u2T$Kp410Fjo8lS7r`%!pG#r}~#zoO&zAnc7FqLbHoI%9bF*~E#jkZ3v zKD_y~Y^biml9K0#%0=G?Hrh}-T)DJHx()9! zYMA4qS}NFJM4Nq`;$zKcoD5oWT#)=?Up&bymP+{QFxg?9M}hNgei6R@udYP$gI^Gh zCvB1fS0XiRQ@Zht(MI4_1ul&s(@Kka0MTL63_eEcQ6Hl9)yYsOmKW0%p}&4L&>D6#?iSmxC?OI=c90HH zJI$aYF_<7Zd<;dNEDJo>%=ERY8J{aoFy>O!)}E|7Lh=Ln{!!U_eFf{W zc{h|nQ2R}Q_eyN$n|c1K0#8x$kXC+J@{sgB4~3CfrrDqA<0i070Mne;TZvpmZ(w`? zGy@3b8jQ_Ur?OHf1O1mZSl?JX48EE7`xoBGPn*sZ5uj%?W|kFNyHX8q`*V@H8s@^i z1`tb7RiJ61S(o2!ZR~78&MV8(3Nc!jFP>21BF6w6aHmzX=|=Dp(C9?UF~S=Wnz6$` z%oz|HXQV`%ffpwR1DRO6i4M?Ef(!-^4{vR({7Sp+Nldg!DRRrUI=^LKMhvs>dLCVQ z9K$|oa6sskAFVMo#8rRLWB`oi*EwZKd7H+FwFIThkbG}rZ&X`IX(D$2SM;krW zR7L?u$aeC=jie+J9DINfva+%gYR1Oq_@PGp{Q2d#&N+*T-P_i#xzlS-{8VW*pMy=y zqL$i>aR|Iy`h475a)@CiiEoQrCYb$cMk}_EiP`90|OivJ_a|Op?~bZ2Lr;Kf`Y~M zYjwU%$!_sB{9RqwxgZhqDryD9jw}IYgA@E1sCNe;*tR9E;3S8B?)n;hHgIuqH{U3_ zUGRcpd$Y3fG!%}QxkGT6LAVjmZnuKV9#Y&sU?T%7TBL4bCiw`_tzg{Fr_Go_vgJgz zNi%dQxOpPGf0lTI_-%l;L1=)n@|%aBme$_%)XlafH1LjkdEJSNBb+;2;17Jhr`~Yx z7aMOm4tx75Uh@cI&jESaJy@cf=n!zu_R`!O;maUVMSl|?foA~=7W`j95{c;UfGdGi z7hqk5v=j(qj@osN^Ut3@hfpR+g3J!+aB%xv$mc09FGn)J679aRAQD;x-huSfYdT@I z;K_*W?9i^O73*JW)_n&i3MKILaP3IO9Fm5LL{lP#nmXhvAnQEZsK2kT3Er$X&o=j_ z=F~PByiv$AL81a6T}DA*kp$_npz>R>k4F@|Fq8#*O$%twey*=CiflL&AS@50W<)IZ z!Ny-78Zab7q`iaMhb7CCXCac_YY^=W1Kpf;{8e-%5w^Z9&@ z2mf>CwNw82+VV&#p`)$SBw@i6iDjuJWt+aE2#?XX=N-$EZItR^go6tPd@ndB9}zMI z<&UQ_X!Ocmrhk3;IHV(xv%GiGH$eJ+?*~gt~MY`x*2_{#=Tg@!u9|%8JFj67K+rxXN z`lAmVv>rVYf&4=aW99&*2jXcOw{w4)zD#^nSBH57rZ|^mmx*<{M*P|Rlrd))ar=fu+wo9?z0L!Bq@kN^pW(BKq@YVtAd61X^?GhdW zId2Gi34pA;H)9hM!tBz-b84wds5lv#mJmtt$UQKtG?=mxbd?_LJV=2d0PVVuc|Jl@ zs0LtY1j0|D@w3jpzGwVWHdK4xa3?{npd;Egdp*8!)Q&oIF*tI#hKYCcD5Q~hvK1^9 zefQgU3$tK~esODD%w^4DCp#$Dc3Crd8IZ1MBXBc+!n`^6`0hY|e{-BkA_SMs$G(#E zADXHf!a3RD4;OE4k)#-o@quJ7+Nu>8{Zad#H>}xF`yMIkf!Bv9jF;+RISpT z(?}PAEdzv*7Hlc_H*@-@5K6cgtfpim*~F>zkf~OfD$(0FsKpf%Zp-!f2vswA8S`+M zWe@Mcr`uk#hSI?A^^L#HziMxwzgpRjHy#iX?EAk@plsj`jMZL|D5^KXx=#s>$v9QZ??1o*~ND}1N zn^XUFafIogSRVa*3$%Bi3)JT9QVNGK(iTUP}v0^w)Kz)ULr0mhWS-snxL`zZV+z=)XS+Ir{vxCuqYv=8pan@2GqlJmfvaa2Za= zbTDM(nJ-R#Jq(-o)VhX?I`aax7v)-Du77r?@$u0{VHk5R7g0nMr0^ zU$ZChZe&(U&AafX*<6Yy{bEZpN@X$iYoNl_EA5#;bdEHmGI@Z$F0-7dH3vtZLf?K7 zTjbDZa)}jY{|gJ-gm*E_yKbary6_uCe0k^K2Lo$wK#1ZK5}=W>m~Kb{dak@_XQc3`#k-q?xh|s#Mo7dyLw(~q zx;slI#bn)jv~iyr3X(@lm)~_R2KmWF;mnY_y!p^(lZadEu+BjAhJ!=c*X=>EGfF3p z%baY~B5Y{#=~B1mLq_vi=Xh@h*itNn?oV-EzQm)^De(fHU5Yos2!QU`%#MMK$KLe> zwH~LdIzXrVotB>Ni^$=prl$DhrhokKw;YE-5cT@UD|DI7QO&XQBpklp>FQ)Koi_}l zxBft;d^`}-&;sIvuLunm@bPY;sjaX%j(ncK5x`R}=Ec)Ux$FTj0>&nEM=_b1i~zI4 z6!WCr^8}z+>3n2B`}V@%?xB;4&{NcX&OJvXO}bvL<~Zg~adaz&uH)%)|H5Y*m^>Ak zu~J#9n`bwE5Qe2D3OiA(*ATtKrc=0_yv)fz^4MU0l!3^Voc!m<@*fDSE1SW;^Oj47 z@qpvqhp!E$1F{o45Fy``PlFJrP7b(urc?2Gqf zGlVS$jr#CX%U1Z_W{U`S(i$Gh-&Me^#cc{PwdcN&Ll>3vB=gM>byWe)dv8BO@u2xA zV<)Fr?b`p3tG^7ZD(u#VVMGB%Bm^l*ky4NjX+=Sh#z4A5xS_Gs)TBKX0bJ5*M zi-@@B&TmZjbKm>h?+-mZ1lF9)E9N!MafXvVd2m94IzV86RJHh+%U);97>XjBmvjK&I&31VlQ1%3 z1e6T>M5)J?3OTv{PkjZ88nN;NR_{Y#8`afmKZGfYAs#(=&nTiO<6Oo*Ge^JE`K>Dj zriJuky=u3dk*lu#)%jm+DKGq@yJ(mnKDcSo6*F-BCOX05x|Yq}FP+JoW~s`U@Pgj# zCa8w^=gZ^#P@2?>o{Ip-S)zd{s^fj%G63#C z7j+hR!0Ems{b&?vpY6!#PqdIrK}Gzfb$bnX307jM~StWh;7H~ z*Mr!`A6l=|z-O%*w}w%NxOg~Ym*hSw;Dh;%_$C$bA;f*?Be6cx zIRYp?X%0cJ;Ta=C3pDhtEDnz=x}70k zbC1HP`JIkB0@l|buG(n-t));c;GvqhI?Ui2>Bh4Ch6jJ|>-`_iD4P8!dHc-DK0^V~ zx&AYnmdz)UdZmBxuKU4;Y4Oph#IVCm5DSZ?oIg%@p9D6Ukr8<)n-(_Jo90;ph_HE| zKOZS~IudXJb6F9*ETw=4ugoZ5Y-l2QGR%O?ucWN)W2XM~e(c%VrD|sagQ>G-tvMX~ zjEZ}0P7z`!d~dAgTxqgb#xBz&zhHfix6KqT%+JC?f~)qC&uVhu<}h&%^{IG$(GpE} zc}DX-AG&2NXjPz+inwaz*{XmLx@9R`L3|SJI`ef208F!lRx=cS;@611ssgD%`N{&O zHJvd>f-bRyanT989HDTLK1p*?EA^~lv8wHHwBX35i0x#@USnPM^q3F^IN}loJt7=x zu0-p*+=xKsxC^L34>9v}y?R{?0|5Ga(C4eSU9a88v;j>=7hfPDGhGa2?-Mr$ILb)z zUQd8C0fX+sV}b)Ru|xM1ATOsWHE`mA{wuYQjH5=1!(DTXU7ICL`^hwP(SWacul{7q zmMo^ZxfzVg7VM}{jc{q8!O~OVlT}N1amELc`4F3DE!ln3Cnms{u=uECy3QqHJ3)-1 z6|N5g&Yv4BHB(;ozbP(}_xIA@ENl#1J3-(_rF)NhDTGcl^E*3lZXyDy}Qbf^NpyMY7I}bpBlC6nHlB}_6GU7R@LZL>rT!Qfj zx}7cO(+1Vd3c|0vc}85v4ZGsMP!TUXavCLBOy*+d4seHG6K}h>ERjuJ?Rk7>+i=>z zE0vroOsn2k>)gX~Iq29z|7%6P8G*4dttkb8lkmEE^_ux)N9FO^FTN2NN7sN z-`mmb{4j~?Hqdk4UAavzY%4!Ph5C&}P_uc<)S|v*$TbB8=@}sZTDf_zGaxXKf{H51 z;Tz7NXyt6)ALGoVF zzv@Nsz8YzF^64+DY=L1`m=zu7W4^a2`7Q_E*m?sf8oUZak>C4Y9RPpDNy#?G zeSAwGD}rA#-st~YCG9ctC1#%gk}ly}!&POeUHY?jXChSGyf9s8S}6?;)NjNRqA%IA z9FK0#2!>J7BHt#hVy69{4<^)4Fhk=Ig!72ixRi-lTVLkywAG!$mzRz;wjtCUJ2$PwC`*fO;f!P1NH|coV6|79$Zx z)qk!ah>eGTXzootEy%_xy?H=a#mh35`5fSz4*N|)`3^AiZ5im3m@Rq(ZeXZoMf5hjwU=-}|LiJVQ??0o%V|Sb? z|LDIT8Cndawl}%^wz0OW-SBjl=hg33Us2J7((8{EQ;l8J24=XndU?oH%)-p>Txknu zm|)vsQIcma zDL5SuJM)Hwdztr-`q{nx2dL1xQ(D%IN*F>*Px>oVde?S^~-7Y-vQ zP5j^1*I0~lL@diMN?kwB;#2#W{-uc^zjA%pko)Y+e0{j}*Nv-K;s<{f8w&Z!$%o6G zUt?bQz2;+hJ%Gn8aje_$#Ec4Of$Q;|tcju8{c%A}d2i%VOZ)zJMo>|7VxYs;QwAGr z+oiDHe)hgL)6N@!N#a7IzPi~pLaD{#y?WS1gd)w_oB6hnZ+tHIIrkH4wqRe~_yb3T zzR}>r7uZ#3~d8snxU0K!@EKrsmP|6`!STEojoh9&Z6R zoFex7$6_GWMAGcZv<)SdbVkLksLkfGvkN`pS~RB@`@cyKO=ol%-he>zUt=eS7PBiQ zW!K(b2s2_mI^rAne2W}I$xo8gYi)+obYXl!@V%^Crb@z$XKO!aX27XZ7j-UsT(7B$ zS%ic7&`<{XlO`ox{VZIRk9QVlG*jg8PwK~JB!jQy-Iy(=*OYB;P$wr8()8%cawYB6 z*RQ@#E78_V7^)${_olf&t0eon`U-t^-}w5if(mzLYNLNZf}j~y9+`w4rh~iC`_nz+ zeYD{abslQnhf<6A{*2=F?2fK6_QlB|ZKm~CEOe{!Eq|%7EazTdRCT=+9g@rI+LzgP zCCbTCf|&oR_pNz9B~xwrmMf=|bXzB@XD2alpYt3XNNcx|cRY+vJK5vZ?8gdQ_E|P7 zAI+?2d`aVRv&*yeN^(yp0~&>!)lkk-K0M&QNJxbHm3;iGUnnNUSld8w{%X}cDKBnI zJ{4|QNaOpP4JrvLcTp+setT1$T$N}l*Od=JoAp|Co4plkEY}Mg&mCulT~HC%=SZ`i zYyIQ=78|Y>nc98BL{ocw)qZCqC}r1AP&;ZpT<+MQBs&!AU5PKxi@6dyOQP>aR#T%e zG=TMqLiVu2-Kp|BZ~+-8uW<=xjt~4P&U3^ms$aXnzqzH3*?3)j>P8CAl=HW8^jc0$ z%?G9aOv`=3%7P%2>;U;VX*usxPN#fI%D1T0zrSL_%tozwuUvWxrAtlCK!fe4d=jDW zQ~|0N9rpcy|1gMhZu&{xE_`NdFhwKk;i+bvkdPKl`=PE_@F7n#V-t*vu%b7gv;w(9Y03P~5bwVZ{Dibbm+?eXW&8BsmTxBk)D zZT7sR@bl*6a89(kyRMq4y;+K{F#; z2z!s{#ZpDrc`bU~Cgo-5=)s-4eYUO!*9}rD`rYprHJnfWDUqA;wX;yhHF_mjLYFGK zYWC|Db|v>lM4a!$%LJ3b2Ud7GbM<#64pA}RP69}50AQ<=O5h3NqfAk()`)XcH!VhO$^sr8SlqsR0%x2t@3bY^D;Kuq!3=f z(EZ6t`G7zk7A&kWU3Ao{TKR7WHsKZ^YF27-aJ!AN0q3t#;^Wce{mdb=hZjPWIQ=Y{ zKEI3o(6#hrXC1hc$}fa2HecpW`WPEV-KApIV|`v8rqnIg$4NRjw^YfP+JEtHyf1V@A|c=x;2{UH$5c$m-QJ?%b(Y>9CK%n?!A)8EoESt_lb3kQ6gaaiXy)PhqWBrZ z|AS8MBHXD1C}8`RAjbJ~D=Ch|KLC^YS{4anOfC*Qm0;!);xN&b2_3bp3S)qD;H(S6 zvhdM_DeL;=%1VBaz++TRJKdDcwcU1y^x^xE=Q^Oijg)_CY;6!f7l;wng@CWps?CfO- zZ#7B=ygT9C(cj3mSBDC>WVd0Roeoc63%YIl;y~-YpO3bS{o#2 zbDw>%oT`K-FSMEF|CaUANB(ZBOslQ+4G%|h#^gCoiG!l`a9(G-@dSDFQ(nL5t66Tx z4+1jiiG|!gs=62qu#t%ylBgF&vzDHHM?x%?F&0e+4(P?kLo;-O}dru7?6tHl0`4G|ny*mh);Bl32VT=9*@#Kx_9Ja?jfc9ze|9Pq%Rb zztIHwM1G)FfQzLbFo__^BoZ39Tie^Os-4&&28!jzdA)Ag#8+VJA=U`jXQ!PruX!Ur z3q%Z3;3EjZQAR6+SqLMFO{XqtWhiGG<}2ggwZP_sQ%|@jr>T;VX}BXRt9#H(PZj+A z$rr*186bun;-r%hc_eVMYz~)VRYB*ju1-lB;t!?}Ae>gsmRl)1^8(BhVLh^BeMMJJ zxd8bqH$VT!DGn3H6{OE_5ZSN3{VUP>ALsX0!P-5%v{2p+J>rpw4>xmrw&OpdA5LmGV*d32iCrOIenJe-sp!K%LfDYp~ zKlXqWK%6opEe3-`#jc$`&<3=?5G>LR%f16BEQpBLk61w$$TUMt(m2Ywj3bMbvz6ve@v^x1`q2RDQzsZqz`Z^e?;YWNPt zKYZXRrU5)G$}pA6!cb7GBFsA=)$u3Zi0$%M34UgB$0?9O?0Lp`UOb85U;e@AdsO(s zQ+|oxNV@T0A7~{ zq;&|@GbE!eIS>OcAsA}}A4QC%5x#ZD2gYO?&pIHyfU(6q0APmjKL`u)?c294lKr*F zC7@%9fk!PAZ4e>)5l}|--r{vzk7a5^s>fYec z5d2Kb>aHEQv2dF7CbdMpB~<*jIh1-94G9G?;3M-MrcSDIhSVmIBctNuJ2GXWu9LN5 zKn6oLFhW6;{{eY}!lRCbxF`ojs)c)z5J&;$Gu1iO^mU4p7|rj_s~I>LR$@d-?q2`bi7~Er=k(*0YHqq_< zLxg*9h_#)Aj)5U%uUEgM9L)UVeB?k(_roc^l8js>|phK7bV zVC({KiYEBV^1&4+4bteoY4h?Z)LIRl-rm8)2`g(d|K8=gXnInp9*vT8` zZ8%|bT>~ud4ER<&zyn8q98#yGfz1V=9t|Wo)j;n*lvX@Nn#MI#$I=qoBv(0V-h=f$ zIy-|%tK%Kwr67(AiA(#(@j{MwVB2&Do;&gsBO@E(!L@gH-xe3A1%q*53|@dJ%~Mk| zGnvpiGcfo@>G3DJ$$hhdIS=VJeh87U0gi`_2&GGbtOLwD=)e*sNCGw2=*!4iNf6Si zZvixSWUFtw!mL}N4n9Fs@^#2&%RI>Ox&TQ5V~`I22@Gb0>{SB`An0`3N|;=CF(=P zQ(EOm&6$F#C2IN6_^d{{^K@*aR|ANeUsqfYdCbbj(!!~aN68x(8j1(285ppF$+^Iy zo_i9c$1VKsQPY9D-Y0v?-%eVpQOwrsmQ&8G)eK#yW+u|BlOsmeR_3!aW8YpYUc3B0 zCZ^}(mp6ZIx(iaRfOD6s@~e&`Yk@_(r8x)V4>4NrhT>&z|6wHD(XGt99`w*^jZQxx zCQh%d|Am8`9ydz*rg{Nlr8Y<&41U~Lb~5pbjaC7Z zEq};2Y$5Pf35FvEp!^>X&a_{>3YxHh<&f^^PEs)P8aRa0RwiIYbE>di7`?EPlWGh* zJtR+-g0!Til2sMy)PXh8Epj}}&1bSzBq{8_6ej5Pg&h7hTx+R zNHo}lAU{G}|LbJ^$c@0!hZo5Y0!6!73|GSNGqTp!Ryc{^;^NB4*m4{1kgKR9k&xnp4&`m5?t*b%k8vxy zx528)fSt8%-bSCBm7B*vjg7P|LipV5OjEFL{*elo?UW&OA0UTUtvk zIcACOLN8aWZZdJ?WM;lkO^s;PpYQh#xE}I`E3pUW-GW25ewFaXu?7Vk3wCxKq#`K8 zVC$x%Y+c{ah;HKKH7=tlpohJu|qs&kdT!+pk(!Gj0$9sF#A8UH_OTcNrRMEtMaEd3fCmB;o%U2oQ zxacG-y#5m6au$}UWl*M1GfQtAQ)WF|*v~vYJ`Jx)^}uSKT=j&rC6fDu5baVu_9&1J z7IU)0pz~_^xL)TN<$IjpeuTGVz-nh-K|d7;hDqc;7vXAeTlMMr_-=r;($LCn!ppi< zQ=5nGK=gkf73JHtlnzZuH8xKJdI5o0Q{LcdE7a;PNPRyS6`5?zHDb8b&OG{l{hgQ0 zQ~WPW%gb;W1ur;|(fzOzu&PQ_Vi{(A5AW>o>4Mdj<&@67?4s}A_X?^@MMX;{rfi}3 zDb%!^s5=^%;@W+&9{#$hj}x!bYC2d2H*ZAN$%$Xx9QYamv+Fs<#hjbfkgo@C6^ogg z`0j2wXcOCf(}dIdb*Qil3)>929c6RBfz}T)9TDe1I60X>%px9*$XC=&3DM-(!sSZw z<*(w)IYqOvNOm@eB_YA+c4Nu3?(VV9)@qc=`ij+M`bYKbd-XLr)x|I0J<>g`!VVa4 z^;1GUazlHerbd~tu0_99%Rg-scZiSUAR;lfc=2q+G=H>k%n&;ujVt~`5itqc{*-mZ z6MX@{`d9y^XVd(z%&pppw#fly5v^U5;W1~{sj*!{K<41KwU+%sT*TeLdz7>^fMk01A5@TXw0y^q)OgxcK z;@J7$NpM@xd-0n?CQf4@EE0X&A2JuaQckedm zUh{~S?1wc>EUhkwYkNE8=g!xtDmZ}r&TMxmxtya?t+94gZfI9KZ}WACSia-dBeL1c8Si;&NqL}$Cm2C3szMpI+jnWYwER9H~d|CLD?f-t9q$m_Z`FIZ;O zl2jW^<`+07WZmVPe3vKeokQy?QS$L4UCr+8KYZ{v7yE zF9Vtzw1QVmgOZmVnu-VOyj(wEe?T~NZhZd=&40}u_z69ANkJ-tdvQH(Chs4ZPyTuk zQa_oU)@1nM(-gtP%t1Bcjq6T^+|qwOc)a-`y;{|SsQ4=sR{qm81pM(mgh4I)B@;rJ zN+oJFa_(zI2bEfBq6b(GvLQKqF13WgruoK?WpT@07VW`5{|T-r+{VMd!vA%ihkGdr z^lvWCl8TB<+c@M4>)E7Jv#LzDD{EVN`&K08awwK>u~|r)A!Y~`?)Hs<0U|n{csk0k zF`}?GU#%DBBA<*a+QzCPl*%UP2;aq)sWq$)JxbrKWVdtW=o zw_Y@62uS!`IAW0(fzw`EMsiI)VaK5Zu?>9q&cpX#q$%=nApEZAr~*S$F!s#;1L@eph6@Ct<}ujKdpnLBYg*y5B-=JI44x>9IV!8vEQf zs*CLBgXdw!{SuE`nc6!r6Dt^4viTnA3lXWAFUu(lCU2rk)KG8Y?GdI1p&L)ghr9nT zd9S5VpFgA9cqYLfqlosD2|vo`xtW}-!Jw{kF=Ij#t@ZJhZ%^wURxKR{{}mvyt|N}R z@bSIR{qzA`Hoc3@>HU_o8gckUbgIjQW4qk=}PkkpXv5i*K>WI`& zgH4AYab`}a_ahR6ND3%%rvA_g;8hm%f!v}w)m#E2^ zQWw>aSkLXY(Q?}e(s8_;w{bsTRz@C@zI6M)!+kn|y7^v+5DKr@-n-(9 z7QTw&W6!Mpf02fv@^XLtWab+QXtqjAlTm(t({Lpi7muOIn~M4VeJuCdQE3l@I9mhk z48F{)rh%ycS$XejWB)CH6Vn}m{^7dWed;7xtEW}d?~$R^pG|L{)t}GqX|~lc$kbpM zm&az}z0lk}T6~STW!wLPY1p*kd$ZtqC0%7)|A7}T^HqB&`%U#_Ht*OEq739vu?Cb) zoei89JBMFz*Daz7tniEoxw{{g#~1VKJ?8=ms|ejFjlX0?47_@#@1_KE$}Y7<+&4XO zfz#2q39i3R1fKP&P-#E~B9=;E8P`AAGq(C?(@lV@m@_J2lG4szQcyKuakoQ zvV~2xE5d9pB4X}hkIl`=i%=4*JftC4s+%9zqEMp+or3_7(;E1>dCI`!3#-XuvOMVTU$&{i?B z%x2YhIivU1SA{h^0eg`HjO+?A)8A*V^ew&r0y^H&f&Q4h{oh9x9<`1Bky5!h!a6SPIv@ZBzASzM7 zN6V*#U}6`gIg0S2dpDT5_j_9xUrg4F$BgYYR~tEap)pRqQ>< zmo-r4O8Uq$@a`e&JF~}fcW-eKr@Y6qZg?nnxBSA35TEHUT#0;bp5h#-caI8 z;|@Fl;LSRyH63Eh+lh`hH<@X9?0&N3;|suPoy0A!$sLDX{z3OJ@s7slDRtj8bY`aD z6>QD%e5*=Jc4&G<=I66PEh+QVUavyEy|XjBt`5JM^K+3#A2@EZYE&of?BFFSFo*4~ z%GkENle$_mA?IG^#K)6OD-E`wMys8l3#K2+_h8Eg6EIV~POISaZdU%Wp9X=v_cAMt zp-};XR8a&WLo}~o{v3=r)*%=Vl!b`Y1Z1hgF>U}U!O<45x4a?W^8VBPwZh}f%uL87 zKOPwa>}kQNnnJ*e3OP4JN2Jg&gh-#@e_}{!fxhO8L+}d%OfN2wm1|U5AUsz9zKI|x z2ep`%mPSv+nFn$nz_GKwe@{3+Og+~F`xJowt^>3HT_WHXr$c!U;H?}JF-!qCf%1Ui zEh0~&52Skd`t==Jj~yaVAR+K9COt5UDhXggT;_Auls{Y&GlCCtbx9S$euJ2`psCcS;A|*@`LlcuS&t_}| zkuyP%?i8!{T=KmDYW{1o@$KzTmJ=(?Dfk_r2_O%lcW|aJR_p$%bq^kk>;t+vX1GG$ zNbnRI$d9CXBT|5l!bACOCBEqona!^WnD{_}+|7mh6s^D57N%+6!-s&A&_V!s=r6i+ z8k~tkZwiFNYAgZi5#05`?~Dj!01hEq7T_`LImCGw)Ni^?epi4FstW0Ths&voyp%?; z&ZkGGiQ(7`5o4eiONRupNCs&H%h>?6^?I->1m-=+7M;ETub+kEPZh?ye@41f#Z$rJ z2FPd4U@I%fOSuHeh-na^2bQ&S+lSYUL}&<*kp)ejF49B*ED3aZDM%F##s~=i?|RT9 z7cd5g39KkII5!-#@sX%W(gX(?@K-R6<^Rrm5v+Y#mhmm=XV5$J*2O{$u>;i9J zzX0iTLr-~u2>WlE8 zM_#uYa_jNOxA*igii*qnXz@cJ*ZqlCUk4W&c|sni)RR8^dmjSs5L=DgqN3ChDBtFJP?Oq0>KiApFRi+u zD^yxq>H>Zl2Ot}kFgL#oD&*T791&1x0yu&^K7@q{%}FXmL=Vot&|5uk)Gx6ak{8h1 zVeraV!3}AB$Vm>AdH_D4nc}HW0^HbR`j>17%uN!l0wI$h!9(JzH{jgf2opTXVNixm zyN28wp%lZEDx9)2NpWR@;Q=q3EhK7AUA+^qWkjHbXrf_y{rZwuxB%D+Lfi)r;xo|T zm%1O?MXP`eo0LrrqeYb&RyO#Fb^u^VA?EIqUa&_OKPnU{r3a-nMCQF+SXfXnBLi{| zC}ju&CoGH)iit9FOwyzE`x_d;q#;~BQGiGPz%w)JTYDczrf6T@RE*SvHC^1Ts{l>` z%M1b!nN$h#`M+=7=T=n!&>7{4EvEprFl<)(EbbP-8w zDcR*;R@9mLwES%0H2LXgf$BV3kKGb+RI%`~!lWvyIPYj+SM-mStMh501MnelQ_t)} z@*hMTB15Ha4&n_YClltd0D?l{2WFs3VFLX0zKH(`!mWvZ3jtFeam)vqH_|QX6F*Nv z{=mB0XuD~ByORcbasLJhVmd=ZL#h9)B1s8v-Uz|&JpW!2Uk^yqNOUD4jlE7qyx?{l z$~>t3WG~|2|AZxv;=}_veeft{_4Lfj)9@*@G3*FInzM)$5{UqhVphxsPoW_NVI*uD zT6~9(YGrd4I@x zG3uLU;k1h}QVKx^fi8a{g_u6oStW1K3k_`li_$P3pFEXsef^Z4V^$`QR-X&rj<4%bR?sua^v}&Hgj~PWhy~Z4C59~uxYchQm7T+M+blSWj9xR z^Pq-CJz6(E~7gJR3(C3fqc6c7_`+H(Lj(A#KuM3E~PCX*N-&;4Otro6J2~S()kLvIn zT8SQrn&rtNLF~WbkC(od+nZ)^Qm#SS!Fml^KZg8rEExH>paP$^T80G%jSE#x&2F$- ze>Y))Xei8{a^!tISO^Jf)vv{#`JN!=apbhhBp3Hy5TCwfUs5a!7S4$&B0>$~xDSmt zO^7D=;dzWc0T&BMq~-=+9R;#<#PUi16>BT8qDUijfLZ_u?geidcxVVo0`VVdT;2Tu z*w<)65HWLlg)vy6BaKI-g9XQV*tJEtd3d0)g244ZerT4KmAN9wY!pWQX4}mghzH2m zu1!Fu4V)N@^_sDvF%Dsw&>3L2Etwq~ib9{RSx)!<$vvB4Vp+>gDV+K)#yFPB?Cd7Y zTw9U&!`ON0c-zq28nvUfx|Un`b7^LDcmH%E#?d2o|9iFP-_9IQM87B6v*P!mk;!5d zPv|Tu-X_b)@$jYzR)aov;Iu+81I=w7yngk_gan_VTxG-;qO~;(uf2znR5dfpD4lQI zB6o9gYT@e23TyJDjo{z{`>O)A0@m@rlm$1M1H4sU=t}5&Wl5N8XrvaHUSq`%>oQ^> zwP&;vbpAVAl0^0Q_xFM-qu*4Y#^W2*#@;w*TDYZFYYXf-x@+yPuevN|Y`?(|MgRV` zf}ZqprjgWHE;XN6I~vf?&94%3+Sf{}E}h;j$+4f9U0hvB3aJH4o2N&ALvX6#KF=Y_ zQt3|0R`IE*)$Gi!@Vk-Mrzvg_{CwkCo;ZsEuRr0fAfDE`oN79!sFXUYJqP=`oSWsb; z89AI!r-2#9lJ!P}S*!2C*mty(aGKI*)M+)1$r!pexvcJ^o3M$Nb)|!7#HokZ_j}Hk zc~$nKWA}fflN|Ql_Cj<{(uc^VXcI@)y*i2%Q);2_=tp>3IexyCveu;CxQb<+XDodV zfXv*cME55YH`;4oo{5+VDQ`nS#1WsX(5j&3c--9O`OtE$}-pC_H!*{kt7 z=t+!EDnFl#S1j>-xv%zjH}po|=0@=AChx+tQ0WxU)Q_UmtZ>S@_LEfto(X_Q%q&>O z+xy2Ko+6f_4^NbKR=J#|r@g)|r!GxfslE}lr}c`^UNBz3X*yf8l(V?%iJ$5up6W17 zKdc2GbTE&=iT{Pw2#-H{E_;1BK4z#Hl;6o)Dqwak(Vy+@WO2GSL}X&Sc9{%Ad5p7H zc-dxf-zN3nj{U!XIq6Og_gbW6ovf^Y*nQVC$WgXv*_DEQk73?um-&XD+eEWX#PX!; z`bK>k;p9DgJ_HH;-%IPS_pdjQOLU3<+WK>Ue`_eo1vmHO7!4X_T0*EHuH6vDQPWe( z7c(s2$EEoSFV%(|)%Vrgp83YY@9byWsO^JogQDX6`~cEHa)&uvO_%1Fq#8*y`$7lV z*~n-LLGs7P1D=7lKU~EPMx*JcE62RT+(pl=yHCet#qQ)al3|D3O-(Psu{{Y*wOxy* zp9)Lhb{*T^n@!a_`=EH3{hi2qTd-cf?1L|FBH@64`gYiPu+G_hICw`R8q)vf_8j(n+1JWuBeUO$QXO zUDmk6tF0Y#KA36zvR^qk#0WiT*8e3hkJ7C2eyUiL_}sGox@-L*vvsm?@tEgp4bsCb zNYb0c(iAelbCo&1Q=3wsVtXN?>NI?W*72&&tnkN(HMjTmY=_ZX*zHu@!3>_B?DZ-9 zDpEQB_fe;7oZ^N~SRfQR{yvp8uQ%72b;L5sr_J zH1j{re@-cqmdrYtb8FRPvwv~SHvg_!_43^_yWI+ry6i=2Wr{TW>KH}k;XZ3SBvB+@G?OM=qk`!rdQ69{<;8xrG3Q-^Z2x{0^}RmE!T&)a=;h(ofn$H3u@<`9Tps zuPo8D?lez}j?TMoNBnqCLc(KVW_W|-y>SS~-KOD_#eL1=H;&RcqIqBU>wbPBH?_#j znkarFw#dOzw8B-ObJ`^QO^lT#8<${igEi{D;iDJnwMYKWHWMK?op*R0@|G&j7b9dI zaM>$BXO|?(;OQi4byYBX?xl#ssc6urxEHy22{t4sIm*_CO70hZCL#{owKdhghpYul zeVd7ypVYcz`VQcO_vZ8`7oS#EY=3j_)vsidb$#Wu9G3hRcouB9xTU7+-&>FQ&Yib? z*$902s^hpA0#xHh2MYE2GF@710wTy;+w<#&nAE?JZX`|#z163@+4~mL?!%vFsp6fj z&Kzl3fkJ~~sVI+izE76?7Bb6fD=)-6{!)mol#%`K7J&TgfNOHTf!teY!TlZ;F@dL= zZ=TCRnu*Is$&H`})tT;)`*nfJV(9JnBNgm!Pjj~CZmw^nJ}xRfNtXU<<5z20-`f~A zw}s{Yp7%?q;7{CNo*NgQ#(FlO&TD)Z?Qe;e@ALIBh8c#?yt%lo?fRi!%!VVP&n^5o z+Yq(SAa|&`tw!^wFa8PXLKI^vQ}2V*v)Jtg;q7<@bI1BC>hzphHl{>>@!IyXerY*tDBz)XIL_lfGa96{ zrrhni^gP9VPJ8WmN<{nH;rmCQ?izJy(&&&`PpQ|v51cJj9M(VTpqf$p{ti(z&ZxfR z=_Ms_52Mux#q~Y@so`QgGyC;yE_}e??8o9a$CerS7!OH#Td0_+2_3eRqVsjY;q&8!j;kp*GJ+b-Y z^W`c3-+@?psoSm8n&dPQ^s|z^s&4OcQDqqE)n8|Rvq|?aX%HB(-#l;j`hZEAVXWQF zWoaKxv9_ss-~OTWM)r}Uw%OGg3(c}Z1HX7PaS<~6eYTV4{hN40ytG~KC1EGM&@znmDB;!?fm&XnRMP$V)#L~_wOMy(Z1QtO^i9&)n=jg*>|7P0IQJyyS*+* z7wXuDUJwlb`YsP&yZf)AaDbYb1VHzM^(2GYBXz8{|cZ7faPpSz!5|5a0n_u^Yz4#)AN{|^^nzsBqF<7=GngB|&T9Mz3@MDn&h zTZ!@4vqsK%MqVnV4EKFVviN|CGkeLumMO5^Rf?-ir0Dda2M0rZIix=Gl(8FAs21ny5`IXd9l8?gh9dUCqDyIPSdwp5NweBiZ5c zeh)>13RU#u8sYEzdv=QTKC=pcsDAVKL%!E>XjYLZiuT_9KvfeCv&5;q7$xyRexaH$ zj|lRsftx!94H^w(>k{o#-xwzA+zl!;A2m(B zFLJ3odl=<@Gw2%GJBpX)2~*y5ioI4mU+I+p(odOQ7w4@(2O8$=_oXYI;@LS35n;nk zGi`>u13GS8Ip<4^`0DVE40&1lJ^#bjAIix^pG5!(P@a4m5|0 z6ePRPs@M}h)J;}R*xdcZ{yS5lE{2SQYGCo~<6nJ@zlFWbD*n7*opfyS&Bc#Dd>B>L zSNJ~%rHAj%rg9s|4Y|+>JTAtqswd9%skW;@_dPxqe+<=Ud3q4w^2yZPkXM78E=7*|mo*Vs^HiRODWNPfR`^>d}v z7fNo5xYKFh2TVl-OvydFsH9{yGBx2;bB@~72=`A8cT@8<15Wi)c9uEA@cEiglwkIN#Xasvh+G1y4!zV%wUViSpWJR$yojA`Tys4|LU2eVnH^s zE>b9D%Zt+Sz;AZeJ^%eah$@Dp|LBkZH@4ge0%~qovBe?|_YaqC4zCg{h7xUhJY@>~ zBpPkN&Cj_X(YKLXRnYr|z-1$MWV%XVi{-fg9l131@%iVEM*G^WE6ZmAsJlV| z=0@^y-DhZ&uEjzD^UTv7hDs-~`s34!KWsZFs65(=;!{~nP$f~UWEGRCQ8^BmB(KJb zcb%FqtOpHN)SUko5wo5$jtj8uoc9+V`5)8u{~oL#IXl_GL=RzD7HMeQqrUkxbHt{% z+8DP;yWUTz;d!0+x#&D~={DN$CMB^MPKB&dlhHC~T7hP#-wO0Q{a#K=QN)XR`h_s} zwZ>qJ>BN6T3)_fQ z{qCJy>pT?a4co0N3>Vr3H*Xn>R=h>sTUq8CA7;CY5{)V0(wo-jRuoBzyVLag5=7{UOIWZw9$v1rb zp?6h=%wDg^@qb?s??fN09z4xG$g4Lp;NncI=2+c+pgvi+k^>_)kep1zh5ZR#=$SQc zPkXF!=CIb@V#=DOVU{n08?2Wx=Vi6rXhzN8kGKEG^Kgn-M&a$}%ZuCoL0?h!BcWV7 zyu>lbKWDc#^0|VDOoBOm5@h*D9WHt3@7-de7P}qk)Nd2I_>+}7qey@ECd+Z@2TM`8 z@az$r>{IS>fQqX~()AAV{{y==Amz39ODvHO8$`3@UR&8nPil!8=#T0n4cLZ)XXxBH+T zp2DRAO)A$eQBD4AhFX0%_&-)rV*4ZH{mNOZgGlBeh8bWr>6#Uo(1$i;1XT4`!(Z$CoI02_}}U6cW@8yVnTxM5UIR}ZyTpjrGImO ze`b&r1n$vY!kii-x-9XzYx}QybLCNZDLP&G^N;+)FLFbZ-_0WsMevh7YN=2(9+`pH zwqOx$iT5{-`kqq7QPuT}%`uM$#+&1WwlRB?%TL{3te|@5zo7```XXwZO8NN8#|PU* zZMe%kT^Vz{gadKjn6JN7EVk*qmEyjs!**^+{rsBP+e+T8Ks=Kjq8z)KZq@srho}th zh1cv}I5YKnU(fzZ@>|imsp3&dz46(&>H!K$&G}%y`~paotc*-hZP~aIXxrAuF;`Bs zreKtQQSn#rOMzqWh`X|pu!a#^@eEl^On6fl${$;{PbvP@vigUd+2@YrC@+kj_I>`zo8L} zKG$dKVP0PEz8o26R>}lkAB^aaEGG}-Z)37LwT^ywIc&UmV`kLFhFw6TBnwwFmoUh? znW#vd(A!$zwLaIoN4G;D)a2c?bj6Xc-7cgd$Rx2&|CC3{v_1X2+4B!NsUmKQ&XVs$ z6JDQ66&Add^|GZJjOT>*m@Sb??C29INeXFuAygOBvQQOB&j9( zSN!1sWxvG?CfCKmq|Hd90w0(7(*V{w?VOI@P@G!KMwiZ(Cd|)yAvj}F=pvRPZz9RY z{`bkbobd~+BwhTbl!?5@VM;+}qLV{>djduo$legO?%MKSsHVg%&Tjkb?-h=Yikpw{ zc(6CCKdYPb;+9RGed{N&*Vw>=Z1TK8wf^!)>@B>{{MbY`cIZRjm@x=ZVe?+ZF5l`} z!2U}?dKRz3rc>xoD9(bmf0vahVShEc0N6o)C>Izy5;S<7gyRND9IsJkHN>Z1mgaNZ zO-N#UY*5x_^-_>csrp6}k?EeqbG}QM2@*gNEm-_ zx{_()abzYAuplmtbiac=FS?ywQ@u069H7n&-HQkGY1^?h4 z=jU-l!m#)!wsDvJ`NHI}M>OR97!qvA*+|3mOq+-}<4M?Q-aX=~57)!_I0N0dhT^z| z^Mo6n{Xx4d3j-VtnGf<@_#eNs=0RZ;C_|_CO)_Tg=p3QWh<#(yWg$;Y8LivSf&5fd}3k7@y7fahasQo%FF<~_-#RUXN{aEAW<{7-~ulL;O#{F-; zpRN1jWQQlVH9P+ zbfoWeHW%LECs+U_tN(tPf4@fy!CQQP8;??}{gK(TqK=k?G3*c8O5WdEyGwc!oiq~R zyK^r2>V5gbKPMX&89(2)T%i9%hCfY-5W4tds$n^mT;n_pt)rH8q$b1-qBj8_^0mS*};DVsDXz_WyCd9`Y(TZ`Qji>$(G8Dn~N! z%ia{RYjC-z<>Hz#CuM!h&CA=MGKm;X0Fx~Ec%hhy?~Zp}U0pF)vMvWUgXiIgloSPU zfh@Ab_I-eaG!}kcz=g(xZ^!Ld_>&#~6Q?u&)U@DObM3p8^q;?Za?qI7PdyvuKw4S> zjXqw-p~Pn!SmKBE=joJx_8lUCNm6Aq&d$;lCx?CSB`%HP#YBFOkouA4s@ae8o4g=W z>KfB2f)-Z-yT+Z3a$c|&%6azEI=#kSbYvvPMMORbt>dwa_567ZxzsyT-gmR>^rRse zy5wB_C6)KPs8}dinEVbdn4YJcLXX;R)?=S>vnn)bxvBkc%*YQoHNr$xYsPNanG#@_rN3#G3TU#Guc@d==lCuendDm(*XkVwS zT&KVP|EPNFu&TN>>YJ8S6huNnQ0eXzNf7}Nl?Le$HqzZ7q6mnTl%kZ1G;Bb+yOG*- zONfAUefRR5^M3F9$8%j?=cu^XUTdy-k2%I~?6-#QlB`230=RaI4Mrgc27s4bwIdva z5N`n#Ya~zTF8RU06*<#|Pd{bBpU~RFQM>L6Ugu6opb!!SL5zVsA{e4k^>(FTU{UHH znD|fRQ0d;ix{W=j+S7C7VG4YL^Gi!e#cag{Sk<9n1Y5}={cU{w-PaA+wUF!rLwNtl zpuCH!i=;Yu9Hp_qlfML~_Dc;Hq`@K)4K5F8EFi4~YknKRfSL-;JIW3glaRvc_mUp` z2wMzjL1219K<|)uWMyZcg$~dAgBVOhPDdP<>E>+HRiD3oBkQ{pzHg2${nt&pX1so- z5NXRs^1;YKnAqZbQ>$msW+6pPfb=ZD)pUXe27WkvMmkO)2~&%}+aSj%y869nAA$=C zU~K@n7B@tE0XO?HjQd9@`2Q&zcnM#~A}I>w@U!nX{CnTu_7Mk<0ZYK0>zi;?j$F}w zhcJ02_e!oZeLG^3a~f0Xk>G&O$aryhC=RgLeWOSCzo~3h%te) zScnfH2dv-%NNx<}^+)s~Amzs*2`+@w4>)n&XM?PEm79udt`a~PMzS|>dw6YB#eWgG zdVcTFe-&In4X-bAyce)k`^J`!Y=q>N5!0g;>hVmmM0&MC>6;hlD)oq5lI3dcsM*f6E;79cyT7x6Zdkm#-CeAk{jer~7l* z)DZ7u`RMKVc|AL?IuT=65f1qcUw}=!wR^#P8!n@7rLC~U`Mc~~T;cD#EY9CvChs38 zvM=W+d|?8oj8~JoLZ%pMe>w9R-NC+b_YF=bcx3weXKzSITquEw`AgiCrpK<;{ zgoi^)tqv!nEgKggx_mdpJUt5{%>fNFX02}-gBva$pYj^!HS@la7cbbo{`kmSY`w!E z&lD3M-GSy|iC3MR;w8O)+az}t{h^(?bk(tZ-cy&b@6}Ku5~0H;7$K zCeWr17YCBGG+-zvKVz~h(Pd+2H-SgvmH0;}XJA%KhEJ~cy=c@{J7=gd-W>vT5Tbbx z0V^cH4js~Sd+vk(Sq7djIP0=r(~#v%3>u<^*k_Z;0(cB$)07+<2ORNnu)%mJtVe6w zLjStS#CX1y6AmFEr(s3bXBCW%OE9-r3c-)iCML*0v1a6thM)CJ`m~HbjE!VCOHRP- z*=;1zzkB=kEjdoG8m|V9(#6NK@!YHgGBPtZcX*Yaq_ahZ`lrTx5sc-QZofi~hli7H zDPmq!HBnX7l|02z#f%p@o;?M z@q)~#ps>rQ9MaWcmd&H0B)odzJsLC@?~vQIw|Y}GIp#X$tE&MxrWDL7Bg=<+gp5#C z3}In-XcoG!v|Mx3xAWO3pNDMa#C&BTG&aFqoNsU>wO%|>hR}1t?*?fK{)^}f|66NJ zs;*?g4@J(;W8&iYO&SRmBk8+fv1t5wcD(c6n`y`` z&p>!+5psJ3fVD%GO$7z~ot+(Ey+L)D! z966g-Gr?8bT6JjIjE#vIu|hr4|Niw`F&hWT^d5%JAbYo}PD0)P+u32=5GtFiBzD!B zvGINM#xxBX4i5e*FIYprtw~dZ4ebof~X07C;4g39uYkq&n zSoCk(Oy<&ukjvT@U73wsUtuKN%;+B_YAa?=dJ&k)Bt1nGvEvx1)m`(em_iBHYPGjK zRaYTl?29Vrr_C}-`krQ)((2C+;h4uaHE45Ee6j>+BlV(GY;5Ud8G-YlIA^PeCGi09p**KYhCJdSm6_=-}$H zD5CqxxWT}R(U|_8$5pbf_s$}eQo4bOC!ZyeWivTCzcj5k zJgaz-x2P;uVcc~_)|8f3uOTJxf!P?(O5ZO^Z7PQ3a+a6Arq}GUNZPCJ3BE1XcTV?~ z=eH{+sOd17m}UBw_w_Cd1o^vG%_q(x8lEP~?=)`2<~)q6Uv7&dWT_-QxlgOLF7C`; z&JhWtoNe@L{uk!fKYpYb4ZePoc(EZ_^z2YEl;zWRzYO{7A9^XTu$efp%yC`{7;;th zU~>);^ss)>lcn<{Yx96IqbZRu&Ff z$iDIiQD)!y-aq&w`Rsi=CztMXN0k|z#p}PE^lYuqWJ7rfGwksNhhv7{W$CjHDy}Az z@^!Ub&Tz({qsc-(OI1N{-z6vu|^?y#ja zZL3w1m)tGM{lkkf!VAXc{qMwJU#P##75#3GO{je8XPilorvk>`qsfNOiY;`= zU)iy`P_N(X50|f7eL{K-hl@+C;#ktMV)AyO&Qg`JsE+Xrp>s%b<7Aw$s?IB>nNFM9 z_21Eh**EWleNRbW_`gDQS1WqY(cxd zkfn(739Q7BOhI3UGL;0_w6BE$nApRryO|g-Bfk|xhoCA*O4w%LI3ERN@D>sKX&AeC&`iCT&l32!dlA-*luU`w9y?uvP+pdr z!4+ctgN-N8WWSfckcyJ(eQ-U&*O(U_=5LiT^XF7;B|2=La~f}6q8JdgvK|0GG~BO$ zJZ;ChgEHgDV;64sk7AK^=>%dE?id>3|$Pt%zm>9?fUTk}XU%A1 zqBxqrcpVMX+R|Z$Yze;roAh@VU|Al`?8vhBDf#+hKUsK^{%F0C;@r1eyLj}#Y5$LKJgcZGB<2ecQHTCPEP=dHbVT1)Qtaao2+>FZ;vQ7 zi4HG@_cvr9mbUZ;vu={NdE@IhPNT*@{NLC~mRFvoW*2=>2%BtPD*2jo66~@X7p44y zkJOUe-~1NgBHI=YF$bMORBDDfSvXm?m6f)Fr6sPWaOYS_hn03sU~{wX%BmJNZ4T=5 z%+6y?Jo^g%eIKd>=TNiHDV13JlK0p-yq#TyW*xHH(kmPiDh`$4idwEhpkXv~Jt;8} z%N+m{+R)XYYlB4b-Q4!F_$qm>{%^@8j?p-VwEhypJO(f9KVNKu<%iL4u3*h)vP^NI zLI_7NS}gfvehv>m7w+8w77O@P>tWnOm?+rpXD54oy3xuR?vT_k-T2SxV`vXo24&{2 zdO=lE1ic9zRt2c86`^d0@^SF8#^q_>yZ$!bX6a`8Gh2*@W*U@?nLGr(Zc0iDc+0^f ztc|v1i;D$#bYEW|kv|G!#!n+@Cvv1R`Vtx!pzsEbDu9+usQzmunZHQvVoVJi3G<5i z5qSF0V+c$MTHV2mYz!o1B&-31m0^9qlO407Q5nCYb3rn&YXsV-$Mzx=ua&_k1Q-7~ z_oMYvoih6ws=brL)jV8#*eU%%{M=yrhNuCUw0G1_BA!0}Z}4wF263|@#YNz>ruY6M z6Cr)-K9p{fsQI zQQ(R}v8#c{`~TdsmP%|e1;f8+b`x*Y9S6MG#?*~-4p@+7aoUIteD|42G5l&%S;1Uu zPY=tbaPspnVKA}E+4Pi3AD{u=2{<3;m(H3cpagq1DC>AAyf3%k_vsr?g=Dnnb$ zV!%0iBLE3`gV**k^kBfmg48D(daajq{oX_Npiy_}v8Rz@AMpDw=}jF{!Q2ZsrWlqt z7>j{Dq|e?$D*J)&Uruq8<_G)?1hgX!ZD=r#OCUu-5EYsYp|cyYsz8V|7&Kgb=)8FS zNKNbo5;cK=KRMpe^A)HOut`UnZ$Yk@gR0a8*iv_tNW<8TO#Dci09rr*?2z~rGC%$T zkK94$_^wwPVZp2zQ3o9{%GWTE5vwq2cPxt0nuIlwUS|9P6IS$!(a7>4_|1c z#>nu#f51tVmYRx%LDTSg-{g)DQ)iVoHoo{t{R*&v{h2SlnufCNuY%XE6@)9l*{f0*H=`5Kfqau3(e#6#@D zVbnZ+Gt%!k$XUD#o)Rq>->?3z+*Si4b3jSL((3L7=M;~{1O#lZ@AC5r;?6E#0Petq z*wZZ%$l(4P+CBzMh7E(cANj-Z6vMx`;k?8f2u&DM)3I!Qbf0|%{{UzX0~FQQM_G=r zAYBSqbi!1E$bvZkXP|d7wX#xjFHJI5nGZ%6eeNqgw~shq$p<3N?T0Im7ysu4Ky)T| z$!=AViAET3_krNl0QXNU-N$49f6kr#S$El zIi=yo)K)nKoE*dG(!5E!p{fN&ua;sVAF`pLb=ODQ+N{GrWxekKi~p?kB(55SCdZDW z57Gq0>3;BVSmlVpjVP=;jB&lM7*5*+WSk4N@KEiyYgNnMyGH~Kia@NOvoCCi@ces0 z>vze~1lRw$JlJGI@4w+8^c zBf#Rf;Gg!$&`{06fseuOm=AkKsqnuKsPqEZ^+tI4F7@{(<4uhM~sU-s+t;J8O&Z3&RzcEL@y7&rZwZU6}N-ErX zXyq+GN0313&rIEEy4?Gzoa<;(ke)R=`|L;E(4OyPq6=mWEs_cw*{$W1=hbI^N4O~@ zhuoON^>dh~fR;a6n^Vyc-Kg9~{=-6AQ1@4~YKUuLK`M)#n(nxV43PZL^$r8%q=6J3 zW8;<1ijC@|q^=!UZejGw=L`d~m4NLCFZl66yMlnpd4I?e#eyT9azGFuSQ(H$0#Mw* z;2=Py8fe5EZvsY)9WK2fA`k*F45=(gOiUb)+=fU{JiutMa)e-0Vhr&$6NsK64UWk7 zw&A@bfyBq0-Q4CJ%Yl?IIkQn-qGKtMm?Erx#N*YBxtr%xzfiQezG6(cx$ucn@d=r0 z?aL@7<5EE}H@_xfFUHf6T>3!r&ykr_s*>juNGUJNIDD#K2!x&!8TFYRJHmJ7{N&-! zwa+6blk&+f85wFuIj%y^uGZt+s_Z#`Jg?gXNQf9rmHU>U2wz+_V5GiH$sD2ehI)6Q zsv0uyo4-a;xTe=G_{5v8)O2_`?O_ydEYBZ=b34dwARYQB|kX^@Z6o#UaW;vi7cc%}t7sgZFT5LVwctL7|Bf9O+Ud>qwc=1tb z3;$ABTDhG*Y8e_ptq310pZFc#JRlKrYHoJu*WxT5-ZDq?*XitV^<;Q&J+G8f?I}Xf zNZrBIkV1~O`g;tfE0Kbw@P~5LuFcZqw{t8Lj2Y@WFEstXrr_b{ExwIMZA}^wqr)A& zwEa3osUrCqQ|nA6FxF&j6#f1<MOd&q(i- zu$*uaNo4a#3jkt8_vsjH(_`o%Si8{PRQmiccJPUT+>3yI6hW5UGv}Zx*^AZ)4&x;`aLUclnv^ z^}wL(aB4~N{B6a#iyvy1Z8}ff9HWJ3&Ww*|WA*kAg{MT+Hn%d0Ja#Kv4t6FboX{=Z zE2VzYw^Yt1d%jR>po<8Apdd?#ZR_(YIAHAWg||Bw?(9@c18(LVX=cFoS`cu!T%yqs zpRoY`2HnmCW+_g&ozyHJYdQ`mNYAtO0By$t%7Rn*dtZxdVSBoP<$ZoM?Bg+skdrexr)sSZB=TvY_mgucElKV-a#WQ|ue>z0RNYEKO;D z%Ji-NHoLUKhjPlSd>o}_GbVmL*0r6@qA1bovFQ-&C8FhJXa4HI0J03KIZ(Cq3Y4`>SJ={#-F)JY)Sgp|=D>X7K8n_*8A^1WT>P z?UXEQ1%*7Y732h1GpwzHe%slX3#%~o()L^1S6p6CNo>0BViyrGmCedJB1*^t-}_qV z`teg`mW|^@al6wN#~+&-VyiEYw^{_KM|ZDY@i}__=AgkxpI>9B-yXx-*~|N{ z3_LGh_#T?tBmKIqD0eo+<8HqQ-I%Rc(p2}!9CUPUdFkYS5jR&>5mqN-}c!x-$Y79Fc zKHq4&+H>i2YKxhc_`=+`r%&6X%;~0*9fqYE+2VN?@^Om*(nXsn&~PwRN%G}%DTVX+ zOVnZ~b$8i;c=y$%t28#FMf!eo-iEsLbwXzBEywfEd_C<)HLvCcoZW6fZ$xtadv5`E z;#P{X@v&%Io;L-rZMZOLma~Z+Zt^^zy#`sag|f4lc#3O3xj4r9z#4ywOX7>A06w}o z#WB#LJQHp4*iFKfa|N%76!$atX-enZR209;{j_oVn7f~%@2#a1pzbdMp~30a)sV=z zbn9noy@Ru6p0Ghyek~Pz<4^YyZAYM0XIsA(vAA4fH+Q(PS*w|TF`7>Pv%{E#fK;TR z;8)h|Po!7uu5jw&e9F%(B4Ka$Tx7Lk!R1N_l$U)}$}MxxI8I40v^h1Cn0X`PA5*|2 zYc%&PqxfuRNxxvr==4wL`kQUR?X$)1nfh}f+nr)XWv7K_bMrO~3uX9EjemywrJmGR zh-POJl>F(5NjdR3bvmHHjgefNe=1_wBF(JdWV%PMqIzUPe{yhH{-wChM8|2X!nWLT zkJJNujquMic}@u@VOa;5=he;0s)yl!`g`&gXQUQ4m)E1&ti6)xYK|V|G8|kV-nh1u z;4!?pbtyY8qNM;!y{A6QtPeH zmE(w_O18MOm8+*q7tXHz@p!7}#e#2n9C40EEBMTpufGc{-L6WmV1 z()_lCzC|EK|v<)*d?`5sb;-@b*IU=~J% zoW?mK*j)BzG;DeWQHOj^SBg>*mnqdAZzC?UT_)Y(baNRPFMHiRBx<V58{=QZ9 zUUPjd&w1k)DH~l~0Z?@Hu&K?XN=1iC?bd6DG$xYbQ-IrsNoOwZrguRPelajlqa-&=r3MnmtX)0E@8vDJX$?b`!=GC{)? zeTUwWFSSius3L~rPH!XEabyD3^(J=`<;i2~1&)JJBcIY(9kYK|m`S?E|65_f;83o~ z+Iy+xHR1wKmusooHNH~Z@%L=>IC64wU^c&sLBHqq#nFB4-q@1=Nv>d>6dINK(iDpv ze-gvV;Mb>9{ynQ1B{{LN*_zXv?$lx?lx>d*I<|1RA;Y}7lN$5+x^&Hwu2$~D7vvuw zpin67IMC+U>`Lh}C=m|#(nmjEyCejO2b<~`7+I2y8-yb=q4F8>! z)Tg^CA0GrnT#CTL#q)x?XttBnJP+61x7f7LkNdbeGQJy$FG+jg3LN3ruKjU(oKAI7 z4I4vwmBU!cIwsa9$mlEKt7DD!b3}{ltZvqC8NX8AOU<{`xq0o@^GFS6UyMb>@Z#Bj zF0@bOpL!A`>0I6e8CA}KtOrxJbU8xEc^r@gVMP0b00cmL5HIxwF5C=AP?O*8#A^_D z6#hH61{1*uFgV@TNdDP4LwRC$cU`x(0%76}^t-)H`jWwwdd6Pll^M>*p8H;2=lVwc zi<+H=0nbBPijfme%E+mT1rcr1^XMZ?z{G$xNf)3(rPy(jd}GfJRgkc@eU|>IAnLgO zqW=L6faHQlJfO4dBT)8wpk28I&hzU5o6&X6ZCr+xa`uft_cT&Y45Et>Xe7?g&bF7R zJIwgs&h1k!SVPj@Ql*qWkxwVR$+VuF27SDp zZyV+_R{iyA=>|J}*^-nlR*?_i*+ve*XQ@?|6n8xQ$cYw`@OxOYP{Va$u}akbYklCa zWPS%W68e+(c6Ty{w#J2|XG=K*HS3%sK5BQINUe6FFO;nZGHe+Sl-Y*44^oG8_)=Zj22lI znYCR4PI(thsi8xOE~`UPT^3F}OElzc&}m-yT|aX)ST)CM$4n{%a{LLI*&J}Gn+h4D``&XiD5J`{mL1Ch{A-m1 zG3|7Xdy;lnKwf}mEO>_bNQ2~=WSF9A(J60=)W3wm8}0ZuLxFbjg99Eq%&B)}F!|?U zFdT@%v9xxn-9N@F(7PFcz&*<%eL#fhYd~lfhL0PB-t(+-uQEi0Qlypm6ih%{K@7+K z$jl2G#7ENzu@H%k%IL?>rdM1LQO;8Ohz1JHiXOlEWm)mzq5f`{O}WeZ&*SC&ieGBy z*rew5^qm%1VaDWhGiH?bowj0Ezv{ApFS)b+bTf%&&!Mf=WH)(!PQ)oPcgCgO zX9K=9p6frqpB<1TdumG%Jtc~MaCmXMnJqPVZplDqqLNN@r`q*WH9NA8_0H1$G&;VY zym6epxLUSYR`HdkwKc)1Y<2784|c-3_}?VUqs*;nx|(hwY3Yw?ry|N0t&i2JSH!z> zHT5J7gHC*~z84m(JvV4NOV(>Q^*a_em3~n`0`EAJRj6l1bQVKHdavK*EKsC;BSJI~ zK|sqh)qw!k1h$QCP*2-7{LZ`ppz~hJYgf?+yeNx?RXzx!#(Pz7%B1hJ!npT#7a}iQ z1w|EFCjsx!W>EwzjN4dH=KyuzQwQB{Kr^4b{8HvWw-P}NPUJbxj;>x~(*hJv(=DOK zS>bCbe9e&`1E-$K8|Eh;2NK6ztYu)WTjlti$$TMiN{*jQhXf}82Y?mf<{ZlRvz2aM znqRm)vsuj#08;RnCK-+T-^5EJ+HK+ zAA0O0)#W=U!(vl@(>*7sTrSbrJW|snr;EYlPwxPOS{hzFKqzrI{FSv0oRPPn3oiGi zA!5~w7cUS#dvR&06MR^xr{-NQM>J*2{XaACIpa8WWZm3E5Hc&A4+Q7fW_d_2;Jc5ozDh?%qSA*EI z5G*^0o(~^B46sf_I5$$eBR7Uy@UQ6CGMxT72MRdArqY4eiXib3h&FteFM*`;0^VrO z(P2igz=KN+fy}pa z+tQtSKHt0f4$eqG59B3PxOu4w{ENyNyreHW78Kc(GO7l1pFGyGvc)tPa)N;M^}{Re zOzY1j&4Q}lhCHBOV(H28FEB+3va%J1DvIB`8BIww|7eQ*bLGvh;x?k=)3q!rYC7AA zJGPi^{OZGV&CoIiT0xmUCN}JP@P6P};*!?|%JfpsFj&umKFPfVbr&!o|j)b zD}G+;ue!>>c={Bgsv(z5-@XnXDesJ%I`nDP(M9ex6A|M?X2k3U%SZjX>yjP)IM7DC z=jf&o5>F-Y?%yv?_vnCoV;;ED3)M%zO;3*xpqvw`Q{j{X%ye_E6@9uCgm~)84!<(u zfghn=4aFT>(7kCB)*}ki)r|UW>GlO#jIj7cw-uxnG3$Dgi=nQBjsbW4cE4vs;iOlJ zZV*ZW<8|)+wzZBCH63~*`^z1NY2PZ2W1k_sBb1J0tuXn6XUg{lQ`OrW1-+h29C{j_ zBuJSKnHBZY1lkTY^0t4;MPsWPet7wfxa&Qia6oPI(kK^xK6+8{Z3QqpMKA0B~&IilhC{|2;x(Z(&GUrcPQ11!zk;m^H; z_)MFT!=v-k$M$d#09RYqrpr1jr5TKS4Pb+7pMn-X8A}XKQfK;ljja=UaAT-*Y+{@& z9Ca;{d{)3H@uuRFXii}nwqguc4xerEUo5>KYojE89L(dG@1aJ;uKrF>FB@np3Fpsr z=L%o8Xm0n>>~664)Z7Ja+=#XKYj23`D6P45F}8)4hS_ZGm2ZLS_lSoTil_kJWAX2MrmAQD1P$DMUKVUS;=07aPzBDMryX+z!-sfhC2CU zyrAwaXWFf;$W1D@YdJJ9eI;x!e=Sn7h($>B!E) z4msnNQBt=x(ohDh;bD}&@s6&s6=}Uxo1XA2jo#E%M#SxPbovJ$Q{ZU{|#){T>UDs{ImUHkiJF?-ZN4z*z zpJSLbJj+o8Ot9jLv|L~3`2PY}%^_aWukhqe68)+^i`h#n@c+WgpLJMX z3F*6$qLMFfBKOwT2UjJfa+5|RHZb0>=<7FimBiF#Qn4kD0cZZs*Tj?|*w+lkh-^Jl zcA;_}uft3zZhfs|E<|WG^#?I~#}jVR-QP#F4OkzCM{^7Ni6SxvrnkicDwR5a)m;D5 zYQacu-#k7+_PoZ@lsbRvHo?}u9;`4QsoMSnZ5?Skv{c^ld+#=dLR0dt)}#!1M&Hps zyN&o1hZ2#qE2L|H#V5Nb&g?Z&!BL;`!{4fNTFk;~Mx8<4F?sW3m zR*<^pXDizwd6VfqS>{!|W)lZh_6*^%2h1dCig%2wO`fD!94L3urzNLqd5Ccuesicu z;oIO-P7~Tc>9!mQerKZKrcH6*ikRfcu;#q}DMIobq5tmz_=qa$<44|J7&{vVJ>p7O zOws)B*d~9N;~aT4Q-oUc8@@nc2~&@GEGRRxtJ8kFZ7XA0XryP=!R%QPIeOt*cwx%z zt~c9?bg5)Nw{bA)be~P7qWH}BVs!C1AI*eYvVGADn(#WOg$e%He&f9)%{Z;MuzQi( z+?N&_BTccqH+5f1)QiL;DgME7G*dWuQ0)@oAPONOq!WrwX2l{z7sGh5A=QkNj`m~ zO_GB z5eEee&s{jU9TKV?y!W>IZ_IONF%&9Ep8#{ntjcdba748D>Hfz1>-@a<0qjveG+U^yuZU)Avi$mu{$jAsO#WwP$MYAd^$MMlk7>vj z|CJQRrozjKxpu8)h1zj1FzbxdB32uCH9T@|Zf_Qca9)Rza^8XqFN~m>Y~b{XIVI#loHf(Ku%9+JC@-7cVl-M#8}{Z;zM%s9@3 zH!p@w$-{Lh=em*;Gyp%FfmGrnBh4*ffzWYl0DmdJlHduDTU6SAtOT7AH ztF1#l8>I}B`Gtc`57H2_>^i~ieA^)Tep#C<94mz*njy#DBDzWYmBIyObz=lCrUuk} zPKXoV+zjD^1{d0YqTLf*ScoJd|4TS-WbR>veMtfSB~ti+iiJ9=GBOwO4-(DqPfm}d zotI$?Ll6BlE7DQE-|@xZfFb0ggu-w{9s6KGvGuF8`X# z&O%Gp*P9=q{w1in*(JCkrA!5;N1>FIobS3N$=%(WF@?+F913X@f?|WP3e_jAraN9&+P@CNq&+}c^`8C?O>t}>%X;-Xlzu$_E$oD;AfA@+T z>Pl28@9F9eT?#{|xrmE&+X}0C=)Aqykj={e_u|U4%yJJQ^yRc%JHAbAmW|3I@fmxL zl9I5t^c!WJoFOx28w5cfW&&)8V>x5Y&mtnc00VNyxgNV?Dyo}$q^pZs7oHL6@jgYtn5D(uxsZZ zb33)8h2R_)%8;RyFhPYjvPBNu{7}hlJH$jAekro$uy_~{l!zV;rXbY%Iuy7AuJoU= zCm$}vUGNAfK6*p}B^4XLc$6jSS(3Vda+mK}X#SGy+Uu!}20=37t!;;LVakj`&M;?j zRpF#2K~?y>U<}QLW`qewT|Er^+hG2{0%YzVcS$VD`6Yp8gG!$ZsDZWEh`uGEMOfg} z1tXG9kwt;?FAaL1zYpOs9C7a;rFifcAt&W--QX@M6}Fx_N;*iII%Wprx-=NF7!hd< ziR?gqmnE=cIdzLe5vXG$#RKwi#eYZb(4rw6x%0s9kOI;i`~~lwZf_*XR0!2fJg?f( z1Q@9FdGY1zZPn{{VP}HelYc>If{L;^X#84$|GVcz35a|kPuOBCpm7B0;DCn?zH|D> zmq>2Kd08F2QBFPvfb?uM;e+0!SK|sc;_KsO%O_fF3gRhHp8<1Kf(o-%J3%rX2^y6a z!$cLvXW4y~-gn;^>qkXJ0%BA;XnTOPtU)$nww{EibG>HILY_HVh7A^CMVoMQo%fkU zwV<)RY?+%u_Kp%$2j|o7MxLrf6#aXaM!=W~#x-ci*~SMpDio~~6K@d_fJk$3=;yG2 z`PO8*23s*fDW-gKP`Aj=M{4S{d6-xA3VaGQS`A8mKzBo zAzqtBg|(eE${9zmKb|MRZ0`R>I{F>I?9ah5#Oz_r3~iYsWw@Q3nW?C& zoAjz_j&lBrI%G${{849g+c57X*p$Q#2=}e5^dqg!h!z)i^ecX^q;UuDf2M&Wu}$}6 zA)6ul4zAKaFs~HBbudk2M&eOOX%-+Dfs6aBcDD*UGa}+VU}(!Bqw`+Kh6)xr47v@R zDd5mTJQN^!z!d!k4*!d5>Oe&+G$Wd8iCl`WIli?zlyifU7}^UE6fe?-`0Ih+>{bU4 zLvbX8CL#~Emz*HEqGa@);lJ+3zwmZsL8NzZ)gV(P1|M* zLk}b->Vkd(i-J(I?zOfJGJ?#NKMGTx$NUc^f3E?r9Ar{wGF z>u;zFu4HDvC8EfTD)FX_CvBMHVx&Z4(fJp6y}_*r(C##8earV)Yxr%~kL9%$ljD8s z`71F34zq&wQLL927PQgv?o9WDSLJJ)H^c(WJE-7N&_E-|j6HR!b>GPQrlpQWX15(p zabD6Jd*yrDWX08PpLI44t0|h$gTv@zd@#v$=UkCp^94pJ`2B8>6VAt}Ch)(2j;Vk0 z3>MPd1VRxuxE+DRJd*zL_}KgQ@gF&4Q9ybCAwP%p9;($4=r0V;ER@7hnf8Dec+Wr! zeFDmDUJkwGhFDfXK@^=`SpaA`FJTS61Y}xpnL_#u8L*Sq=Kx|l0|rC0!@s|fy%pE3 zXI>~_UW-HmyZBcc1dfsNgasA-w8d~Ub8&V|{%p7?>s^OLN#o;NxJt+C&EpN4WzJob z2W1M*0T56zG!!L3!p|YPb|es=gq4l0Zo$z3lAC-sL!7?g9Ye&eP4LepAoOfRWY4%C zzXinMhfrt-X3{Z%3N2HNF!)^I^Dg#$?18@o`IsO{ci}gA?ilhOc~^(GGg|P|*j20x zt4W_Y!$O7hB{f0hQ*W_5g+x?(exv5h7k=3RG0sN#OMj?dSpg4FMkXaS!HDp?e$ame z7w}WRKzybtrp*ic^}Bc8yBvxA6ft~Xzp!@UTXA-*5DkicEYe|R3ruX^e4ptwq5b6H z`Ix=Yutz&aNw@Na+HNn;c=Wj+S!OQK7-b6r$(!fw$ z?cBWuW#L^zo;`xp!*h9uc^gv9RjVnM@5>!g0Wv{WC(@Su3FBQ0rzo<9k;U)iV4b#s zvx%$Dy)ysWm;hLf{2GYB;A;dAoH;nT{3)h!vR3Z<>DuI0{1%6OSb|DOeZ4H07Qtet z@~uP+*Z`6Z8qh zy}ICxq!kdSAF{9Ch&H|!M9{1Pr(;ospMj>GMagPDy+fVePeT+z#OO+!K^bBUw={OB zJX3jCE7GEgn8*N(zBL=hV>hU1(*^aLozRRa!yY^Pnj_a}=(`SlkQj~qlhbgEWZIAb z6sEi|91D`kctLgJoM^5t@to}JGzi^VDi&;CEtF?MbWCsqn(?=RKTw1QS*toheCxX4 zw=eg>bA=6PuGg=$LvX3VqDO(&RglV@)@or~w0Wey(-)(-L*&m^n)I_ME7d#kSW&fY zn?a_h$Ptu2OFCgZViHQ-Jt-dcTI%$s=8o9FO36Q7r3p@H8k=(k4gBsN3d~+ z#`Hvbuc~>SY;b)I-Cgk3mXFcZ646+Hp8#F7vhAq4Ch1&Sj0tqoO`09RLoB?~vF=&~ z+9Qsd@Go?tsDp`}q)*GlDj4F&ZI6(>2E-oi!QG0bx2Ipo6DEUeYFC=v2nUtYcJXZB zylhnCbC{Jc9(t^)$?tRMj704~g{Ky_rA7qJqu&)g@a2;#v#AW+q$XXoNNG0VQxl!R z+nw_BD;`RQ#yPcDiSI69v2$=>FMakHF9Txa%nNXF+m$a+O?s|!AvYRqt;E2!H465@ zhsu1gC4n6WprK(&uQcQV=Oy&mZ9%Uh*b$McMmW1cy6FIki|C-;QhWMH5VmJ&4&D*~ z_1w#CYYbZqkcP0B@y@>tr-l}OjUQB zqiu-W=NB3lIw6Yr$J-1#_$l0*5m+xH6@*Xhs2lT=P#TfJ|S&zaRz z&6lc9O-!7;kkQoLHpqMZ5_V+EXdX(=rXmwObdIR^xKVAQ8(M?UWR07aqh3qaV3)D7 z`p=q_G|W*!t}1OZmD=_YbJU^IG~0%qH+JI7;|PBGk9RlapS>JAckEcg)fjJZR;!v9 z5GWRek2ODK3|4M%4BG-pGQq-Qu zEDY^AO(hiHc_4Q6EERQ>7uhmL2ffXhkLEg7IZgpe{%H~7EB6g}PSS>N&ur;zyYBG9 z$*Vqhdmh)q7ttZbK2%6VR1^wW^)~kAeyJ*{{$P2Fi4AWWaPKX zE7GSP-D?5~W`$AtEdDpI<1l?0)a=v6uX3?@@@?;Q@LQAa72A%Vy4in+Ci`_c(IvB* ze}~wAenxYR+loIdORocjNTe9pFSG`WS z!i;ad=F$^NYp2X4((zT$d&x|lUrNE&bx7P*c7yEd`9BA1(+NZ5=NnkEIW^csJ(HPY zP#=>jaP1wX0q@dSUD)x4@1RBz8Ao4c|GwVe9eB@YZ+&gVplb4o#L?$)sjtJO$B+WR zH-aoS#JcB;zQG^6(opkoYCmm;*ZQ5u#&dqkY6WqK%hzVw9#tpI9d)JiSfQTM%dP?0GfM=+PE;8eI<-Et5~{9m}=03IxauorsM-x5S7!wX1*o z#>+!b3Bt>yW9IlCuNU)~qw^jo*K1+37vZegS+dW1{Rqo`Zaz2oDtGI8b)BA1HOm`Ux^q14l7MyxOH(-=H>$(}s1b2*{f zhgR0&TAX=+25Uz{)sqF=dlp5XzP;^hdzRmsTbrZ;%}%0a+Eliq-#{qp`;v(^q_F!* zO8>=*NY0mjP~;9jeh|S(Ry7%&&_VfYBP`&_hsyF|;p3|p+@omMoS%P7l$$Z|R#{Gu z?k|r6;+i^cYqzGL;4{TYL3?qbIDEsrYqkQaM{X|R%n5nA#Xy|s?Yx)adXzfY(E#o+ z%q7VhxE>W8Ya>_^PNnxvk4C)qdOxkaP0)=F#u%=D#{Q#-5HW-5BEG~!B~ zhsdbN(DQ!VuS3B}!+pK#Ez_S^E|H2`KjV9)xbD(YpYt|l!RUnfg>_~t5j*;)cxY4I zug9$B4~J9#lyRYdf-ac)H6utJy;%0@z&88E@Z@o*YSQuhxJ&^HUdP6$vWeY{alpz1XEUG(y4cT^)7LGSC*+`nq*>6FK+>xNNfx z8$xzA=A511sR$Mn%-$Hod~=YP8?@Dv;~c9!++mn?U>VUU$H`*}VCqY|66RisJD{RI z$P;PCq-bo?Ta9nmqsB3Id&H!Xhz2#v?iwY6%h#2^~TQ z3?89YaRnD#Z(f>#VBZXn-vNpBy_$6d>5bgdM^QsRh9687eyDMK;`U(WZ%%3UoR{76 z@v_Y+G^85f_ncSN)%&hf8aK=2HCF#EN6&i03W_1s^~aG}D1?+=7K}oA-_Yv(#lf(1 zrA!Tl7vx^DLm+&3X=5v zcY75?TIZC5p-K#@w9BDBp8qIDql#Pp$ZqfZ)Hbz0IKqTcV~sF7`wt}!8+wJqUM%w6 zyGyV;``1n4>+72*PI84C8QQRHp^g~zqjzvT|5Yo04K}&B$a@{+1xv8-K;?JU53B$1 zfzPpY6e=-CU-he(hr;KsE-p|6qGMyjhgaonUSQ@LHhMmrS+T(dHPK;iQaHJnC8U>K z8sIqX>5lg=m$grn^8MvpZJ4=EP6!D) zm{{Ii6}#jQcB##sJU=8%5)S@2M<=HXf3grqJTTa9HTW0Y4QJuWlRp2l?xATUONts) zXZ|^=+&^Xpt*qZTjcEVG_UqW|metu-z8luhpR-VfJv8(c{G`sv?Is+zVBC0d4w8+O z>87ma(#|fOeJ!6HqLneDPsPL(NNLTCsR_=%lyTTp-y$L4bu@eTn7yer%5?Lx}I$5oVqsaD%lqkg53~hXbYvP(8p;B(HQ)Ne+ zWU+z1{b1t592T{xy-}t<1b@;?7J=NsC?SyqGBa3%B8FFQQ4;q}PO7m|;ut~mI2Z|T zQ&6t@8o9a+4i5|Xoq8jlJ5^OO#9W1#Cm?i`Fzn*u0%h{f@d-u{i)4fA3@sUW1A-3a z`bUen`A;k_qF&^`j`=le-tcMf_{_yLI6Nu?)=b|B(e>%%O4oJ?4kL~>38`O zziBgR9G716*~!!yAAADj*DxR}L1(GOcV#w!)U;H3Y=dluu%yndAVf2{Fyqv7=jFW& zM8)Tpe~2&th=Tabxuifzmb;PHdR@rAwh~kREz2w(-iDKO?P&!z1&4=JsrKU6-dk|% zV(PduNUuYJE_n?biG7nk86 z3Mtt#PW$r9sB5q9XfmcL9`IiX6cQGic4!_!bG_Dh)v0QbBa~@vF~lgKN^zayZJ|Kd zcNGuul;5#!u`0|Jh5fGID~eDVkD2#>7Ud$dfItg-25^aLZy!ce$Xmz?lyXUl@BG-^RBa-C{s>)ys7ezs&MUX~N z3F&SSlnycI?rte*krEII327;j?(UQnQR)!VA`MbfZ~xwV-+QbjYe^j7oS8j)zWv40 z6&dpD_k|q!s?$d-W5>c)4pWka)1!ssl?_^0B?<=dPR@EKaV0|n`g;g5+U3I`M@E<0 z+If9`e~=7gam891Z_6`jxHRmq@Ijhv%j9(>o*Y>U2`@d*i-ci`-bfWnUais?&nD=B z0{31vCT^`Gc4J$rKCM@8{h9PZ{Jx407wcW!ep3C+NwS;FI7PzBDjUlSN)dn>^tup@ zW&^X;TPEUo&2Fcdc>s$@_}XFWv>)Ndu!R8uNui38UxjmhSY4o z(36kC2qg>FQbJdl#2ltH=>= zn+TO7FISJ2T!&sNMcNLDtQGQk;S;=Rw>P7Wl??lCt~S7au5LcFU2fGlZfZ{X9p2^k z(yenVrkew9nK>3LJGH<2jvrs!@kq!CwfvCCQVe;_9vcnAgaDHp1?VOyP zAe{zjwBElDoZSLM9y0b|Bf+O&LI&WBq_t9=_5Mz(^J}-_OW?@lAd~{|GNc&h84&y0PH_20aftD)QHQ;BTld%i zQQ^!#f^}QRpN0Z1Q9LCvKl{TIB+^JCym&Q8yd@-1PMHbMIDMVwswFPl)we}14lFk< zvA=0W@u`kQ=$JBuF{xPakSj3Xh%>X)4sqM0YHz{+O-udII*jS!)56J_)p6uulcYgh zs9nSZp$I;uFXSk6cIgYB^x)ea5=@jq1F8oPFSoKV-hZC;^g!@FK}mp_{KSM-4wg@I zUs7@gDvbgxsq{A zO3B(```6YtRj&1s8j>RuSe<7#L$3%>zDvO!U?mUEaHwtBs6w}%Ua+&T4)E5z1dH-; zT2xTdQ`oCyiZ1cBF#~DOw`!y*h-csQ2cVg!pldY|QeXB%@FpKu+ztvysp+A`?ieBl14 z+TLTE2bZy#EIOxApsIX12HsjbDEf556MRHq})|RA94EWl2yVIki{pf zjX`b^S?|ag7Hj%$NqO#pvDWo?!+ACGVs0gojl0>za(yioIH#LD%7v>O$yX?zwH)M; z6uO7wsvj7qp!9y~xQG{GYslNCrIuR%md@tw<=GJKi<6?~TK-kXT;Q@iekp}wI4)E< zx7Bc4+1i)hJlN8DpNK>I3FC{Q7jOkRqKvjwqQkPgRZ;nn#Vk$xh8(E?+UIJC7W=e1 z9Q3lXmX&}yA=wvjUmfQ7eD3iNVU*{_h9{f`TvZ<2<0<|7<( z3rCXf>U-^$6$m%RYtxLQA|27q-7WB=iynRPh<9RQnyg9KtPBxOqy^ulqq*HzOw&Hx ztpCHj7;{rAqRCFf>~VMZMYj_F=^H5p{*fr{uA{A~4$+GfsxJ5D@f~D%Jl~fu{DAm+ zV9#`fjI$fBZO34a*-?S*F5iL{46AmpH1TJ#`zsy-Sg)QD}HF zSPFa!IP@&7qU9n?nHs2tJqv2mB)Ck?)ufC+7{t+~mT>oylW*MCV!1R|(zRMr-u2N@ zN$*-T6X0YiXYUoQgoIhI@8QxB)+;w(z9zH&EYZ*gUotVLtD?ntytQ`nWxycm3sM>iC5 zVT#7|xytojnt6#JPUv&AYV2fXDQAu0Ni%b;dpBIS3yLI0$O4mZS3FwhZB52g;)(0v zf*Y^!xK`n{YDrVoXoq}y;rWd6XG9SbiH5xUB`!&WivFbAU`fYGP99@|NgOf2_Mu(O zOV47<&!WF=Ns%Ce%)QaBt+2#2e_Brfht)7eGm?cQ_^q;%!j)v@h_U=npQ{4wCL}y@ zD~R)XwX1S8nwcb@G)Y){;^76y7(O(7k@%1I8{#d^)pbxUOSMB4C;W!UKBAq80p_^B zbk%f)w{EeJyHjn6{v~?5e_3(vdo-VX^Rcy$?;4L8{(FiC|L}l+@ATUYZB8(3CrtUAh=1FWpC zolXUk#ciAJ6(~S45Qr5Jbrwqtj+cuou$qJVA-}Ql5 zw_O$8q^>2|x&1no-j>zxv3QOu+QpypCVH16tg-loc3yVf=($fXuAW&rg^s|LTcj7~ z?;6wBJXX|iac11T%y@d?7-T-mhjn^Ro$x{ZFOJJc@iTaJf+zJ#;k&0!I9znt6` z`JTDe8Gkc_?VP*#{I{aCTczV4{IriB$I#{r^c;B2<4_AU?tcPL*CRI8oC+Fu7{8aS zxfkv!o!56fh^R^JM5}x6(D9My`6=0!Ep~BpDOQf&IPuN$Jf>UQ1FuX^D`miK?;ncs zudKB4(B26B=n~!<@W$~I$EpdH+UK~q9GCB7whxkUd3fz|%urTU&x>;M45^~x_7{Vr zD}u&GzL&h!s33`CmN%CXWmTe>P-}eaZhrOG6}CH)&Lbq`zsH{GYfFfXN()u_e`a0N zgpg)d!mvk@;5VdfSR}DZK=VVj@5?}`MPxxHZ^K)QZZ)G}jEadz4bI%dZ^3TL?lwEa zmt`ep%L08F?KQO*b#LQx_H7Ea9@@DkSM^|6S&tFgmZ)$G-+EAU z`R;H&(_zF?nXh+;%+UGk1+)+qim}-4nV;s*GYbW@^GBcPHwW&oiDy8TTLguAsmC7q zsTihx!!Z}thSGCY+w_k{_ewPqx`Hb28Z*l=@XfonTZifQPAMv7-{9f1%giymqsJ}~ zeiKlLob1}5ANk^KDp=oEm4E-{BZ{ot-en##Oneg8*!hjEv*a9mwNF-JLwWupXW56cXn31)|SnVUNl*utPw|}?JzV~m&iJ!Vnofh=7S53 z$xOhN-YV4LGp66Br>jNxDh4z=%g1ob50w&o$BxJ&XQofSJ~t3iXFuY-&9c>xvpdC_sNB2ZEHweM*@G*gGQMrKw0=&T?gjplZ%+lQeRip+ zDeD6xM}I`0Oj8^m?4bKONmKjYxYgb0?#U-&h~dm8GMUPMzId@5SH5MwD}HNax6yEM z)pY83PyN%y@%_|>EbD?LU(?oI&SbCdXZ^<~Qj5g#j*CY(yt?G2Bglt_6Z7!3^CCJl zxqNB6XRG|iR_=};jTay9sE!Em{vo8%tNa^ojm#OUbvVEPdbw2F#Hmh$eOv(v6K^F`hW-lcgtu0Y5PF;@-EF zu~byS09wG*6cQJHjG>);U>6n+ezKIQdH$svL4;mdFfExbH5`4jPIMGVQ3mM{sZiEC zTw;n)Y2z!G{fjuqH*%5LGL692+uD9g~B*_~XhkiSBcye=_Ad;XS$*o>jE)g7>`_bgu;>1i zp~%>GN92OxbgnaULg!XDp1{7PKsU;obLr!*QOKk9g0f2cZL0;1^OHZRTO)lt&mx1e z*>`8maWx{AMssK9Qf`qrtqDE@@92?Q_Zj2URhF1Y-{z8`7ZH+P9)P%|c81-Gi77wJ zE8a{WKiXNq{|P=P!Q~LX4*WqT7M84nf^cvN+ENt;ktKkhcgv@#4E_R6*$6l&&?A9H zf`LQYf+%pPEDl&w)|MGPh_%iy>)%V7JD#TYU)w6_0Ls3I0#RZ?E7 zn|aUQfYn&b#=*N7BBNhlZ-7spU3^$U0UBO#K*N-XkdQC}Wil{O6psb>ErFzH{_yyT zd{lfqD5YshaiZY@nxF6ExPu0`@3=}St#e`C6L%5nimGCly}c8{Fa`^(U@VOCofCA@ zpqS^qS(TMkzyovTctn?Ymp?X)EBVMv)5JXZQ=zrNSJyF(NVM=t)?S6N+5M~29ndpZo;N-b&#P0 zKv$b8d=Lh#J32uG;HB|og(Ztl%{y$i8b1>*IXZAo%nn3&S+H2jK-YxuB>+352EVZm zFwJrYc;v8#-Om>YQ*iU*vix=zz!km99n;D!?k>9hj_s!<>a8;DV#Syr?sTN9t5_Z0 z3#sTb+>!d@TXcB)Mj_|CHeCxxPQPayrd^$X?Jecyy3s3}yCXGTGY?N!|D4y`Oi(`_ zlQfNbNjGfTFU%J2=}DP6@92=GTuEh(S~|gri(KhRt$$7!^Z0(SzIPi#%QgKF9rlW@ zlhFvGNNs}a`>Zg9`btHa#ASNj?+OUSFk=z1H$v3{Jm)s76eL6&2#$fk>xcw%?m>YC z94jj;u)ZwND1C(>{yL7XzkA)^pxnS($-A}jPi{1y?jkN(ys*=s$(d?=j0)?R{U)BF%rrS`+fz$Mz98a zh3HKYu9zp!+8fIc!1a2koLdVI#Em5d7P9jI_`(c?DD)AWTV5O1`U{8^Bl6NVG$aFq z9BctgQQiYEvO&cB6!r~KG-tnLU=CzBi`gY9brdpE@$iAUTSsUo(L18azI0N*V3oJG znt0Qenos4^xY$!w)Lk_<1=yModD)t8P2Lxu+nCiINQ@s^eEp``G{^N+F@sL>+_?5v zV4%*EsT205gCNG4uoeTHmW59I7FqgOL3ab)d+){;KCu=Qm6LK7nG6XN%-`npIXzO8 zmX?$I;!hP$Ac+RnpL59guCfxcf4j&;ju&HK?>~L|v<*1q2ul|sm?G3H;J(3GNOV0= zqu!MjCQu@X?;xVx17wdiQ##^fLjz?YZ=}fXHJCik|IRO7275|#5K@Oz3CDpvJq9tP zKmb)l*a~|Nr=6c)j)uEJU?F9>lQzcN<06P z3p14FIUs|ZbiN@5SGl)H!~>#(N9ddY{D6pB+0#=P>@5)VSNGX(n>6Vi;3>}o3opB- zMkCb$Nfml6aLvTj)KE*agXrhs%3QTQ2_X)N0jYHH14U(Jw2@b>0g-6w1^t6Izwnk{ z%$6u2GYu}Z20c&uTezXE%x^_=#7l=e$CVgkU(Ne0xLVBe zV3+2KeAm77X{u=015GwJj1wo&P~ew74;N9wQ(&VxkQ{rw2{P*$Tn$9-t_dv5=2L1>+$|=1t0wU$Nql}1% zDA28sgX7g1)W2m;OTD7k-{8Vb6O`o~KoE>$)0Kzu7xIe#_z{(of(-p(h6~h74vVk1 zA=p9y*ma@OnJ~^45)wN2b#`%n*vvp3`RwUax|KY!18;)@6H5J6_0CLtn;=Kj7*;-T zCEffmEeegbhx$K{bEW#SOUw-{h|3uC_bujiw@$zR9B=Pj;?1W0O;V-*WQ#SFp#kU4c9UtOV(=?xXXOA_t);DFu`beu9 zr8ykBZMB}%d)71vf67_Y{5wxBaKPo+Z^g)v#)G4GMA7HN=WkpucBk>kG1XEiPT}#S zi&+vu@MWwJELuEzu=q%J>SY3qc?V_<&(zgr7;l0+0W=UW#6;MK@Pu%}GXxj|Nbn|7^fX^0eN8k zj~NO+!-#|dVoq|(%ekGW#!HPoVD9m$u<#xTQh+uM2c0|@r->rGRT!8Y;E0MqvtU)U3 z&DoT^l7my%wAmHo)A6VTGxBEf2g+4+?2m_=d(xQ?Mx0*@Q|vddW|-HOwv&$JAzUsQ*PeEv5&Yth>Ux_kmmo{`BrCv1Parem|F!^W+R9gTmB77%)2 zZUses(INH|BiujmD4cGaI*1nr7z~>#?NGxaQ%vdkG4^5wYoT2&RTR14W_Ih?6ZxZqI{fT7f)cMV|9L~1# z!0P3Tr_N?)4WE8`kMCRU=cb^%yEnH zrR&1R-Nx^@TBGyL`ut0B+En|VxX!C4yFUlUh1Y<0ZXUsA`aD$hs*%y&f{wEjYbC#4 zSI7Jn3YrsM{${~D?&{>BF(E& zd|i1a+&Q>L>coJ$kqnX=*oi7?YF(3+)^3^?U@@~)g|b_K1)Ez~$Xf1et{;@5Y`%Q? z1vn3Y+=rQmhle22{&D%3)?O~cM_BCCCtMC=V z80e5_S@3r>zG+F+RC5x4y{FfvmJ%EYn?BvMRD8y1SU_j`yQuVm8`{8@>e1Ql_|K9d zjhqH8Xdv{+=s$o1v{`!}35bG!Z}d(OlU%eJpA%cik4g}5oY#x6RBz2oJ*n6CO?@z$ zB^RRs9@NbnhYndEhmVw3`gV>*JZC=_t)vLfu6(FJ@9cd<*xt0qoSIw_a>qAuXpi`i z3pa%Qh`vc5Z$bYMf90IQr_)1oX(8AC`wekZHVVBn+B;}%Y1?B-c0c2NJ%g1T*=uFe23?$&cVfg64X9{lyZ8A| z->$^l<#0Z4TMV;XNWD12Gd{4w<)_8NFV&cL{&AtRB2L>u3w(^ym-|+41(!+D!2X0+ zS!nex^!ty1ABBvlL45b^+fxXFLc~#-PjK4PLArscDeQgrk_vQcqtDMyh;T5#Mxm8Q z3CyYF?%sgVlrp2v>xkF}2-e-945>X}j2Sq#X8I-i-YJ{}mB_7ce=LU`e@<~2$T zF8M$3LrTZgRJf@o__TbCMS3%&IY6in$gTJgdnrY9zp6M@OE@{r=j2bs`~DAnClBzU zSw0vK8*ZlgMSIQht6+jz)%i!ZLe~{hnw)qK7(8gq?&Ef57+)X?(|I%mPM$Z2hZgVe z?|k?(5!OtiO(lAEW@bP^0gKq*Uw2ZWuJ)fp&>7f8y9yL(o0~(56k16$!K2LKe%B!v z3N$Tk?Jr-xOqgm%$-Y)$jGe#>ZeN6JNR?;N(mQY&Q6egKJBg75)9kht)XA3`d>2IS zNcs7n^C0Y=CW{lF`%?dK&YeU`JWRwQsN@W*96e9?0k2`(6%Y}WJUreMyE?{iyf$m< zu(6g4PICW=MEM7guBQe#^Y%b!IVzWH&2)X6NF-%e2Jg@9f6ko;gM-Vs;tBgY?d!8t zhngr))aItpO)-W4;i{698kpu?30sereNH*6JKXdN8fk-qT=o7h;q|`=Y{wvFvOlL2 zsg_u32IfoBe@D#!dpEDJ@G}{)eE2s9{NK9}Z^i!?cktg2&X@exiuwQhT1Sol5^4VT zjqo`Emj9Q8_rDKQlKk&E``<@^xrhD##L@rz>A_c5{x4B+UZICWg-tz@iahp`*5OR> z+c&eaj&Zx*t^1z+V%sN+c#^4xhX!&-&T14XTJg`n(R)t{`Ohm? zYHt~le_!&VIn`XI`KId&=IoY?YMF*)KdfIx=r>V!43uwAt9E}gU=-FedqFi;lrUO# zsa)njeQN!B<-Yv2k&cQOjjDk4P2pB~xl!1K>BgEWsz6J>e2KB=Sz=2ePfeLwapJ4sse}l>O<|>PnMRYsQ#hgHm|@DOPbma^_}#}uCn!KYL4PkHL66B4_)J^ zvaM{#j?Pf=dIg2S=TdLp;?*}==)@>LY`!dIU9aobr#6s&sWDTBmDP2-ZzITsVqFOM z=~Z}2z^~ZY@fuEp93?nG&&&H-H16BZJ1RiJjiZHJ5|?N+e8N%STj-VC0Uhk#+n?97 z%KYoz`@7!7QN&iT{`ZSn0gv7K6R*vLmAyEyC`nmRF=|mLmqee#^lw#m7&4o(N8g#%1sw0AyADy9 z_KU8Yc{eL61NyMU(&)$o2T2#NY$z5vJTfMA)huH^Qk}wAD=Y;&UKnkCyDm6E5Q!4c zun9z&n!jBw>d_D?45`o(p!~4TqESoY^a>+?v=!(J=TcusGgiYVj9&;7*Vf*kgfSOw zN5%&C7%8`sf*lv~vi_$Qt(&j$YZd6uhF9T`C-G9Hh+%*aX2gVlK^J{z($)t7%CBTs zRj!V4I9zjM~ZW z{HCBG2#x*v{aX-fCz-J zWp|4z#ZpmWP6Z2`IiHZB+3xP-a(+mHqd3E6(c!}f;iF%f*>EVolb5!%X3p}xFtpgX zo1zR&yTu5J<%nmxI34n&gm_E-tH232_&fi{1^DlCg{g7h^hW6OXBsNXbTf}cW`drX zj*M%71zwhZGo54x0R^88P)5Pl@bNR_JHr+X5O8sHCRXsATPea2NT{+5DB0X+u+YE^ zkBOZ|%G&yMR~Lp>o1soBopeI`u#o?IyYv@8cvY9Nu%7Pud5O9rQOY_i&_L~-1&_SX z9ATLv5|m5Zbo2kO>5c@lcR$)pYso=67PyqbtOl+~F$Nqxm^4k@A#?3mS46H{*5k9$ z2ms1ZS!lN+fUJq5qa@K^l)-eXFYf-URu+hUU{+^ifbhsa!wYiR^Bpm(ip`)Vgd==vl3sl4$OCwT@+6)4~F1)8MEjfTmqYgsfHV9I?4=jrlodgFXwjz&@u7on3+RR zOYr^yi11v2y%9-nfH?rbd~8ieM(5y&zztu3Tr83Q=R8hplDWuXt6jYDdu{C)iIafz zflG_CSp=AZ#1WnMyui^~^r#^fUGz#R4dhBd&W`|qVG}iucYr>Kgqt+>y1{TqTblwh zB84FDN6k#%O*H#?j?dvaa=!(OI?U{wz#A3U0Hr-F*(uPXBW-Z=>}-CK4i7fa@E*@< zd?~Oj$NvM&H>1c#(z6qP>NbgmFXm5e#=k2YO5nlRM}q~5Lr!UFs0K^#JKBItQnt3N zKpkysyZj+Z+roa!;A^_S?pO?oydYpQCZ-e57}eD6J2`GX42lI*J1=h{2)J>i{r7}X zGTNTx1sJhhj`cdwg_ahYQK+hFlR7UxF)?5HIx*p|R$G(osGRT|e|)Sd&UF9fct4L4 zbe%1DW8HD48L_`zsHV$LXMb!=Jf2-!X<8Dk7SCUwt=!i%p3L;gVhg%@l1PTnP8Z~?fv(U=x>M+d5s7%kpzPsM-A|>TQBYYXORhx2QV9g<{e3hgoywWt;z}4)TW&X`=3s=8Wk3Vh*QQt z;dXYsUN5kF!5v~5@eqVz5n^$um?HEZXti%46DJMfbte0sA0rmS-bxKQXWF5_eg&%`L_%F?s`-KUUM<9N-L zY;x5(wBl99HvsxFVyPNdQ+rE=WdZMYtlw}<$_agX|5==THiVUu2KkQ)5izdKKnz4; zU7V?*CW&%xxwYb|qT2Vt->#Thb$v=BQnNnQ?jyoF{kU;hS(?vaJGSzX{wo6^|uKEkp(F6fQ7kzTzAnQDBvYXi3j6e zF!fl*6hFEI1o;NII)QQlxf&umeb}$^z^DbP?A;ropg3sdZ`#2HJ;^xiDM3L&&;4yH z1qEy*aSBpa(7<>vN;x;LxOkSvUKOGh{}FmS3?Z&)6Nv!MYHUoorx3RdH%F&VVs#{5 z6~<*Pn&v5;FuMZEHssMFtoJ&XwHl!Paw^5Z#S7dq-~r9yK8n1EqoZm_>=al-NO6!Z zLfOboPd5n8yJZK~C!n+dDMtIk&i1d&NJN;FktSIdT#CD*g6ozTBJ7 zE~t?AgUNMDvqL?G0E~%N{t+II`U47#n~Ub4Zocd4EbRnDKS^FbzRh=`9spt=3YmTX z^h5`&9EJNYkBrO|;6sc^#d}EOQAq0pb{4+fe z2pWK!Ynr{H&a&hYn2->-BxdZE4_VR>X_+cjYesKwc(SoG9&fx zs$*@R^FLV|POIJ|e4>68+u-3>sSmRFtakysaP{?7yb(?C`GH?U+R7K>SKJ@ZBz4YTAolMXx zPC~*w_4`4RaBd;M6|nGM_4g~n3KKyz1CR`?U}?#Oz_w_Bg9xHM7C+-bOH52e77%!_ zyz1z9geY^08g}Ksjf@~OCc)LL7+D2{JM{E9T0dPN+HGOSy{D(g08}IuHWSf^)2H2Z z-44uC_5iDM1X~x%QNMK+42SNg3Dw0_n?t1*Vggaf=r8Z z2``qcO4|Hd-KT6s?gi9jq460TzTZN}F~n}8WyBpXeWhkXgrnwBNskkUyY7me=m5k`4)+{+ddm1m-R8rV%$xh3hOm``p8k~TnfWEI2vSCEroWVK_%)mW1RV&U)J zyZ3|q&GUZTpZhQ6l$9~kVa#v9A!}n}Q|Y8~mRAnzvCMLWo~`lEH>*Z!7-hE(iC^ew z7X22%K+Dd~{;`Y?S?BNf7``WmWf+|YzNx+bIqoW$_0&vn_KvBpJo{v;uR1oCj3z>g zV-%j3{4is=W0Chz71fkKSPM-~{(fD4UGs;Hf;!ty&*c|F%=%j!qS%3w8gZ(&cyB)M znS4)u+qGo%Cx?(%b-GS{sh4+7I{G8S)49H9WAO@g5s8lNH|Gxv7Z4)w86bD=h5{DMcJ9q09ozc zJAC*5mIapFUn|-#=|vF~l}=%db0qBA+E2~AQN1HF?$mhVmH+697|ZcvU4Ds2@b;T* zpOlC&>SeCggC(b0S$X--IK|{V7Al20QjBUY^>6$N=&s4j$>r&&5q?r-Rd-G!z|sNH zPc>@y*Dnh$Ztnc|`Q&ClaC$#usPHlzRk7qd-PrnIN_%5o6*tXl)7pN`I_Nbo1AQ@B z@(&xgfid2-BB2cTfwLbr<^$VS`rW0~hXrQ3ytCyW9-6$7Wo5x;Ce1lsxr)Oq7M6}q zDRFJ0Z>5;i0RL4!4khhv979i!ZQ|9RQeO#IvrX^c;Gnyx47}r_+0{lE!crB;vTk^d z;#v*PAXk`KGs#myCgm(_Qb8Yn3iKzjfmBPPW4BGDUe&!b4SQ{*cGm{oVVq7Pu}|ZD zgeFLW0L?t+Q#)M@swc}RH;@A9o`J{;UuGFK0cvA>uKmPmK>BDm-(r}z=((C^1 zrH857#QOfK%Eng2IGgv?wY}#YvcgTJCU0K*K2s%%6?|v^b9`b*NC>6U&G68WkP=_x z$g!$|s-OAGWs|>=R>QiGpO3Ff%buGs%J`|kqwkT-f^*$}6bBHA(D!V52qvpg$^Ys+o`Z)n@Ji0cc;y9_KoiNGI zKYs0m+RX~bc&_Iy9tOZt???~?3S#Nz3M5cxc(Iu*J6(f2R$9~*3HZOv%A#h z>dDEtgoho*1KSkVbx%$8(#DV;|Lehq8yI1)B*S8-WMyws*p8QS-w5%p?fEEktEVsc zK?|K2^}G>|U@b}O?W|mK*JaJ|jVNm4Cr_e&TAQ?<2V(;g)N4kO{lI}PQc6GMyz9(Ul`?>QV z1}9($Q|caxkMG?cbVk;Q)6|KI0|#Z~Z%}#m-@k#5?rAU!c5m-(^IR$EI$BR`fpr2q zi&ED{Dfuzk;`{{C@x)t9&EA+cQ#OPYR9M+@g%#T;tRHweV`Keh@k>kJC7DM>+Z_EB z4yy~vzp_Yn}GukmSQ<&f^~vQ}+`{86)x#n7&j5U_cobv@!6j%rSNp|t3i zf4}_G|L>P?o0IKP)vzgb@g(Tus?p)I;iIV4V`L5c^L6)x^_4_e0%^~zRaBCB$j*2P z%Fw(hQ272g;rw(odGDwhQ?~fPX==JLYX&C5WIRSz6!Gi#vC_RVK~fdhf*+1=@U6R2 zJb6OmSW4@2%=_rJL2ku&X&;{ihjD`IWb*R3eA-!VTDPyETs3TFjOJdvVoFQngw51g zW2zk@Qk;?15S%b#xqVF6*e62G$Wpa^lFwkkrk-VY)fg6!6C)GUsQJ@iNOIth?s zylJp884-I-b@v``>rxpk6w*jTW7mZFc><3a$x-_f5dIT#mSWjVQ%9IWa491b?!qC( z^*1<8Wj!U~d+vOI#wowli{=YxH9L2J` z%NLbYABs_`qE!|JzB=C;Je&(0aIkNAJsP4G1+z*frcjU+kIpeqyct?CZrk!5x|QZD z>nO*hoEtM*s8w#bfB~jF8>mWSRNPW*T!mTZZZS+yBy!(ULAI*t$=i*)4EIJFJ>A5P z4Cudnk+T`E!AL6>j=Sn#CfU}yakt~%Tv;~}%`KyoDkW0pHz}xBryrVAl9M-1XA_){ zcf;J|WMwFnAwM3kTcbQqopfi zZ6dib^wle`H(}W0v5lcw9anCUcSI#8LvzEUTc6yLv#zx0>701+BmU3&3~?l?vnSajU^QQ}K()&ame8t;6A5H+vmrnWa+$ zP0fMT?-_TFkM-it8p2_Q{*#&2WMyz4E*~Rxs?OKnTxVitHa+Wdfd{_B%A2S^T0npE zx>0#6gbJ4w5a1epw4A&fFf~QlFeB11qXT;H@hWd-+<7C5agM~Rvutg4CnP+R{>BRTCch?u`SWy@5+Usd2st{=ncMJ;AlFKr-9K zzOK=1i2g-RZrp~iEe=W!JtZExLHUHmcnPh+&f28DX1yINUNBKLDqz5@eZ!RqFBpEI z^{HASV>;Wa37f2(9KzY#{*1X{fBxW*^C{k=r7ayiC!up%|Lno4i`sX!MLiezKDNkP zyvKY{n)}zq_rZTp%zepDITJfOHcn1XXh0j|h6V=Un=jQ*Hx1P_>amxWmI_dw91i^+ zOc9n-p5bLtl#sZjR~!$GnQ=7=28FbooQ}PhM5S{3ECNj!=>FqlFh+Gbxc`e?#b%K0J>@jXcvv+yf9NS5~cxPcF^8pwz6e zZ2zp9&(XyJx_ww0GEPohaMeKwtEr-%yC4?_KZ+R9&GIU02PEnf77*N-t4A4Ttg2)f zzS4C^(yUxWe#w2Dw`K;NYze-?`Li)4f%~zsEvRzzoAF1Xp{_vN+rhj{Y7EYZT~x$@ zfvpQ~p$=Zb4uGrKs>4ra=5{J#DMp(oI?F%?A#2(TesNJjqj-F<&LZ( zsS)hV_k@Iiu_pJ#5zF5%?Gq#Z4sP;Y9)}VSYtn+JuUen#6fr{81e<}I#Keeu?QVmI z4XP@Fb0wUXj}IfB8OXY@fx)U1;1<3l+<4|UDvYwQ@Dma=V31IPqJlEP!W=%m*)rz< z*EL{o(g_KD;A&2ykLa~Xt_oH8bR{IYSt~AZfFzL&ek0@XJds@7K*{&`RX;?AiZ!dO z9#>CRO{07c)DD}f3JcfIslgj(3RT66da`rUG}%yWjBF<;nsssSGJ{MtkG#al`D}WS zxF*O~mG$xx0p>V8KYu)sa=`>r08n5E8eu0D_YrZMa>N8$F*_QNh0}rRgqZ6>vU?&z zH6~IP@CRf%DmuCiXrVq|H(mnxIbLB&1jLCe0TR1=d$o(v3W&b|9I2+j+Uw}-+yP>q z(+^d3$4SfFQl}+(u#QwX+?)m{lXOVPh2JLO(gH;l(WV z8&~vA6AfSU%d73aVrfHLG>WHo*3OBZ`|dfo-l1+omKvCa!W_c-jjs$TihiQBJ=ZIf z_r}!8cm*ScXY1mWWj@)`(FH$~a`;|ptq#!mAY@dv0)zP>SR0cGyJI3ge`XcS5eS}!B~`D!4`D>VC@!37-+VWI)G84WxY zfTaOXf?-DpA>wTDV{#uB^uIqF@Zddg5__Ve^1#N11r7tqFo}oI>u=EIAPA!P`3^oX zoVp=$rw=H!;9K(ZV;EbTS@}Qm2#~z5`h|z%Aa0$u)ze)-QFMn#M4lu$d3l8Nxdgr{ z?eNv3+V)ZJ-lbz}A!Sx*`Gw@H9$wqr8x#+p>vUP3;5UhZq;ysLjjVM;kIt=Ba+I|C zv8bK8CFXjM|Aw&b0~|Xy95jEl2RErBQ~C?|9&L?FK&E$Ss9c+!8^Lv{D*mp}X*}Wp zb`6qo8)Y!Eoa1m8sSlFl!DutwKDp!4-6c)^yaLs_;7CA26Umvn`|@DMIp6BYIbF01 z&lUCI(hq;T`Ze!yH(@Jnx7*z%&7xfg`;$vfv`#!wUx5t+fV_Rf4hEbSfU3Z-2vIjc zdC1DjdLE<#ma2#Y0fe?+g_i}=p&kPb55OwKg)=(Z;`=8;EG#TQ6*tFXaXgXU41unI zODp~__62ZkBpavDEO_E4{5*DN6?cXE zB)a;@dc}ARLuc|`{*iWZ+){?dz=G_@!}rxOAEL?*aqOAOm# zyD!7@lB->9hghE=|3H009pBdpVM7nVm;ih(@3ONOPfD#Kgl7QxAtpu`PESE71ZKc! zf@dAjsHcc7;A_T1*qsJHKC2@9W5oQYezPvDH2`xDkXSC;NgiY;)i^F7MnK2M$2LllAn=>T42BnX$&`1ky0Z zcv^x2+rpT)8z0b=di81kR#Bkm;ihEe=423dNtx)A^ICPlworh8C77Oo+0Sd*he7Z( z$v%GEZC5?=S(O>t7NDvLee;Iy{{1&JK1co#H?BVF{7sIb)ceGhoZn6{k~-?`Ro;O0 zGt+P|we&H7t^?wwgBViXKRQhYMMuj%9tV&QejN{u+fanz0E3=t`(@)PBu{619&WOL z2^BIXfg=m~i7yW~l_IG{0SFbovXv}*RuTLxOdv>XnM%2^@ocf4sSJ}{VbI1Jo^8&o9t~`J$nJ>zD0IoUyYK2;k`#;nX zhY*DB*8P^M7L2iK;4xMK17G^W{wTHK6u7!j`Q0pjd?rRjFCHLsuKD>!x>8gQ z4vn2GeMYeI-?vU83-SE#8i*Q9%*=Md^t;qz_+#&`^KyTl*Smv)^1(^gcl7{1b9Qlf z9;{C;5`<5)4=pfie!xStT6?F)()Oq z1P$zhc0t>96TPFn^fIs2Z@!Le9__2M)@a_+`rXgouic;I^P@(W<}~ZIQHz%vCADTw zoAM;f42m?fxNxrJ6o{Hw${2q|p}f>4Gh@*E1Hz|{EC!Qz2`T!lS-keNgp`l38y6Ps z3y@4X+&31xKfQ9E(%jTrYd$-mfIr*61P67A)y7PxhJyQcxI)cZV4e=Qk4SEsBdvOK zb@Y<`d0=0kzW%YHtLgFAH-b~V=Qw{4$y?Hg$97s?CHJ}pu7gx!tU2{oM^Xd_J2$tv4Em@M`H zRsMdTV2ZNX$vSuX-*>cdFbaS>R5}eq32@n)kab!tIjm5 z#P>I>b$<|@dfV1l^R2IiHhEWGR8t=MZ`PYlV>(eH)h9S$fMoTHTD-WcXVywWNKfgf z-&0A&)&}JFV&Xl@$?biZL~@+9fOc zrtjf`M9M2oa%tRFy%adUuGgBU4n>5Eyx#1PktL8_WX(ybmu}}&Thqu7@9wQ}g)!44 zweElUa`!0C;UbHlv1!9YY&A)8^_!*6&Ps5P`-0eDNz?M2_H4W3A+y)8=+)Wkk(%9! z$nm4^q#{eUo_|xie=Sb-#y_*4FOwNL-X5hsG8gSv^0<@8y~09H%(8GEX19`&HW*&f zy<0v!`yn??Fzt%9=taXXtIfo*;1!IGmmAx0hRUpcQt|F|w7{$dBG**>Py*vJ<@bvRSR zMK(;Qob9=}+DncH#GTJ|%a0FZ%vJG%Zqqq6`~smFILgt}(+9!o*gZR(jY&?1!Yyj? zEei`|WkA}7j59zu3?SbPMk|g`iHxC0yNlpZ3J@6M*iKetR8+(oaDM*ECu2#hPvdb)S_5v>0eG8JU^y+_xIj_{xiVy5}J+(XUq{|G_n|o~zabbr(Xvr=a6?g;%~Gnn68^TImE0cXzQl=r1+#PzbGwgTQDIc0Uqt8tEAzC&#y?0;lH<=|WY3oeBd+kEHyG9m;q2s}4%a+g{ zUwx3i8o3s-HWkHldn%o{v3xh7stHY~JHTF&AxKIdHLnkYNd8cB_mmH;BUiHQyDj1PdM7Lly3 zdy{apSW?y2Q{U&^0cazU`UkM}{-H}mNT|nKEUK!Cj*2(Y{2k!n-#ysZfp!-fT+A}n z%}h-{$5!kw4}Nm$1R}<4TW_}TfgOMlAK<#c)!zkW*>v3)r*{QCjk^cHH*;3}GzNo}QPMBjBJlO3&9u_v*E3Aq+EG)P{>sm(cr0aURh_7poIESXv zr00A&oIS+M<`*}NmO8b;%+uWYCWZ4sWi;(7u3t))ZXZ0hzuOs=Y`XKm!%0Y#Tq;aE zlGIIzSUbo}=@f&PXFyuBwkL?qtcq`ztYf(g(&Jw99g$!|xvrO#h(_WJBb=RRyk9hT z0D&F&FKb%^9v=Yo!XevkcG(ZSn=&yz&S6#d9}tNEixx>a#?ycn_5tY9>pp=aIeBK*||_ zKk1>IU_oA!)*S^C>kkBvm7(DzD)z}8ZnYMR&zZR$-CFdKE~xWboE{!Y8fl@imc&)8 zx&LaX`}zg-8zq69qAb3&ojimSz)8HHMYqa*C0)6S}@em6f6c8bL(W-M~D>MB4h@g}Qwz+Gw7RB4r|l zV#9^Ab}IxmK*z!;Rbt-V{R})+`0Hql_^KhMya^$mm?x|q181!5@n^X)+Al&96*!P%Z`1=&s>FX(1{Q-2PfjaS73~**vcRG;UTWO z;>k>YI|7E7CfRqbzOVZ4tIF1AK@TWlpRRs#f!P#yIp22#Jbdb{TkJZ*$0G?>vv0{X z8a%R)FN?<$*cH#v!b_|wfS%VIGGM+shL~B5mpwW@9Q`CjB;fwyD^xjs{;Fj#1Vi8A zLjUqNX8gDBITr)+fL3odMKvZDhx$y1G6=m#b$IvNj$vZQ!J|io?SNKgB8u>j@B0YV zXB1F@k|Plwc_fZk%2u5jMn&T_Bu=_31Q52T(_IXSUf}X$EuQ;?-rj36;V63W2|jqTZ}&~P?f=i)B{m#?aChK} zbdkn;*~{qFiT&?udtxnkZ&dy-|Ka{kbp8Euz^09v=0C>ksorC~MgOBmemD6^1o+fR4PG(v^%rC+xvx=?xt;?@|(3{Y_lS zDD)oiC)Cc-W%2Q|*`YsOzUYMyVs8fWZLDqB$9~e)auC)NAx@z1{Sup-fyfmUzUdKuAY?In>W*ugay)s|44t#`2EmQ2xs07D zv-(zpB1ieB8;jQQ0kcw(ITw$4Bm*qkSht}r)2rkw5muN%HdMrEw=RijJ=veWTosfb zf=TKb%5`Grx-yN*wPJtVp>~&iTFcv>7DdSLJI}Y(>y?MD7NqFRi{BUy{6V3|U zCHGc5JwIw>^jZwJ|G+u5VqnkhSkvz-Z{XI<@cyj`}*exTPG!P*wo!getn$_^QJoVy<1=JXpfyaGKN>@*YOr~)0&9^~=8 zc_qo)A;Mw`yJ_@PmChOe=;tumyqWM1pJYYh!Z-tB`yGrJBFf-ZEw`BR7zi5jP+s^C zei+t#$tbQhJ7S?z^^tC{5B_?$TBtuLLdnok5w15~X{E^(BAFe!82F0|r-;Aynd3y^ z3(JbduOEcI{=O6eJJ6@JmAnKGzmYFu1DxE~NsY_&+L^0tpu%kYGaiMhvW4OH-Qo?Z3TJk2JrWk!qb%3u32oAN@3nvBd%T<}k!ZXA~v z_oIFybKVIKoUH?Q`;&kYZpsI&gY|NhFJ_Xk;70NkwUX3t)H=+oj9jJlHa@;e$gZ8W zHC!HLo);luv#tgqMZfmY?pp2tSlcTx9U>O{XzlHa7TcI__`3pu*0Vtaus^c^hJw#+ z|B@_66IfgVSVNb69X$yKZ)Bk8^+5!SlT#=zO0^BfO|$w-Q>;-89)iu$hnM90m37*8 z=T(wrhoO_0L1tk1*-sHhQ)SpzNThtP{k6@<8uN3sF#M7vCHCU}>yELxB7mT{tmX1` z0FZqd3h1^8k`l;8Y{KWZW+_+dDLa<^%1q!PXi^L^4K_4Ojj;(f|~sBB6)mpS~** z{T#5aQB@TK9K->QBml|;0nzu-Px-Hbcx?=1n`o)nu8vAF;a0ZUER)!=er0X=5J_yE z+RjjgSRw=cGD)k{o^dnmRhEOHkn!>U&*2|LHY_%oW0i+C1Ht?Zs%nT%tT4$43o5ad z>QZu803`b5f6CZ25>WG&JFQFU2i&^>)Zl)jELmT^@~dWOZ2vX@b*G~IX$+KHh$Ntr zP*FClV8=N{AmzsS1klqKDsOF1)<=!r6(gUmKX%^L4;govBRD+U*b;RLmvk!XsU$O1$Wpx6bl@d}eZWB|ey1aeLRXzm+5ZiS8d z^)tz>M~Igh^34rtq?7WVQYWr>0=?>1Ar|%=i1E%J{|4F!`_Z(25Vo+3Y~`wgeN=WO zz&+5Y3!;F{L>(;V&t-O7!T+^_0e{JtILVBhAbPDjC(S}$BCqsm6p!^Dq$6$_Rsof4J)RA7k2dv$HZqPxNZ(g+}0LRu@K|^_4P}D!I`V}Voy!g@)Q`` zyue?`(##n7#wYLwU~YrVw0scTt)n5;b(KC}4G%mG{kk?7P#E=pmh2}1L$V7%iS-W; zZvv@_RC%aW`;dFo48p2}fGQ;i#=|Fng{NdufN=c=fVWctFA~K zJOpqRs%jH}%Jdn)a|QwXE5HEXYV0d#i}yv2+kS1e!!jCzIFIdEvlqUxF-8T$$4j8h zEod0EUBBuzmF5+g8_VZOYkPas$Hh-L(c@#pdVksCym`>i)k%7a+66M>HI)GHI3du$ zB{prcNBa)us!*;8WIJY!-k#27^U!t}My8iK912zs_^+!ra$5J%GCzv!qFDp;O*`;j zS$X*~l92znOlE(lI zYRU~mGFqpN280k2 zzSrpM9&M$reB`%dl!YHBaj?|VX2I@&Lq6}59h6iI(J;V+C~0fI1~>|U`+uS~07edE z4e}DmvUXbpTj6&2VS=ou%+u(tu%XYbf<=Z>syPmT4#i@sONh{Wkz zEkg*kvc9#~u52JMe2@DAgzK@X_M=UfpYJHY=7WHV{av*E)A~I+WpeVZ`DoU#;MGFc zB^cxd1U}17QuLF#nIEroobOJAJ$WSoraFN8#p9DFT3mMaD8N080(dD66Vns6wA#2| zN)CvP08j5HSv?C7N;2>}lDu=3g^=If6fmNZ&)|twrs;lxBG3*vG?hNhdePqQO_>P^ zn1D)QuaTDQ;>}x3S6d4p_(-XQ0J(e$H(qWv`C~uR6T179`U1dTpK>q&j!Xc}MxE)3 z?st1hDJ0aYeY3Ej3mE=%04N=ucr_db)#t=SNqv1HfCWl4YlH03KgCH{S?$^z%`XuY z`GJ}<|Lo9)6*p|9ruX){L_?g}@3bDsvIQJr2+sS4$6+Ll#@vg~z+~I9_1X zU}L9zdav67QVu1@b<1;p7^VB-c_&Cgc8HZ5;bR(ac#c-Mgx9#0>*WjIo%`V?Y&712 zb1(=ermqWdR__C-HXvOWK=#)H^Mk5`AdvLnsn~(}e7wR$8gdC91oRm_PlWB$FA%Hd z38azS1=TS>Ewr9w_D>{nq8lI|7|WN#;d9*)0oFlJhU>k!fP4!OS9I9d%}lL6K??mU zBjyo^`M6kaE5h#li7p@2?*KiXX>~F{Uj70IsoqGuE+Biy0N@=&{S*ZTAdWq4kM|D1 znxa96B`G1H8_@Uv1ZwPwHN)+CN*oIC+9^*lAJmG)3?N`W0f2U(hJ?P<5+)hif=#wr zRu0WLT2>{uM*PCIrDksq?u>Mg-GHEq)<=9bA&1To6vg#roSNkt-_^F1sWp8et-3@; z2ZJ~3Gt31?E^Y6YJ023|f|yLg#%#x$n$){9N z*}AvzO8#S?e7t=JL-by+x>NtE-}hQz4H)z%lvCi>_x^k}Z!p4sG_;wS-WVV7xLcjx zSg(z@J<`zJxM!NBTb-1VZLrmO5QgVI3_9?G;XsRBAN-R})95Mj39$TqN@4-j&6Hb} z#9j%=zA5U-Dgs~zpHSe5Qaye^A_TzFKqSv9Al{&-&jn->91cs(^R-xAbd8JlwGPW8 z!0b=AZBWGf(xm6NYz$c1@HR)XR@=-(&(3NBVhovNCcT}72KJ}8Fd&)C6Zj11dG7ai z)t&6x3Tc&*U9A(ug%gZ-x9={(kF3srvFW$ckXPFNBAL&+M)uNDS8aNy!2*twb0!kHR$Z9Jdd;D1eX7lCu440>^EvIW?dO_c4Uda+uf zE-vC*-R)Ej-LF?6(g*Cns0gZuY)ynG@I{3=5RJrZ+(me`R`K4pi>b%H0HWXcfV8;= z`;9=X3ZMdrwhhW#ns4>vf1==@l92#}EI=t0m8MgumI3k>q>mZ>(E!igwmkZjD-%d! z&;#(az{Elh7}rq?3ugn}u!e1c4@f>jUsnYJKY_c0l~163Ccj57F0iBl;wS;^RozDU zk1`zKh=BZi08It-iI)VPDQ+}`5JTI=8Q+>*B#SHiw`Mu%in+b-n3I$A2YvNKnwzwh zepI{fmJbb@&tiFll~M&+TX?psF^Rlfm>RaD$$x5(4h1k$nJf%eKbLtVTx6?bH#rn= zhD9U|_x1O*Alk?7m%ka0!r1f3T zOT&kLD1N;Sc)SX*U20ARK;|`9K3O?A(7JmsE)ZlvZ=f-RZy8zSwzjmcVBTjg?`7hw z$1VP6W0&{tcJIQC0w}eirYPNZmycpe{fvmq4op=M=}RU`xpR;A5p^x=^$ZT!k9S2F z$uSJXNqy&Q9o$3~;2n0EhaZxd%G3T7F|F=6ErT{PDaR;6y3Sk{brD;=-)I=(6+!s= z>p?E;$UC#Az9GNtNnT)lXE@Jj$7@;lG~I;fV$Zugc5G`nSut4`+Ct@Tb-?&JmItIk z8A|7l5eiHc(FA(lUcH+tF~BPUQUE||ykM8f8VayRxogB0XyKOA#dv^rX=2-1 zxVw;Jr8~CeN>BOkx69%`@6Z%`Ei1D7u=Uoh{hT)$tz!Fhi<>f1i#;MlZ*)Cz=o3DZ z(7WOEp83_XiUVdpSy$>`G&xcObr&`dXC~rQ%mZ6#@13kQMM6v^<`KM|jdhPDv#loK_J%I9E}G|>%f~~@?vAH!xx1gUT776> zJeR%VEZCUVLYJaG3im4`ei{72RR3t(cnA=nSPpotg&03=js6_Y-2@OKldNY8o_Zeo&6~bd+I5ajIw-sd z+3N*OIKNzb8zP4VUc(%^usa@D<>}p79G=!~6j0A=7}%5;Ph&8TSxC5`FUFo0fg693 zwg^zTG#RZ93b2uFlD|o`@dCNe;kB4Ey ztq^ghrW3y&3LeAw*>dQs_)&YbPidit{6m$epYH`1IHtSq$T-jj$vO1mpB8|j?I=^` z1f}daSvWxSyaa_+-X-j(3c$Ag_>0B<`DzzKIVipFx44^oa2DD(`1@Er{b+` z;^Pgg@Guh(*d9c_}{1kk%(6*Cye;qGVww|&YC!IC}f6N%+(E_`A_vGH$% z4J)N8cbj)wQ}lL1frY}JVL$MP)_RRJj%BqH-B2<*R$!qfB4ht7!9Bg5u3%kcnpUxi zQjgi@%-}eP-H9B0AtWXfD9yyIieEwvH1FT|k7;w|U3@92`DBq?YPLQjTz>5lipY(d9RnW3sWAKz@y>2y|N7P6 zcK!QL9#<`ZYv@Tn+kR&?0uGW-IWOh zgfh+yVIcB8vDOaY3ukXM1zsgjt2yf0ts5cT3av}^Q0dL#$F;$qfb9WqdZO>#t6cvA z|K2+P>rOoG3rP7p%Z<@BIxPv)jnh%|f)U8OhuSklQSj3xD;i~G({4#11?_kIY|)ur zXuM<`319!itv^m~)gu7l;Qyl8GIr5TIhg-&uHToj&ixO2`u%(l`u}@?{r`l&{%>yK zfE5=ZtV_C*5SRmlTburt5AerS=@K^*Iw*&H4jDjU$uP&CaP5D`qS$&0z)`WX%(B+M<^dol{C!LBLdA?0O|hTwoxexydMA)Z=|9Ts>1+f_|67W{8n@;D z@s|JJrzL*h!p2in@XojIEhy`w6r>n$#1IJcu1cS;L5qqgcYk`d1FiDR;F(G{jAl6r zm&Dui@0#tQEglRc?vgKy-Xt!`(xe8PE(xQPz%i1bQjS`b6!&CQjV`shgsM#YR$V1g z$i@Lb3DmfezaKn3rB!0VjsNq13RzVk?t<#yOL+nvhVoDE|NY|?*pc$@aop+4Al83x zqu7K~dHK9SFX+ElUAuWr{{Qbw{&d`}p&smBW_h%~rUl`T$(v1@bW`j?n<*v|wF65R#fob#T zUaK8l63Y%O^_5*YI_D00S%Zb1mmT|3Mc)U0`!IU4gzw?#G}pdd@AbQ=5@sYf-Jbz> z>w}Xwf|ZM#4KgEOT1}J}I1}jc^*VhEMH%fRkPpOo$x~xJRf$w5S>KZ z_07isPT&9W_3I6H#^2R$RfgCL)N6F;FTN!6Y}rKoKr_qP>Y>9Ko3(JGzS3kkwdIwG z{!4+o4Ww!ma{^lrK8sqPOb=ta!Z73D>(vglW=t3C(H38JMvoCg8xOk7`ON;!#lzgu zvqH88=^MTK0?D_93ip(eME7Vo!V9tE($`!r;+A@3AevZ^natBYiwbt>DVo;KgDrj^YM?=SU z^6+msbY4~7g-6i%jGZwoxh?$QHs2(hReqq^busWHV`fK8O5Qs;ebi3+ zUVC@+EPNRqdGChs++|iEKDo3dxK_bkc!nDX>|Z)}wfiRXo~X+^OF9B(_#5aPafAp$ z$Br@E6zSuA-pAZfx1BoqvsrgJ&4E2j+FMvJw5=<0$nCJMR6=NHF{9B#ew1w?1IKSaN`~@Elo3+aI=Oe4_8eX4eWJMa%R6?f;Ok{IG{k%pM7^BV|D%qJ z{Copy#Lr(e$(*x5xbK_88>iJ3BZ0|$HYl4V0;w5Lz!%45Sg%bmoPet$g&O2)HFWv% zA>ZdZY)sdAv<&l*KW>{^sAq>sGKH&Im|Jo9HQ530w0A4fc=9s?sWGn&&m|u-j(g*_ z?LB?+Yg>mK@j=CErQ0N&wz({;;~wA3F|qI2PIQS-*pb_(`X<*UmspXnuP~JsU14sP zh~=9=0Sg|#s!=)=mXEK`T#CleybtkR`TD?4>-1jhjiLgn3mN#mQQJ|{WjQzV$-7<` z2wH&=B9_nwez78bu*(}DVgn=5l ze87F-ahjr_&5gapTv)6utl&u7*?IMwO@p;HX6BJsoCdW}KT_i3O3pLxlg@dTmjjN| z{mHn?x!6`%d``>V;dkyP6XyssB^Gv;FX*Q?0e_a?6Pfhe=p@z1*_2nZKcyS739VSi z@_>{}U^UBn2BBKw7^ z<~3)b3yqB9=#nAW*Sw5oxF~lt$EyTNIaMdEb{n#yuVeACU}Oc>t6X-dlpKy(xFguE zko9u)2QOpvxj)fjI{?G2d;k=_BEyNW8XAf(2bHT-u-?EJscf}WP7@3Wnz? z9mXJ^W^>#y9PwpJW2;g6B0Grey6?nCoz(x0-bpb1WByRs_<$4@sLU!N&&#^ngOs0b}``WE9k@wBW!#c6U&h)3{|>e zm`th)EcYF!mbddoj!8z!TfS0~eT%0lyzf?%?qb}kaeYwt(mR+%Lo! z4}RKSBx(qDZBY4>6@~2wJsmRWue5QzJ2YrYvRviXez>nTu5ZBZ@3%$ptTn<-I<8d& z3@%mEW{Tx&&_yp(;S#?|WL_sWvtHt9>n?@%s?({lG06-Gr4=r#G4%CV9I|vf7>usO z6nL2FJulbwd)?=-5|o`JUJ_Kif5emEGjJ$!1QJD1UA6*9ypDZ>+ZuKj2v+< z=D9(isoFQ_q}+2c-U6gCw8XG-aq%DSZfSXBd>hD5lBNGt?WYzPlh`(9vc2tw&uQ+} z`(rAo71l4%hq-vnf4Sm|@JWpln2{z$IK(>N$QusT{@2VD!2! zt=qQb?qG@MKb8wUg08BvWE82u*B7>df)<6Gf)Va28fOr05byrv)YG)2SidtF+0Gan zEb;0vwmL72nI0YELk6q~Zv}W}#>?=)#+Tbe&_FmQ}^_kFTVB6NBQO{l(%&62@>{BJuvt*ZqhUNeqPQDv1MDGDIk}d(>OvcSgUwp#yJX(v=(}uR?FAn3N`QY{Rh{F9hlO9R{rHo$MO)u zmQf{=?$Ufrtuw~aNdF{{0Nw8SU{umLI7%utvjD&t))!N7`sUb&ADBX|4Buer3G z@{?CpBxEAi;Da+>ie1ZaAecODPoudT!>)3){v#C^5G7;On@B2Dz-O0@uW*Du*XA2T z>CcS8u@%|)NytEbGYLerQJQwr{dowb&P_;}Ny=82!KyE_M|@OYYS?zWbF8PRye`6c zZ@fX_8K3VtBk0ZOW+G+Z*|M5PC|yN&j~GpYp!zE`c+s)hb2Eorlo^V6&LbDQWmX2k z02=a8t~@bYjv@qV$6c&t;w$H5uHh zFCFH6eboN&AV>)PfvtLf_H*17qY;{N?j_tL<25|H1%=3_p!hf5wqX;qL>J52vY%!l zI!PVvc_>!`-u!OsxwNQ|%&^AA{>U!jwBHjg zUtr}+lMlfq689VyS0C(TUnZ4>Ko1&4$TvuAQ&I$!HA|$ z8SIfAh<`q1HN_Gdjxd9 zlgqA@e|eF8>KrSaI#CUq=?>%hVXxX6y(>7|ymGg*w#g!WIJI|_mUCy4MNr{mL`31r zsc;GonTZ3-s}ecWTmNJ`P((x9@p?1_aW4R-?+B3&{S)zmvtQWV-Q^j<`wN$?Sj{G? z#P?#G*3R0?RYmuQVGMf2p@Qb}lx!9dK05C2@`$3JGz3#0_vb%`J=Udge(pl0mFY@C z`sir~hd+=h7qpnja^L6n);cY|@oRWQl=@_k4rg z*KcoFD>+~H80MVrMu0Dk(6z%$w)) zcpvMe+RLy=K#1>e!Y&c7)6z{yGjwn z;8I$866MeN{VJ&EgWK#rMsNe~XyszNT$Om=3(3Dr~N|H(06~vGJ|?)flPIIKNx*b(p4$s^Hgjfaks+8!I_IDG`&ip?RyKM$2iJI zD>=z&*8RmJe8d}S-1mvjY+`w|mKwePT;IZfnR3@M;@d=oMOJgh zfUv-u?5xEdu5;*zZ-OZv#7jyvNjVZ%u%2$p>PZ58!CBiEIgchTADi}6mKOGtM@3&F z;q{c56*#GZ;(;B!u6KY|+J2}<{$^S3&h@OrEnX21qqNY^7u5DEQRxupccY>U7iO5- zk$%?8Ik+NUh%!M5rgEk(-gnfXh3|YVo{)y6w`mVAXRexqiLQLRlh~zCm+TllV5K+t zT}Hnl6hZdM5$iWz!vyHQKWpORo4qksZe_oUvXq`DPyUrB%AV#H5Sh4*WOiLd>&tQd zPG1LqM3kD>$G?WJHfQ%Lm&a`dVMzFw%SYa<^uCw^iySL~g(iG(6Y^SCVpPLf_z(6F zj=8M4cnwt-NWAV8*mq>_0##T8znz}DR-k^)Aw+3q>m+wK>k{wk;;>ipUi#SAnf}oK z#+|Qcv$)i-kW^r*i7P#uKrBYiexoR=q`qEq+S4h<0_~e(6Z`k_(+~Qtd%if?lmxv# z14SZ8FhXvyi@9wkL+_s<;@*=(^T(_Wi$=LeX;e-uHeZf&X1s<(hlL`poIa4(KW+zB z6LEe>9v$Y0sxqZN%;w2LQ&7D=83XNbuTX`y)qeiED1Gu!C209MX!k8E7{*ayLcD$= z!`C0VPy`7Q)0pL6B{g0o%O3486BBlNwejI0Y8JAgu6yeOX>E2=08O~x7A|<|bC39% zlR{aY^w6R)NX%W6pGLoV8r<@NFlVzc;a|KIqm^j8rZx5D#=gGx@!YW%uP_8Fm9{8Yg4#6aktMfxr5RV8rscm;SzR;nT8VoSk#rjnk|JJVAq%ZRC(NY#dJu7I! zV6aX4wIZ-6ZAdDq@N%j&a~S)6G<(QZHCN*n1)X`)c#K*xO%&+p6xbs6nZ zO0kXp#6C%G-%;B9rFqV7YT7!^c~tq|g%@2y-=@e)fpTYN9plnjNm~9!h@a*`N@~T7kSA3DJ&F=itg7HAw-IKmfOV zGu%8jh4D~&UML&H^D5xDJv*2ga4ZUK$3v4?;P_O%9Pe_T^j~Azbd#pSy*=>gq~;`L zd!>cbU!{am@0Np}gV;J%t4anB!aH4GyDLtD8GZDAa1d4kd7iriQsP>U zD%OrRF}eoY5_;&d@AYzao}L$Fh5<31`um6n6h#HH(_Lb{0@Z)*lol2_fCXD0MvV*2 zUMoa|23m~vS2NnsWBBoa?OEy9Gc!NEW|ll#>T>q0Pi0~xXQvSzJTxy?HxgQ62)`kM zKcU~OjtCB;uXI5NEAe`b;`@0J3>8W24VO%eh9q|!n5u%NhUYJ@(>|BuCLQ>UX!4|h zg$9zs#M0r0<`b%JKQcp0)}irw*-I^g3{Ria=%Bz-SH_I28VVrfq^>q|$ z{ZB9Eb-cd9)wyH8tI7PRV?Vq8cICFlQU7PgRgFD%^;leajLD)YV@jH<2pHs(Pq4DRTCKOgGzKv=cx ze|=eX$>lnz;%A#!l-er9Tq{P&H{+vhl?;EG=}19Qh(;Hu327

MawMGJ`M$bLf)N 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

  • d#A%17z7c>qq`?ujgGMd8|m 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 QUzf>&GRiLtrC$5}FKrzM@c;k- literal 0 HcmV?d00001 diff --git a/docs/source/_static/images/examples/invoice.pdf b/docs/source/_static/images/examples/invoice.pdf new file mode 100644 index 0000000000000000000000000000000000000000..6474045493e5cf04b536cc34673f4f1668646711 GIT binary patch literal 104294 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 literal 0 HcmV?d00001 diff --git a/docs/source/_static/images/examples/invoice_layout.png b/docs/source/_static/images/examples/invoice_layout.png new file mode 100644 index 0000000000000000000000000000000000000000..2fc98c436b614b59285b9f5729e6f176228b732b GIT binary patch literal 100097 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

    B=Aq#=--E$WM|`JPjsaX@58m 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 buiv8T@Oe?$f9yR!0l$>w)#aYcn&12%y-3pO literal 0 HcmV?d00001 diff --git a/docs/source/_static/images/examples/invoice_synthesized.png b/docs/source/_static/images/examples/invoice_synthesized.png new file mode 100644 index 0000000000000000000000000000000000000000..b7e29742ba43dd47905d0d1e6f09096a1d6f3b2a GIT binary patch literal 84040 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%0AZdu(SppZ6K|)ZcrGn-n;?iGTc51 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

      = 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 D3lfcw literal 0 HcmV?d00001 diff --git a/docs/source/_static/images/examples/invoice_words.png b/docs/source/_static/images/examples/invoice_words.png new file mode 100644 index 0000000000000000000000000000000000000000..6ff552a6538d8a95d720f6eed11dbb80630e17d6 GIT binary patch literal 98225 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
        R2DI8ZteQ4|+Ml9IdNmxEs(dl3 zCgUn=%ldPVy}t2xNaN#!OA78M8F_xaBMwZYO-9@!N?fk%6-{|9XZBE|EH1Lok3b6W zRrfJzW_csEpZGq~tu9;abbyo^f3nw>QvL%Hk4RhE$mX^?nMuysoo_ozZUnE=(oFjV zZEPn=AGm)klrI=Z-QlKa9bZX9tne^2Uoy3xaQDlxbBVK-aQ8YKz%23MY(-t9N~&9x ziGg@nw!M%8ngX#`vgt$MgrsP%{1-<}x98@kJ>DNC9h77LIX9#Kqwnmig^I;mqx)V# zj-o&2#D1G)b@m@6pHKQNj>RzgeXF5+YLfr4@@;wWGYR|4fW58h;+Kdm0m? zAa?szdj_f`HYWSlj?$@|y)wG%JsD1wb07oEOfih~1o4N|BHYo}sW^8^KWc3FyyTMB zGP*<+9REj)dHyA3uGodYbX1?NU0`fZYSwy9v$Vz$d|~=r`}l6}JDiDr@0~gSG&^zd zN(TlS6bLgb-o>ZBW95lqOmVKEQ>Kw63~Rs2oU)GDok(RQNmvdTs2y6Clcr8I^<-RH zJI8pltgQ5iok7ai5f_Wr4g6a`y!-!ba{ijzlfiyGIhEGy(u2=auin}^IL_qI2?{3* zA!PG&kD84^ciNGkl>hl1?(}UocwtgtRI--w@~doW^B_%Z?I&g*Cxwz1L~~m5|MM- o>i@>v`kznyfBzMKIHotYo;mzuO8oB`PV$$?NXbiPNL=&&Kf4k&rvLx| literal 0 HcmV?d00001 diff --git a/docs/source/_static/images/logo-dark.png b/docs/source/_static/images/logo-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..cea6b16ee771f2b977310fb4cf9bfc8794a6131c GIT binary patch literal 5337 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 literal 0 HcmV?d00001 diff --git a/docs/source/_static/images/logo-light.png b/docs/source/_static/images/logo-light.png new file mode 100644 index 0000000000000000000000000000000000000000..44489fc3c71b68f11593bd3448a49d48652bbcfe GIT binary patch literal 5321 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 CEiGXH literal 0 HcmV?d00001 diff --git a/docs/source/_static/js/custom.js b/docs/source/_static/js/custom.js deleted file mode 100644 index c8df1c354f..0000000000 --- a/docs/source/_static/js/custom.js +++ /dev/null @@ -1,104 +0,0 @@ -// Based on https://github.com/huggingface/transformers/blob/master/docs/source/_static/js/custom.js - - -// These two things need to be updated at each release for the version selector. -// Last stable version -const stableVersion = "v1.1.0" -// Dictionary doc folder to label. The last stable version should have an empty key. -const versionMapping = { - "latest": "latest", - "": "v1.1.1 (stable)", - "v1.1.0": "v1.1.0", - "v1.0.0": "v1.0.0", - "v0.12.0": "v0.12.0", - "v0.11.0": "v0.11.0", -} - -function addGithubButton() { - const div = ` - - `; - document.querySelector(".sidebar-brand").insertAdjacentHTML('afterend', div); -} - -function addVersionControl() { - // To grab the version currently in view, we parse the url - const parts = location.toString().split('#')[0].split('/'); - let versionIndex = parts.length - 2; - // Index page may not have a last part with filename.html so we need to go up - if (parts[parts.length - 1] != "" && ! parts[parts.length - 1].match(/\.html$|^search.html?/)) { - versionIndex = parts.length - 1; - } - const version = parts[versionIndex]; - - // Menu with all the links, - const versionMenu = document.createElement("div"); - - const htmlLines = []; - for (const [key, value] of Object.entries(versionMapping)) { - let baseUrlIndex = (version == "doctr") ? versionIndex + 1: versionIndex; - var urlParts = parts.slice(0, baseUrlIndex); - if (key != "") { - urlParts = urlParts.concat([key]); - } - urlParts = urlParts.concat(parts.slice(versionIndex+1)); - htmlLines.push(`${value}`); - } - - versionMenu.classList.add("version-dropdown"); - versionMenu.innerHTML = htmlLines.join('\n'); - - // Button for version selection - const versionButton = document.createElement("div"); - versionButton.classList.add("version-button"); - let label = (version == "doctr") ? stableVersion : version - versionButton.innerText = label.concat(" ▼"); - - // Toggle the menu when we click on the button - versionButton.addEventListener("click", () => { - versionMenu.classList.toggle("version-show"); - }); - - // Hide the menu when we click elsewhere - window.addEventListener("click", (event) => { - if (event.target != versionButton){ - versionMenu.classList.remove('version-show'); - } - }); - - // Container - const div = document.createElement("div"); - div.appendChild(versionButton); - div.appendChild(versionMenu); - div.style.paddingTop = '5px'; - div.style.paddingBottom = '5px'; - div.style.display = 'block'; - div.style.textAlign = 'center'; - - const scrollDiv = document.querySelector(".sidebar-brand"); - scrollDiv.insertBefore(div, scrollDiv.children[1]); -} - -/*! - * github-buttons v2.2.10 - * (c) 2019 なつき - * @license BSD-2-Clause - */ -/** - * modified to run programmatically - */ -function parseGithubButtons (){"use strict";var e=window.document,t=e.location,o=window.encodeURIComponent,r=window.decodeURIComponent,n=window.Math,a=window.HTMLElement,i=window.XMLHttpRequest,l="https://unpkg.com/github-buttons@2.2.10/dist/buttons.html",c=i&&i.prototype&&"withCredentials"in i.prototype,d=c&&a&&a.prototype.attachShadow&&!a.prototype.attachShadow.prototype,s=function(e,t,o){e.addEventListener?e.addEventListener(t,o):e.attachEvent("on"+t,o)},u=function(e,t,o){e.removeEventListener?e.removeEventListener(t,o):e.detachEvent("on"+t,o)},h=function(e,t,o){var r=function(n){return u(e,t,r),o(n)};s(e,t,r)},f=function(e,t,o){var r=function(n){if(t.test(e.readyState))return u(e,"readystatechange",r),o(n)};s(e,"readystatechange",r)},p=function(e){return function(t,o,r){var n=e.createElement(t);if(o)for(var a in o){var i=o[a];null!=i&&(null!=n[a]?n[a]=i:n.setAttribute(a,i))}if(r)for(var l=0,c=r.length;l'},eye:{width:16,height:16,path:''},star:{width:14,height:16,path:''},"repo-forked":{width:10,height:16,path:''},"issue-opened":{width:14,height:16,path:''},"cloud-download":{width:16,height:16,path:''}},w={},x=function(e,t,o){var r=p(e.ownerDocument),n=e.appendChild(r("style",{type:"text/css"}));n.styleSheet?n.styleSheet.cssText=m:n.appendChild(e.ownerDocument.createTextNode(m));var a,l,d=r("a",{className:"btn",href:t.href,target:"_blank",innerHTML:(a=t["data-icon"],l=/^large$/i.test(t["data-size"])?16:14,a=(""+a).toLowerCase().replace(/^octicon-/,""),{}.hasOwnProperty.call(v,a)||(a="mark-github"),'"),"aria-label":t["aria-label"]||void 0},[" ",r("span",{},[t["data-text"]||""])]);/\.github\.com$/.test("."+d.hostname)?/^https?:\/\/((gist\.)?github\.com\/[^\/?#]+\/[^\/?#]+\/archive\/|github\.com\/[^\/?#]+\/[^\/?#]+\/releases\/download\/|codeload\.github\.com\/)/.test(d.href)&&(d.target="_top"):(d.href="#",d.target="_self");var u,h,g,x,y=e.appendChild(r("div",{className:"widget"+(/^large$/i.test(t["data-size"])?" lg":"")},[d]));/^(true|1)$/i.test(t["data-show-count"])&&"github.com"===d.hostname&&(u=d.pathname.replace(/^(?!\/)/,"/").match(/^\/([^\/?#]+)(?:\/([^\/?#]+)(?:\/(?:(subscription)|(fork)|(issues)|([^\/?#]+)))?)?(?:[\/?#]|$)/))&&!u[6]?(u[2]?(h="/repos/"+u[1]+"/"+u[2],u[3]?(x="subscribers_count",g="watchers"):u[4]?(x="forks_count",g="network"):u[5]?(x="open_issues_count",g="issues"):(x="stargazers_count",g="stargazers")):(h="/users/"+u[1],g=x="followers"),function(e,t){var o=w[e]||(w[e]=[]);if(!(o.push(t)>1)){var r=b(function(){for(delete w[e];t=o.shift();)t.apply(null,arguments)});if(c){var n=new i;s(n,"abort",r),s(n,"error",r),s(n,"load",function(){var e;try{e=JSON.parse(n.responseText)}catch(e){return void r(e)}r(200!==n.status,e)}),n.open("GET",e),n.send()}else{var a=this||window;a._=function(e){a._=null,r(200!==e.meta.status,e.data)};var l=p(a.document)("script",{async:!0,src:e+(/\?/.test(e)?"&":"?")+"callback=_"}),d=function(){a._&&a._({meta:{}})};s(l,"load",d),s(l,"error",d),l.readyState&&f(l,/de|m/,d),a.document.getElementsByTagName("head")[0].appendChild(l)}}}.call(this,"https://api.github.com"+h,function(e,t){if(!e){var n=t[x];y.appendChild(r("a",{className:"social-count",href:t.html_url+"/"+g,target:"_blank","aria-label":n+" "+x.replace(/_count$/,"").replace("_"," ").slice(0,n<2?-1:void 0)+" on GitHub"},[r("b"),r("i"),r("span",{},[(""+n).replace(/\B(?=(\d{3})+(?!\d))/g,",")])]))}o&&o(y)})):o&&o(y)},y=window.devicePixelRatio||1,C=function(e){return(y>1?n.ceil(n.round(e*y)/y*2)/2:n.ceil(e))||0},F=function(e,t){e.style.width=t[0]+"px",e.style.height=t[1]+"px"},k=function(t,r){if(null!=t&&null!=r)if(t.getAttribute&&(t=function(e){for(var t={href:e.href,title:e.title,"aria-label":e.getAttribute("aria-label")},o=["icon","text","size","show-count"],r=0,n=o.length;r { + document.querySelectorAll("[data-copy]").forEach((button) => { + button.addEventListener("click", async () => { + try { + await navigator.clipboard.writeText(button.dataset.copy); + const label = button.textContent; + button.textContent = "Copied!"; + setTimeout(() => (button.textContent = label), 1500); + } catch (err) { + console.warn("[docTR] unable to copy to the clipboard", err); + } + }); + }); +}); diff --git a/docs/source/_static/switcher.json b/docs/source/_static/switcher.json new file mode 100644 index 0000000000..4efae7b979 --- /dev/null +++ b/docs/source/_static/switcher.json @@ -0,0 +1,33 @@ +[ + { + "name": "latest (main)", + "version": "latest", + "url": "https://mindee.github.io/doctr/latest/" + }, + { + "name": "v1.1.0 (stable)", + "version": "v1.1.0", + "url": "https://mindee.github.io/doctr/", + "preferred": true + }, + { + "name": "v1.0.1", + "version": "v1.0.1", + "url": "https://mindee.github.io/doctr/v1.0.1/" + }, + { + "name": "v1.0.0", + "version": "v1.0.0", + "url": "https://mindee.github.io/doctr/v1.0.0/" + }, + { + "name": "v0.12.0", + "version": "v0.12.0", + "url": "https://mindee.github.io/doctr/v0.12.0/" + }, + { + "name": "v0.11.0", + "version": "v0.11.0", + "url": "https://mindee.github.io/doctr/v0.11.0/" + } +] diff --git a/docs/source/_templates/license.html b/docs/source/_templates/license.html new file mode 100644 index 0000000000..2dcc3c4f6f --- /dev/null +++ b/docs/source/_templates/license.html @@ -0,0 +1,3 @@ +

        + Released under the Apache 2.0 License +

        diff --git a/docs/source/_templates/maintainers.html b/docs/source/_templates/maintainers.html new file mode 100644 index 0000000000..a829b8d03b --- /dev/null +++ b/docs/source/_templates/maintainers.html @@ -0,0 +1,4 @@ +

        + Created by Mindee · developed and maintained by + t2k GmbH and the docTR community +

        diff --git a/docs/source/api/contrib.md b/docs/source/api/contrib.md new file mode 100644 index 0000000000..3b7d6009b7 --- /dev/null +++ b/docs/source/api/contrib.md @@ -0,0 +1,13 @@ +# doctr.contrib + +```{eval-rst} +.. module:: doctr.contrib +``` + +Complementary modules for document analysis pipelines, running on ONNX Runtime +(`pip install "python-doctr[contrib]"`). See [](../user_guide/artefacts.md). + +```{eval-rst} +.. autoclass:: ArtefactDetector + :members: show +``` diff --git a/docs/source/api/datasets.md b/docs/source/api/datasets.md new file mode 100644 index 0000000000..f7b0c9e827 --- /dev/null +++ b/docs/source/api/datasets.md @@ -0,0 +1,93 @@ +# doctr.datasets + +```{eval-rst} +.. module:: doctr.datasets +``` + +Public datasets, synthetic data generators and loaders for your own annotations. See [](../training/datasets.md) +for a guide. + +## Public datasets + +```{eval-rst} +.. autoclass:: FUNSD + +.. autoclass:: SROIE + +.. autoclass:: CORD + +.. autoclass:: IIIT5K + +.. autoclass:: SVT + +.. autoclass:: SVHN + +.. autoclass:: SynthText + +.. autoclass:: IC03 + +.. autoclass:: IC13 + +.. autoclass:: IMGUR5K + +.. autoclass:: MJSynth + +.. autoclass:: IIITHWS + +.. autoclass:: WILDRECEIPT + +.. autoclass:: COCOTEXT + +.. autoclass:: DocArtefacts +``` + +## Synthetic data generators + +```{eval-rst} +.. autoclass:: CharacterGenerator + +.. autoclass:: WordGenerator +``` + +## Custom datasets + +```{eval-rst} +.. autoclass:: DetectionDataset + +.. autoclass:: RecognitionDataset + +.. autoclass:: OCRDataset + +.. autoclass:: LayoutDataset + +.. autoclass:: TableStructureDataset + +.. autoclass:: OrientationDataset +``` + +## Vocabularies + +```{eval-rst} +.. data:: VOCABS + :type: dict[str, str] + + The supported vocabularies, by name. See :doc:`../models/vocabs` for the complete list. +``` + +## Utilities + +```{eval-rst} +.. autofunction:: translate + +.. autofunction:: encode_string + +.. autofunction:: decode_sequence + +.. autofunction:: encode_sequences + +.. autofunction:: pre_transform_multiclass + +.. autofunction:: crop_bboxes_from_image + +.. autofunction:: convert_target_to_relative +``` diff --git a/docs/source/api/index.md b/docs/source/api/index.md new file mode 100644 index 0000000000..393cc85a39 --- /dev/null +++ b/docs/source/api/index.md @@ -0,0 +1,61 @@ +# API reference + +The complete reference of the public API, generated from the docstrings of the source code. For a guided tour, +start with the [user guide](../user_guide/index.md). + +::::{grid} 1 2 3 3 +:gutter: 3 + +:::{grid-item-card} {octicon}`file;1.1em` doctr.io +:link: io +:link-type: doc + +Reading files, the `Document` elements, and the exporters. +::: + +:::{grid-item-card} {octicon}`cpu;1.1em` doctr.models +:link: models +:link-type: doc + +Predictors, architectures, the Hugging Face Hub integration and model utilities. +::: + +:::{grid-item-card} {octicon}`database;1.1em` doctr.datasets +:link: datasets +:link-type: doc + +Public datasets, synthetic generators, custom loaders and vocabularies. +::: + +:::{grid-item-card} {octicon}`paintbrush;1.1em` doctr.transforms +:link: transforms +:link-type: doc + +Data augmentation and pre-processing transformations. +::: + +:::{grid-item-card} {octicon}`tools;1.1em` doctr.utils +:link: utils +:link-type: doc + +Visualization, page reconstruction and evaluation metrics. +::: + +:::{grid-item-card} {octicon}`plus-circle;1.1em` doctr.contrib +:link: contrib +:link-type: doc + +Complementary modules, such as the artefact detector. +::: +:::: + +```{toctree} +:hidden: + +io +models +datasets +transforms +utils +contrib +``` diff --git a/docs/source/api/io.md b/docs/source/api/io.md new file mode 100644 index 0000000000..5957cf70c9 --- /dev/null +++ b/docs/source/api/io.md @@ -0,0 +1,159 @@ +# doctr.io + +```{eval-rst} +.. module:: doctr.io +``` + +Read documents into pages, represent the predictions as a tree of elements, and export them. + +## Reading files + +```{eval-rst} +.. autoclass:: DocumentFile + + .. automethod:: from_pdf + .. automethod:: from_images + .. automethod:: from_url + +.. autofunction:: read_pdf + +.. autofunction:: read_img_as_numpy + +.. autofunction:: read_img_as_tensor + +.. autofunction:: decode_img_as_tensor + +.. autofunction:: read_html +``` + +## Document structure + +The elements returned by the predictors, from the largest to the smallest. See +[](../getting_started/concepts.md#the-document-tree) for an overview. + +### Document + +```{eval-rst} +.. autoclass:: Document + + .. automethod:: render + .. automethod:: export + .. automethod:: export_as + .. automethod:: export_as_markdown + .. automethod:: export_as_asciidoc + .. automethod:: export_as_html + .. automethod:: export_as_xml + .. automethod:: show + .. automethod:: synthesize + .. automethod:: from_dict +``` + +### Page + +```{eval-rst} +.. autoclass:: Page + + .. automethod:: render + .. automethod:: export + .. automethod:: export_as + .. automethod:: export_as_markdown + .. automethod:: export_as_asciidoc + .. automethod:: export_as_html + .. automethod:: export_as_xml + .. automethod:: items_in_reading_order + .. automethod:: show + .. automethod:: synthesize +``` + +### Block, Line and Word + +```{eval-rst} +.. autoclass:: Block + +.. autoclass:: Line + +.. autoclass:: Word + +.. autoclass:: Artefact +``` + +### Layout and tables + +```{eval-rst} +.. autoclass:: LayoutElement + +.. autoclass:: Table + + .. automethod:: to_grid + .. automethod:: render + +.. autoclass:: TableCell + :members: row_span, col_span +``` + +### Key information extraction + +Returned by {func}`~doctr.models.kie_predictor`: predictions are grouped by class instead of by spatial layout. + +```{eval-rst} +.. autoclass:: KIEDocument + + .. automethod:: show + +.. autoclass:: KIEPage + + .. automethod:: render + .. automethod:: export + .. automethod:: export_as + .. automethod:: export_as_markdown + .. automethod:: export_as_asciidoc + .. automethod:: export_as_html + .. automethod:: export_as_xml + .. automethod:: show + +.. autoclass:: Prediction +``` + +## Exporters + +The `export_as_*` methods of the elements delegate to these exporters, which share the same reading-order +linearization. See [](../user_guide/exporting.md). + +```{eval-rst} +.. autoclass:: TextExporter + :members: export_page, export_kie_page, export_document + +.. autoclass:: MarkdownExporter + :members: export_page, export_kie_page, export_document + +.. autoclass:: AsciiDocExporter + :members: export_page, export_kie_page, export_document + +.. autoclass:: HTMLExporter + :members: export_page, export_kie_page, export_document + +.. autoclass:: XMLExporter + :members: export_page, export_kie_page, export_document + +.. autofunction:: page_reading_order +``` + +## Figures + +Rendering of the figures found by the layout model in the Markdown, AsciiDoc and HTML exports. See +[](../user_guide/exporting.md#figures). + +```{eval-rst} +.. autoclass:: FigureEncoder + :members: resolve, source, enabled, materializes + +.. autofunction:: crop_layout_region + +.. autofunction:: encode_crop + +.. autofunction:: picture_regions + +.. autofunction:: is_picture_region + +.. autofunction:: is_picture_label +``` diff --git a/docs/source/modules/models.rst b/docs/source/api/models.md similarity index 65% rename from docs/source/modules/models.rst rename to docs/source/api/models.md index 8083f9922c..00bbdf32b4 100644 --- a/docs/source/modules/models.rst +++ b/docs/source/api/models.md @@ -1,172 +1,186 @@ -doctr.models -============ +# doctr.models -.. currentmodule:: doctr.models +```{eval-rst} +.. module:: doctr.models +``` +Predictors and model architectures. All the factory functions below are also importable from `doctr.models` +directly. See the [model zoo](../models/index.md) for benchmarks. -doctr.models.classification ---------------------------- +## End-to-end predictors -.. autofunction:: doctr.models.classification.vgg16_bn_r - -.. autofunction:: doctr.models.classification.resnet18 +```{eval-rst} +.. autofunction:: doctr.models.ocr_predictor -.. autofunction:: doctr.models.classification.resnet34 +.. autofunction:: doctr.models.kie_predictor -.. autofunction:: doctr.models.classification.resnet50 +.. autoclass:: doctr.models.predictor.OCRPredictor + :members: add_hook -.. autofunction:: doctr.models.classification.resnet31 +.. autoclass:: doctr.models.kie_predictor.KIEPredictor + :members: add_hook -.. autofunction:: doctr.models.classification.mobilenet_v3_small +.. autoclass:: doctr.models.builder.DocumentBuilder -.. autofunction:: doctr.models.classification.mobilenet_v3_large +.. autoclass:: doctr.models.preprocessor.PreProcessor +``` -.. autofunction:: doctr.models.classification.mobilenet_v3_small_r +## Text detection -.. autofunction:: doctr.models.classification.mobilenet_v3_large_r +```{eval-rst} +.. autofunction:: doctr.models.detection.detection_predictor -.. autofunction:: doctr.models.classification.mobilenet_v3_small_crop_orientation +.. autofunction:: doctr.models.detection.db_resnet34 -.. autofunction:: doctr.models.classification.mobilenet_v3_small_page_orientation +.. autofunction:: doctr.models.detection.db_resnet50 -.. autofunction:: doctr.models.classification.magc_resnet31 +.. autofunction:: doctr.models.detection.db_mobilenet_v3_large -.. autofunction:: doctr.models.classification.vit_s +.. autofunction:: doctr.models.detection.linknet_resnet18 -.. autofunction:: doctr.models.classification.vit_b +.. autofunction:: doctr.models.detection.linknet_resnet34 -.. autofunction:: doctr.models.classification.textnet_tiny +.. autofunction:: doctr.models.detection.linknet_resnet50 -.. autofunction:: doctr.models.classification.textnet_small +.. autofunction:: doctr.models.detection.fast_tiny -.. autofunction:: doctr.models.classification.textnet_base +.. autofunction:: doctr.models.detection.fast_small -.. autofunction:: doctr.models.classification.vip_tiny +.. autofunction:: doctr.models.detection.fast_base +``` -.. autofunction:: doctr.models.classification.vip_base +## Text recognition -.. autofunction:: doctr.models.classification.vit_det_s +```{eval-rst} +.. autofunction:: doctr.models.recognition.recognition_predictor -.. autofunction:: doctr.models.classification.vit_det_m +.. autofunction:: doctr.models.recognition.crnn_vgg16_bn -.. autofunction:: doctr.models.classification.starnet_s3 +.. autofunction:: doctr.models.recognition.crnn_mobilenet_v3_small -.. autofunction:: doctr.models.classification.crop_orientation_predictor +.. autofunction:: doctr.models.recognition.crnn_mobilenet_v3_large -.. autofunction:: doctr.models.classification.page_orientation_predictor +.. autofunction:: doctr.models.recognition.sar_resnet31 +.. autofunction:: doctr.models.recognition.master -doctr.models.detection ----------------------- +.. autofunction:: doctr.models.recognition.vitstr_small -.. autofunction:: doctr.models.detection.linknet_resnet18 +.. autofunction:: doctr.models.recognition.vitstr_base -.. autofunction:: doctr.models.detection.linknet_resnet34 +.. autofunction:: doctr.models.recognition.parseq -.. autofunction:: doctr.models.detection.linknet_resnet50 +.. autofunction:: doctr.models.recognition.viptr_tiny +``` -.. autofunction:: doctr.models.detection.db_resnet50 +## Layout analysis -.. autofunction:: doctr.models.detection.db_mobilenet_v3_large +```{eval-rst} +.. autofunction:: doctr.models.layout.layout_predictor -.. autofunction:: doctr.models.detection.fast_tiny +.. autofunction:: doctr.models.layout.lw_detr_s -.. autofunction:: doctr.models.detection.fast_small +.. autofunction:: doctr.models.layout.lw_detr_m +``` -.. autofunction:: doctr.models.detection.fast_base +## Table structure recognition -.. autofunction:: doctr.models.detection.detection_predictor +```{eval-rst} +.. autofunction:: doctr.models.table_structure.table_predictor +.. autofunction:: doctr.models.table_structure.tablecenternet +``` -doctr.models.layout -------------------- +## Classification -.. autofunction:: doctr.models.layout.lw_detr_s +Orientation classifiers, and the backbones used by the detection and recognition models. -.. autofunction:: doctr.models.layout.lw_detr_m +```{eval-rst} +.. autofunction:: doctr.models.classification.crop_orientation_predictor -.. autofunction:: doctr.models.layout.layout_predictor +.. autofunction:: doctr.models.classification.page_orientation_predictor +.. autofunction:: doctr.models.classification.mobilenet_v3_small_crop_orientation -doctr.models.table_structure ----------------------------- +.. autofunction:: doctr.models.classification.mobilenet_v3_small_page_orientation -.. autofunction:: doctr.models.table_structure.tablecenternet +.. autofunction:: doctr.models.classification.vgg16_bn_r -.. autofunction:: doctr.models.table_structure.table_predictor +.. autofunction:: doctr.models.classification.resnet18 +.. autofunction:: doctr.models.classification.resnet31 -doctr.models.recognition ------------------------- +.. autofunction:: doctr.models.classification.resnet34 -.. autofunction:: doctr.models.recognition.crnn_vgg16_bn +.. autofunction:: doctr.models.classification.resnet50 -.. autofunction:: doctr.models.recognition.crnn_mobilenet_v3_small +.. autofunction:: doctr.models.classification.magc_resnet31 -.. autofunction:: doctr.models.recognition.crnn_mobilenet_v3_large +.. autofunction:: doctr.models.classification.mobilenet_v3_small -.. autofunction:: doctr.models.recognition.sar_resnet31 +.. autofunction:: doctr.models.classification.mobilenet_v3_large -.. autofunction:: doctr.models.recognition.master +.. autofunction:: doctr.models.classification.mobilenet_v3_small_r -.. autofunction:: doctr.models.recognition.vitstr_small +.. autofunction:: doctr.models.classification.mobilenet_v3_large_r -.. autofunction:: doctr.models.recognition.vitstr_base +.. autofunction:: doctr.models.classification.vit_s -.. autofunction:: doctr.models.recognition.parseq +.. autofunction:: doctr.models.classification.vit_b -.. autofunction:: doctr.models.recognition.viptr_tiny +.. autofunction:: doctr.models.classification.textnet_tiny -.. autofunction:: doctr.models.recognition.recognition_predictor +.. autofunction:: doctr.models.classification.textnet_small +.. autofunction:: doctr.models.classification.textnet_base -doctr.models.zoo ----------------- +.. autofunction:: doctr.models.classification.vip_tiny -.. autofunction:: doctr.models.ocr_predictor +.. autofunction:: doctr.models.classification.vip_base -.. autofunction:: doctr.models.kie_predictor +.. autofunction:: doctr.models.classification.vit_det_s +.. autofunction:: doctr.models.classification.vit_det_m -doctr.models.factory --------------------- +.. autofunction:: doctr.models.classification.starnet_s3 +``` -.. autofunction:: doctr.models.factory.login_to_hub +## Hugging Face Hub +```{eval-rst} .. autofunction:: doctr.models.factory.from_hub .. autofunction:: doctr.models.factory.push_to_hf_hub +.. autofunction:: doctr.models.factory.login_to_hub +``` -doctr.models.utils ------------------- - -.. currentmodule:: doctr.models.utils - -.. autofunction:: export_model_to_onnx +## Model utilities -.. autofunction:: add_whitelist +```{eval-rst} +.. autofunction:: doctr.models.utils.add_whitelist +.. autofunction:: doctr.models.utils.export_model_to_onnx +``` -doctr.models.reading_order --------------------------- +## Reading order -Language-independent estimation of the reading order of the elements of a page, combining a column-following -topological sort of their spatial relations with optional layout semantics (headers, footers, captions). The -reading-order-aware export of a :class:`~doctr.io.elements.Page` / :class:`~doctr.io.elements.Document` to -Markdown or AsciiDoc is exposed through the ``export_as_markdown`` / ``export_as_asciidoc`` methods of -:mod:`doctr.io.elements`. +Language-independent estimation of the reading order of the elements of a page. It combines a column-following +topological sort of their spatial relations with optional layout semantics (headers, footers, captions), and is +used by all the [exports](../user_guide/exporting.md#reading-order). -.. currentmodule:: doctr.models.reading_order +```{eval-rst} +.. module:: doctr.models.reading_order -.. autofunction:: detect_text_direction +.. autoclass:: doctr.models.reading_order.ReadingOrderPredictor -.. autofunction:: sort_reading_order +.. autofunction:: doctr.models.reading_order.sort_reading_order -.. autofunction:: resolve_reading_segments +.. autofunction:: doctr.models.reading_order.detect_text_direction -.. autofunction:: assign_layout_labels +.. autofunction:: doctr.models.reading_order.resolve_reading_segments -.. autofunction:: deskew_reading_geometries +.. autofunction:: doctr.models.reading_order.assign_layout_labels -.. autoclass:: ReadingOrderPredictor +.. autofunction:: doctr.models.reading_order.deskew_reading_geometries +``` diff --git a/docs/source/api/transforms.md b/docs/source/api/transforms.md new file mode 100644 index 0000000000..67d5aa1db8 --- /dev/null +++ b/docs/source/api/transforms.md @@ -0,0 +1,70 @@ +# doctr.transforms + +```{eval-rst} +.. module:: doctr.transforms +``` + +Data transformations for training and inference. Inspired by +[torchvision](https://github.com/pytorch/vision), they are expressed as composable modules. Image transforms apply to +the image only; sample transforms (wrapped in {class}`SampleCompose`) also update the target, e.g. the boxes of a +rotated image. + +```python +from torchvision.transforms.v2 import Compose + +from doctr import transforms as T + +img_transforms = Compose([ + T.Resize((32, 128), preserve_aspect_ratio=True), + T.RandomApply(T.ColorInversion(), 0.1), + T.RandomApply(T.GaussianNoise(mean=0.1, std=0.1), 0.1), +]) +``` + +## Image transformations + +```{eval-rst} +.. autoclass:: Resize + +.. autoclass:: RandomResize + +.. autoclass:: GaussianNoise + +.. autoclass:: GaussianBlur + +.. autoclass:: ChannelShuffle + +.. autoclass:: ColorInversion + +.. autoclass:: RandomShadow + +.. autoclass:: RandomGlare + +.. autoclass:: RandomLighting +``` + +## Geometric transformations + +```{eval-rst} +.. autoclass:: RandomHorizontalFlip + +.. autoclass:: RandomRotate + +.. autoclass:: RandomCrop + +.. autoclass:: RandomPerspective +``` + +## Composition + +```{eval-rst} +.. autoclass:: SampleCompose + +.. autoclass:: ImageTransform + +.. autoclass:: ImageTorchvisionTransform + +.. autoclass:: OneOf + +.. autoclass:: RandomApply +``` diff --git a/docs/source/api/utils.md b/docs/source/api/utils.md new file mode 100644 index 0000000000..6f43421576 --- /dev/null +++ b/docs/source/api/utils.md @@ -0,0 +1,53 @@ +# doctr.utils + +Complementary tools: visualization, page reconstruction and evaluation metrics. + +## Visualization + +```{eval-rst} +.. currentmodule:: doctr.utils.visualization + +.. autofunction:: visualize_page + +.. autofunction:: visualize_kie_page + +.. autofunction:: draw_boxes +``` + +## Reconstitution + +```{eval-rst} +.. currentmodule:: doctr.utils.reconstitution + +.. autofunction:: synthesize_page + +.. autofunction:: synthesize_kie_page +``` + +(task-evaluation)= +## Task evaluation + +Metrics to evaluate models on each task, used by the evaluation scripts of the references and in the +[model zoo](../models/index.md). + +```{eval-rst} +.. currentmodule:: doctr.utils.metrics + +.. autoclass:: TextMatch + :members: update, summary + +.. autoclass:: LocalizationConfusion + :members: update, summary + +.. autoclass:: OCRMetric + :members: update, summary + +.. autoclass:: DetectionMetric + :members: update, summary + +.. autoclass:: ObjectDetectionMetric + :members: update, summary + +.. autoclass:: TableCellMetric + :members: update, summary +``` diff --git a/docs/source/changelog.md b/docs/source/changelog.md new file mode 100644 index 0000000000..33177ee3ca --- /dev/null +++ b/docs/source/changelog.md @@ -0,0 +1,27 @@ +# Changelog + +Every release of docTR, with a link to its detailed release notes on GitHub. All releases are also listed on the [GitHub releases page](https://github.com/mindee/doctr/releases). + +| Version | Release date | Release notes | +| --- | --- | --- | +| **v1.1.0** | 2026-08-21 | [v1.1.0 on GitHub](https://github.com/mindee/doctr/releases/tag/v1.1.0) | +| **v1.0.1** | 2026-02-04 | [v1.0.1 on GitHub](https://github.com/mindee/doctr/releases/tag/v1.0.1) | +| **v1.0.0** | 2025-07-09 | [v1.0.0 on GitHub](https://github.com/mindee/doctr/releases/tag/v1.0.0) | +| **v0.12.0** | 2025-06-20 | [v0.12.0 on GitHub](https://github.com/mindee/doctr/releases/tag/v0.12.0) | +| **v0.11.0** | 2025-01-30 | [v0.11.0 on GitHub](https://github.com/mindee/doctr/releases/tag/v0.11.0) | +| **v0.10.0** | 2024-10-21 | [v0.10.0 on GitHub](https://github.com/mindee/doctr/releases/tag/v0.10.0) | +| **v0.9.0** | 2024-08-08 | [v0.9.0 on GitHub](https://github.com/mindee/doctr/releases/tag/v0.9.0) | +| **v0.8.1** | 2024-03-04 | [v0.8.1 on GitHub](https://github.com/mindee/doctr/releases/tag/v0.8.1) | +| **v0.8.0** | 2024-02-28 | [v0.8.0 on GitHub](https://github.com/mindee/doctr/releases/tag/v0.8.0) | +| **v0.7.0** | 2023-09-09 | [v0.7.0 on GitHub](https://github.com/mindee/doctr/releases/tag/v0.7.0) | +| **v0.6.0** | 2022-09-29 | [v0.6.0 on GitHub](https://github.com/mindee/doctr/releases/tag/v0.6.0) | +| **v0.5.1** | 2022-03-22 | [v0.5.1 on GitHub](https://github.com/mindee/doctr/releases/tag/v0.5.1) | +| **v0.5.0** | 2021-12-31 | [v0.5.0 on GitHub](https://github.com/mindee/doctr/releases/tag/v0.5.0) | +| **v0.4.1** | 2021-11-22 | [v0.4.1 on GitHub](https://github.com/mindee/doctr/releases/tag/v0.4.1) | +| **v0.4.0** | 2021-10-01 | [v0.4.0 on GitHub](https://github.com/mindee/doctr/releases/tag/v0.4.0) | +| **v0.3.1** | 2021-08-27 | [v0.3.1 on GitHub](https://github.com/mindee/doctr/releases/tag/v0.3.1) | +| **v0.3.0** | 2021-07-02 | [v0.3.0 on GitHub](https://github.com/mindee/doctr/releases/tag/v0.3.0) | +| **v0.2.1** | 2021-05-28 | [v0.2.1 on GitHub](https://github.com/mindee/doctr/releases/tag/v0.2.1) | +| **v0.2.0** | 2021-05-11 | [v0.2.0 on GitHub](https://github.com/mindee/doctr/releases/tag/v0.2.0) | +| **v0.1.1** | 2021-03-18 | [v0.1.1 on GitHub](https://github.com/mindee/doctr/releases/tag/v0.1.1) | +| **v0.1.0** | 2021-03-05 | [v0.1.0 on GitHub](https://github.com/mindee/doctr/releases/tag/v0.1.0) | diff --git a/docs/source/changelog.rst b/docs/source/changelog.rst deleted file mode 100644 index f862b71195..0000000000 --- a/docs/source/changelog.rst +++ /dev/null @@ -1,86 +0,0 @@ -Changelog -========= - -v1.1.0 (2026-08-21) -------------------- -Release note: `v1.1.0 `_ - -v1.0.1 (2026-02-04) -------------------- -Release note: `v1.0.1 `_ - -v1.0.0 (2025-07-09) -------------------- -Release note: `v1.0.0 `_ - -v0.12.0 (2025-06-20) --------------------- -Release note: `v0.12.0 `_ - -v0.11.0 (2025-01-30) --------------------- -Release note: `v0.11.0 `_ - -v0.10.0 (2024-10-21) --------------------- -Release note: `v0.10.0 `_ - -v0.9.0 (2024-08-08) -------------------- -Release note: `v0.9.0 `_ - -v0.8.1 (2024-03-04) -------------------- -Release note: `v0.8.1 `_ - -v0.8.0 (2024-02-28) -------------------- -Release note: `v0.8.0 `_ - -v0.7.0 (2023-09-09) -------------------- -Release note: `v0.7.0 `_ - -v0.6.0 (2022-09-29) -------------------- -Release note: `v0.6.0 `_ - -v0.5.1 (2022-03-22) -------------------- -Release note: `v0.5.1 `_ - -v0.5.0 (2021-12-31) -------------------- -Release note: `v0.5.0 `_ - -v0.4.1 (2021-11-22) -------------------- -Release note: `v0.4.1 `_ - -v0.4.0 (2021-10-01) -------------------- -Release note: `v0.4.0 `_ - -v0.3.1 (2021-08-27) -------------------- -Release note: `v0.3.1 `_ - -v0.3.0 (2021-07-02) -------------------- -Release note: `v0.3.0 `_ - -v0.2.1 (2021-05-28) -------------------- -Release note: `v0.2.1 `_ - -v0.2.0 (2021-05-11) -------------------- -Release note: `v0.2.0 `_ - -v0.1.1 (2021-03-18) -------------------- -Release note: `v0.1.1 `_ - -v0.1.0 (2021-03-05) -------------------- -Release note: `v0.1.0 `_ diff --git a/docs/source/community/index.md b/docs/source/community/index.md new file mode 100644 index 0000000000..b9ca213419 --- /dev/null +++ b/docs/source/community/index.md @@ -0,0 +1,114 @@ +# Community + +docTR is an open-source project developed in the open on [GitHub](https://github.com/mindee/doctr). Whether you need +help, want to share what you built, or would like to contribute, you are welcome here. + +## Get help + +::::{grid} 1 2 3 3 +:gutter: 3 + +:::{grid-item-card} {octicon}`comment-discussion;1.1em` Discussions +:link: https://github.com/mindee/doctr/discussions + +Questions, ideas and show-and-tell. The best place to ask "how do I...?". +::: + +:::{grid-item-card} {octicon}`issue-opened;1.1em` Issues +:link: https://github.com/mindee/doctr/issues + +Bug reports and feature requests. Please include the output of `scripts/collect_env.py`. +::: + +:::{grid-item-card} {octicon}`hubot;1.1em` Ask the docTR Guru +:link: https://gurubase.io/g/doctr + +An AI assistant trained on the docTR documentation and code. +::: +:::: + +Before asking, have a look at [](../user_guide/faq.md). + +## Learn and explore + +::::{grid} 1 2 3 3 +:gutter: 3 + +:::{grid-item-card} {octicon}`book;1.1em` Notebooks +:link: notebooks +:link-type: doc + +Tutorials you can run in Google Colab. +::: + +:::{grid-item-card} {octicon}`tools;1.1em` Community tools +:link: tools +:link-type: doc + +Labeling tool, ONNX runtime, Docling plugin and more. +::: + +:::{grid-item-card} {octicon}`megaphone;1.1em` Articles & videos +:link: resources +:link-type: doc + +What the community wrote and recorded about docTR. +::: +:::: + +## Contribute + +Fixing a typo, adding a vocabulary, implementing a paper: every contribution counts. The +{doc}`contribution guide <../contributing/contributing>` explains how to set up a development environment, run the +tests and build this documentation. Please also read the {doc}`code of conduct <../contributing/code_of_conduct>`. + +## Professional support + +docTR was originally created by [Mindee](https://mindee.com) and is now developed and maintained by +[t2k GmbH](https://www.text2knowledge.de). t2k offers professional services around docTR: + +- **Custom OCR development**: detection, recognition and pipeline work tailored to your documents +- **Project implementation**: turning your ideas into production-ready docTR integrations +- **Technical consulting**: architecture, deployment and integration guidance +- **Ongoing development**: feature extensions and implementation support +- **Workshops & advisory**: hands-on sessions and recommendations for working with docTR + +Contact [info@text2knowledge.de](mailto:info@text2knowledge.de) or visit [text2knowledge.de](https://www.text2knowledge.de) +to discuss your project. + +## Cite docTR + +If docTR helps your research, please cite it: + +```bibtex +@misc{doctr2021, + title={docTR: Document Text Recognition}, + author={Mindee}, + year={2021}, + publisher={GitHub}, + howpublished={\url{https://github.com/mindee/doctr}} +} +``` + +## License + +docTR is distributed under the [Apache 2.0 License](https://github.com/mindee/doctr/blob/main/LICENSE): you can use +it in commercial products. + +```{toctree} +:hidden: +:caption: Learn + +notebooks +tools +resources +``` + +```{toctree} +:hidden: +:caption: Contribute + +../contributing/contributing +../contributing/code_of_conduct +../changelog +``` diff --git a/docs/source/community/notebooks.rst b/docs/source/community/notebooks.rst new file mode 120000 index 0000000000..ff8927cf00 --- /dev/null +++ b/docs/source/community/notebooks.rst @@ -0,0 +1 @@ +../../../notebooks/README.rst \ No newline at end of file diff --git a/docs/source/community/resources.md b/docs/source/community/resources.md new file mode 100644 index 0000000000..5baedafbd1 --- /dev/null +++ b/docs/source/community/resources.md @@ -0,0 +1,43 @@ +# Articles & videos + +Resources created by the docTR community. Wrote or recorded something about docTR? Open a pull request to add it. + +::::{grid} 1 1 2 2 +:gutter: 3 + +:::{grid-item-card} {octicon}`book;1.1em` Fine-tuning OCR works really well +:link: https://www.christianmoscardi.com/blog/2024/10/03/digitizing-us-statistical-abstracts.html + +Digitizing the Statistical Abstracts of the United States, by [Christian Moscardi](https://github.com/cmoscardi). +::: + +:::{grid-item-card} {octicon}`video;1.1em` Mindee docTR — probably the best open-source OCR +:link: https://youtu.be/3nYPIDCToes?si=P3xKIHIiv335x0Ct + +A video by [Andrej Baranovskij](https://github.com/abaranovskis-redsamurai). +::: + +:::{grid-item-card} {octicon}`book;1.1em` Extract text from images in Python with docTR +:link: https://medium.com/@netrajpatil12mati/extract-text-from-images-in-python-with-doctr-455970878507 + +An article by Netraj Patil. +::: + +:::{grid-item-card} {octicon}`book;1.1em` How to detect text in images with OCR +:link: https://blog.roboflow.com/ocr-api/ + +The Roboflow integration, by James Gallagher. +::: + +:::{grid-item-card} {octicon}`book;1.1em` Our search for the best OCR tool in 2023 +:link: https://source.opennews.org/articles/our-search-best-ocr-tool-2023/ + +What we found, by Sanjin Ibrahimovic. +::: + +:::{grid-item-card} {octicon}`book;1.1em` Real-time information extraction from documents with docTR +:link: https://analyticsindiamag.com/ai-mysteries/real-time-information-extraction-from-documents-with-doctr/ + +An article by Yugesh Verma. +::: +:::: diff --git a/docs/source/community/resources.rst b/docs/source/community/resources.rst deleted file mode 100644 index 3332e765c4..0000000000 --- a/docs/source/community/resources.rst +++ /dev/null @@ -1,23 +0,0 @@ -Community Resources -=================== - -This section contains some cool resources created by the docTR community. - - -* |:book:| Fine-tuning OCR works really well: the Statistical Abstracts of the United States: - `Article `_ created by: `Christian Moscardi `_. - -* |:video_camera:| Mindee docTR - Probably the Best Open-Source OCR: - `Video `_ created by: `Andrej Baranovskij `_. - -* |:book:| Extract Text from images in Python with docTR: - `Article `_ created by: `Netraj Patil`. - -* |:book:| How to Detect Text in Images with OCR (Roboflow integration): - `Article `_ created by: `James Gallagher`. - -* |:book:| Our search for the best OCR tool in 2023, and what we found: - `Article `_ created by: `Sanjin Ibrahimovic`. - -* |:book:| Real-time information extraction from documents with docTR: - `Article `_ created by: `Yugesh Verma`. diff --git a/docs/source/community/tools.md b/docs/source/community/tools.md new file mode 100644 index 0000000000..689ea71b0b --- /dev/null +++ b/docs/source/community/tools.md @@ -0,0 +1,41 @@ +# Community tools + +Projects built by the community on top of docTR. Built something useful? Open a pull request to add it to this page, +with a short description and what makes it unique. + +## docTR Labeler + +[github.com/text2knowledge/docTR-Labeler](https://github.com/text2knowledge/docTR-Labeler) + +An annotation tool to create and correct OCR datasets for training and fine-tuning docTR models. + +- **Polygon editing**: draw and edit polygons around text regions, with automatic shape correction +- **Auto-annotation**: suggestions and polygon refinement powered by OnnxTR +- **Fast workflow**: keyboard shortcuts for selection, zoom, undo/redo and saving +- **Flexible**: launch it with the `doctr-labeler` command or use its Python API +- **Private**: everything runs locally, no account needed + +## OnnxTR + +[github.com/felixdittrich92/OnnxTR](https://github.com/felixdittrich92/OnnxTR) + +An [ONNX Runtime](https://onnxruntime.ai) backend for docTR models: the same interface, without PyTorch. See +[](../deployment/onnx.md). + +- **Minimal dependencies**: no PyTorch or TensorFlow +- **Fast inference**: CPU, GPU and accelerators such as OpenVINO +- **Quantization**: 8-bit models for a smaller memory footprint +- **Familiar API**: `onnxtr.models.ocr_predictor`, just like docTR +- **Production ready**: Docker images and Hugging Face Hub integration + +## docling-OCR-OnnxTR + +[github.com/felixdittrich92/docling-OCR-OnnxTR](https://github.com/felixdittrich92/docling-OCR-OnnxTR) + +A plugin that brings the OnnxTR OCR engine to the [Docling](https://github.com/docling-project/docling) document +parsing framework. + +- **Native integration**: use it in Docling pipelines through `OnnxtrOcrOptions` +- **Drop-in replacement** for the other OCR engines of Docling +- **Configurable**: model choice, languages, confidence thresholds, batch sizes, orientation correction and 8-bit + models diff --git a/docs/source/community/tools.rst b/docs/source/community/tools.rst deleted file mode 100644 index 14eb26af89..0000000000 --- a/docs/source/community/tools.rst +++ /dev/null @@ -1,90 +0,0 @@ -Community Tools -=============== - -This section highlights notable tools developed by the docTR community. - - -docTR-Labeler -------------- - -:Link: https://github.com/text2knowledge/docTR-Labeler - -**Overview** - -``docTR-Labeler`` is a dedicated annotation tool tailored for creating and editing OCR datasets to train and fine-tune docTR models. It offers a user-friendly graphical interface, featuring polygon-based text labeling, automatic annotation suggestions via OnnxTR, and convenient label export capabilities. - -**Key Features** - -* Interactive Polygon Editing: Draw and edit polygons around text regions with precision -* AI-Powered Auto-Annotation: Automatic annotation suggestions and polygon refinement powered by OnnxTR -* Auto-Correction: Automatic correction of polygon shapes to ensure accurate text region representation -* Efficient Workflow: Keyboard shortcuts for selection, zooming, undo/redraw, and saving operations -* Flexible Access: CLI launch with ``doctr-labeler`` command and full programmatic Python API integration -* Privacy-First: No authentication required - everything runs locally on your machine -* Real-Time Rendering: Live image rendering with helpful visual feedback - - -OnnxTR ------- - -:Link: https://github.com/felixdittrich92/OnnxTR - -**Overview** - -``OnnxTR`` provides an ONNX-based backend for docTR models, enabling fast, cross-platform inference using ONNX Runtime. It's a core refactored library that enhances the performance and flexibility of OCR tasks without relying on heavy frameworks like PyTorch or TensorFlow. - -**Key Features** - -* Minimal Dependencies: No PyTorch or TensorFlow requirements -* Fast Inference: Optimized with ONNX Runtime for production environments -* Quantization Support: Reduced memory usage and faster inference through model quantization -* Batch Processing: Efficient batch inference capabilities -* Multi-Platform: CPU, GPU, and specialized accelerator runtimes like OpenVINO -* Flexible Installation: Separate install options for different runtime requirements -* Familiar API: One-line inference via ``onnxtr.models.ocr_predictor`` (similar to docTR) -* Docker Ready: Production-ready Docker images available -* Hugging Face Integration: Seamless model sharing and loading -* Server Optimized: OpenCV headless installation options for server environments - - -docling-OCR-OnnxTR ------------------- - -:Link: https://github.com/felixdittrich92/docling-OCR-OnnxTR - -**Overview** - -``docling-OCR-OnnxTR`` is a high-performance plugin that integrates the OnnxTR OCR engine into the Docling document parsing framework. By leveraging ONNX Runtime, it delivers superior accuracy and efficiency compared to traditional OCR engines across various hardware configurations. - -**Key Features** - -* Native Docling Support: Direct integration with Docling pipelines using ``OnnxtrOcrOptions`` -* Drop-in Replacement: Easy migration from existing OCR engines -* Model Selection: Control over detection and recognition model choices -* Multi-Language Support: Configurable language settings -* Quality Control: Adjustable confidence thresholds -* Performance Tuning: Batch size optimization -* Enhanced Processing: Orientation correction and 8-bit model loading options - - -Contribute Your Tool --------------------- - -**Share Your Innovation** - -Have you built something amazing on top of docTR ? - -We'd love to showcase your work! Whether it's a useful plugin, dataset preparation tool, or any other docTR-based project, the community would benefit from learning about it. - -**How to Contribute** - -To contribute your tool to the docTR community, please follow these steps: - -1. **GitHub**: Open a pull request with your tool information -2. **Format**: Follow the structure above with clear descriptions and key features - - -.. tip:: - Include a clear tool description and highlight what makes your tool unique or particularly useful to the docTR community. - - This helps others quickly understand its value and how to use it effectively. diff --git a/docs/source/conf.py b/docs/source/conf.py index c57746536d..3c3064cbbb 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -3,18 +3,11 @@ # This program is licensed under the Apache License 2.0. # See LICENSE or go to for full license details. -# Configuration file for the Sphinx documentation builder. -# -# This file only contains a selection of the most common options. For a full -# list see the documentation: -# https://www.sphinx-doc.org/en/master/usage/configuration.html - -# -- Path setup -------------------------------------------------------------- - -# If extensions (or modules to document with autodoc) are in another directory, -# add these directories to sys.path here. If the directory is relative to the -# documentation root, use os.path.abspath to make it absolute, like shown here. -# +"""Sphinx configuration of the docTR documentation. + +Build it locally from the repository root with ``make docs-single-version`` (output in ``docs/_build``). +""" + import os import sys from datetime import datetime @@ -34,112 +27,329 @@ version = doctr.__version__ release = doctr.__version__ + "-git" +# Version selected in the version switcher. `build.sh` sets it for every deployed version +# ("latest" for the main branch, "v1.1.0", ... for the releases). +DOCS_VERSION = os.environ.get("DOCTR_DOCS_VERSION", "latest") + +# `build.sh` also renders the previous releases with this configuration: their sources still rely on +# a few extensions that the current pages do not use anymore. +LEGACY_BUILD = os.environ.get("DOCTR_DOCS_LEGACY", "0") == "1" + # -- General configuration --------------------------------------------------- -# Add any Sphinx extension module names here, as strings. They can be -# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom -# ones. extensions = [ "sphinx.ext.autodoc", "sphinx.ext.napoleon", "sphinx.ext.intersphinx", "sphinx.ext.viewcode", - "sphinx.ext.coverage", "sphinx.ext.mathjax", - "sphinx.ext.autosectionlabel", - "sphinxemoji.sphinxemoji", # cf. https://sphinxemojicodes.readthedocs.io/en/stable/ + "myst_parser", + "sphinx_design", "sphinx_copybutton", - "recommonmark", - "sphinx_markdown_tables", - "sphinx_tabs.tabs", ] +if LEGACY_BUILD: + extensions += ["sphinx.ext.autosectionlabel", "sphinxemoji.sphinxemoji", "sphinx_tabs.tabs"] +else: + extensions += ["sphinx_reredirects"] + +source_suffix = {".rst": "restructuredtext", ".md": "markdown"} + +templates_path = ["_templates"] +exclude_patterns = ["_build", "Thumbs.db", ".DS_Store", "notebooks/*.rst", "**/_generated", "_includes"] + intersphinx_mapping = { "python": ("https://docs.python.org/3", None), + "numpy": ("https://numpy.org/doc/stable/", None), + "torch": ("https://docs.pytorch.org/docs/stable/", None), "pypdfium2": ("https://pypdfium2.readthedocs.io/en/stable/", None), } +# -- MyST (Markdown) --------------------------------------------------------- + +myst_enable_extensions = [ + "attrs_block", + "attrs_inline", + "colon_fence", + "deflist", + "fieldlist", + "html_image", + "substitution", + "tasklist", +] +myst_heading_anchors = 3 +myst_substitutions = { + "version": version, +} + +# -- API documentation ------------------------------------------------------- + +autodoc_member_order = "bysource" +autodoc_typehints = "description" +autodoc_typehints_description_target = "documented_params" +autodoc_preserve_defaults = True +add_module_names = False +python_maximum_signature_line_length = 88 +napoleon_google_docstring = True +napoleon_numpy_docstring = False napoleon_use_ivar = True +napoleon_use_rtype = False -# Add any paths that contain templates here, relative to this directory. -templates_path = ["_templates"] +# -- Copy button ------------------------------------------------------------- -# List of patterns, relative to source directory, that match files and -# directories to ignore when looking for source files. -# This pattern also affects html_static_path and html_extra_path. -exclude_patterns = ["_build", "Thumbs.db", ".DS_Store", "notebooks/*.rst"] +# Strip the prompts of doctest / shell snippets when copying them +copybutton_prompt_text = r">>> |\.\.\. |\$ " +copybutton_prompt_is_regexp = True +copybutton_exclude = ".linenos, .gp, .go" +# -- Redirects (pages moved by the documentation refactor) ------------------- -# The name of the Pygments (syntax highlighting) style to use. -pygments_style = "friendly" -pygments_dark_style = "monokai" -highlight_language = "python3" +redirects = { + "getting_started/installing": "installation.html", + "notebooks": "community/notebooks.html", + "using_doctr/using_models": "../user_guide/ocr_predictor.html", + "using_doctr/using_datasets": "../training/datasets.html", + "using_doctr/using_contrib_modules": "../user_guide/artefacts.html", + "using_doctr/sharing_models": "../training/sharing_models.html", + "using_doctr/using_model_export": "../deployment/performance.html", + "using_doctr/custom_models_training": "../training/train.html", + "using_doctr/running_on_aws": "../deployment/configuration.html", + "using_doctr/using_cli": "../user_guide/cli.html", + "modules/contrib": "../api/contrib.html", + "modules/datasets": "../api/datasets.html", + "modules/io": "../api/io.html", + "modules/models": "../api/models.html", + "modules/transforms": "../api/transforms.html", + "modules/utils": "../api/utils.html", +} # -- Options for HTML output ------------------------------------------------- -# The theme to use for HTML and HTML Help pages. See the documentation for -# a list of builtin themes. -# -html_theme = "furo" +html_theme = "pydata_sphinx_theme" +html_title = "docTR documentation" +html_short_title = "docTR" +html_favicon = "_static/images/favicon.ico" +html_static_path = ["_static"] +html_css_files = ["css/doctr.css"] +html_js_files = ["js/doctr.js"] +html_show_sourcelink = False +html_copy_source = False + +html_context = { + "github_user": "mindee", + "github_repo": "doctr", + "github_version": "main", + "doc_path": "docs/source", + "default_mode": "auto", +} -# Theme options are theme-specific and customize the look and feel of a theme -# further. For a list of options available for each theme, see the -# documentation. -# html_theme_options = { - "sidebar_hide_name": True, - "navigation_with_keys": True, - "light_css_variables": { - "color-sidebar-background": "#082747", - "color-sidebar-background-border": "#082747", - "color-sidebar-caption-text": "white", - "color-sidebar-link-text--top-level": "white", - "color-sidebar-link-text": "white", - "sidebar-caption-font-size": "normal", - "color-sidebar-item-background--hover": " #5dade2", + "logo": { + "image_light": "_static/images/logo-light.png", + "image_dark": "_static/images/logo-dark.png", + "alt_text": "docTR - Home", + }, + "navbar_align": "left", + "navbar_start": ["navbar-logo", "version-switcher"], + "navbar_end": ["theme-switcher", "navbar-icon-links"], + "header_links_before_dropdown": 4 if LEGACY_BUILD else 7, + "switcher": { + "json_url": "_static/switcher.json", + "version_match": DOCS_VERSION, }, - "dark_css_variables": { - "color-sidebar-background": "#1a1c1e", - "color-sidebar-background-border": "#1a1c1e", - "color-sidebar-caption-text": "white", - "color-sidebar-link-text--top-level": "white", + "show_version_warning_banner": not LEGACY_BUILD, + "icon_links": [ + { + "name": "GitHub", + "url": "https://github.com/mindee/doctr", + "icon": "fa-brands fa-github", + }, + { + "name": "PyPI", + "url": "https://pypi.org/project/python-doctr/", + "icon": "fa-brands fa-python", + }, + { + "name": "Live demo on Hugging Face", + "url": "https://huggingface.co/spaces/mindee/doctr", + "icon": "fa-solid fa-wand-magic-sparkles", + }, + ], + "use_edit_page_button": not LEGACY_BUILD, + "secondary_sidebar_items": { + "**": ["page-toc", "edit-this-page"], + "index": [], }, + "show_toc_level": 2, + "show_nav_level": 1, + "navigation_depth": 3, + "show_prev_next": True, + "back_to_top_button": True, + "search_as_you_type": True, + "footer_start": ["copyright"], + "footer_center": ["maintainers"], + "footer_end": ["license"], + "pygments_light_style": "github-light", + "pygments_dark_style": "github-dark", + "analytics": {"google_analytics_id": "G-40DVRMX8T4"}, } -html_logo = "_static/images/Logo-docTR-white.png" -html_favicon = "_static/images/favicon.ico" -html_title = "docTR documentation" - - -# Add any paths that contain custom static files (such as style sheets) here, -# relative to this directory. They are copied after the builtin static files, -# so a file named "default.css" will overwrite the builtin "default.css". -html_static_path = ["_static"] +# The landing page is a full-width page +html_sidebars = {"index": []} # A list of files that should not be packed into the epub file. epub_exclude_files = ["search.html"] -def add_ga_javascript(app, pagename, templatename, context, doctree): - # Add googleanalytics id - # ref: https://github.com/orenhecht/googleanalytics/blob/master/sphinxcontrib/googleanalytics.py +# -- Generated content --------------------------------------------------------- + +# Vocabularies listed on `models/vocabs.md`, grouped by script. Any vocabulary missing from these groups is listed +# under "Other scripts", so that the page always reflects `doctr.datasets.VOCABS`. +VOCAB_GROUPS = { + "General purpose": ["latin", "english", "multilingual", "latex"], + "Latin script": [ + "albanian", + "afrikaans", + "azerbaijani", + "basque", + "bosnian", + "catalan", + "croatian", + "czech", + "danish", + "dutch", + "estonian", + "esperanto", + "french", + "finnish", + "frisian", + "galician", + "german", + "hausa", + "hungarian", + "icelandic", + "indonesian", + "irish", + "italian", + "latvian", + "lithuanian", + "luxembourgish", + "malagasy", + "malay", + "maltese", + "maori", + "montenegrin", + "norwegian", + "polish", + "portuguese", + "quechua", + "romanian", + "scottish_gaelic", + "serbian_latin", + "slovak", + "slovene", + "somali", + "spanish", + "swahili", + "swedish", + "tagalog", + "turkish", + "uzbek_latin", + "vietnamese", + "welsh", + "yoruba", + "zulu", + ], # fmt: skip + "Cyrillic script": [ + "russian", + "belarusian", + "tatar", + "tajik", + "kazakh", + "kyrgyz", + "bulgarian", + "macedonian", + "mongolian", + "yakut", + "serbian_cyrillic", + "uzbek_cyrillic", + "ukrainian", + ], # fmt: skip + "Greek script": ["greek", "greek_extended"], + "Hebrew & Arabic scripts": ["hebrew", "arabic", "persian", "urdu", "pashto", "kurdish", "uyghur", "sindhi"], + "Indic scripts": [ + "devanagari", + "hindi", + "sanskrit", + "marathi", + "nepali", + "gujarati", + "bengali", + "tamil", + "telugu", + "kannada", + "sinhala", + "malayalam", + "punjabi", + "odia", + ], # fmt: skip + "Southeast Asian & other scripts": [ + "thai", + "lao", + "khmer", + "burmese", + "javanese", + "sudanese", + "armenian", + "georgian", + "ethiopic", + ], # fmt: skip + "East Asian scripts": ["japanese", "korean", "simplified_chinese"], +} + + +def _generate_vocab_tables(app): + """Write the tables of the supported vocabularies, included by `models/vocabs.md`""" + from html import escape + + from doctr.datasets import VOCABS + + english = set(VOCABS["english"]) + listed = {name for names in VOCAB_GROUPS.values() for name in names} + first_lang = list(VOCABS).index("latin") # the entries before are building blocks (digits, punctuation, ...) + others = [name for name in list(VOCABS)[first_lang:] if name not in listed] + groups = {**VOCAB_GROUPS, **({"Other scripts": others} if others else {})} + + parts = [] + for title, names in groups.items(): + rows = [] + for name in names: + if name not in VOCABS: + continue + chars = VOCABS[name] + extra = "".join(c for c in chars if c not in english) + if title == "Latin script" and len(extra) < len(chars) / 2: + summary = f'english + {escape(extra)}' if extra else "english" + else: + summary = escape(chars[:60]) + ("…" if len(chars) > 60 else "") + rows.append( + f"{name}{len(chars)}" + f'
        {summary}
        {escape(chars)}
        ' + "
        " + ) + parts.append( + f"### {title}\n\n```{{raw}} html\n" + '
        ' + "" + f"{''.join(rows)}
        NameSizeCharacters
        \n```\n" + ) - metatags = context.get("metatags", "") - metatags += """ - - - - """.format(app.config.googleanalytics_id) - context["metatags"] = metatags + out_dir = os.path.join(app.srcdir, "models", "_generated") + os.makedirs(out_dir, exist_ok=True) + with open(os.path.join(out_dir, "vocabs.md"), "w", encoding="utf-8") as f: + f.write("\n".join(parts)) def setup(app): - app.add_config_value("googleanalytics_id", "G-40DVRMX8T4", "html") - app.add_css_file("css/mindee.css") - app.add_js_file("js/custom.js") - app.connect("html-page-context", add_ga_javascript) + if not LEGACY_BUILD: + app.connect("builder-inited", _generate_vocab_tables) diff --git a/docs/source/deployment/configuration.md b/docs/source/deployment/configuration.md new file mode 100644 index 0000000000..7e93aa2a6c --- /dev/null +++ b/docs/source/deployment/configuration.md @@ -0,0 +1,64 @@ +# Configuration + +docTR has no configuration file: predictors are configured in code, and a few environment variables control how +the library interacts with the system. + +## Environment variables + +| Variable | Default | Effect | +| --- | --- | --- | +| `DOCTR_CACHE_DIR` | `~/.cache/doctr` | Where downloaded model weights (`models/`) and datasets (`datasets/`) are stored | +| `DOCTR_MULTIPROCESSING_DISABLE` | unset | Set to `TRUE` to disable the thread pools used for data processing, e.g. where `/dev/shm` is not writable | + +## Model cache + +Pretrained weights are downloaded the first time a model is used, then loaded from the cache. Their integrity is +checked with the hash in the file name. + +```bash +export DOCTR_CACHE_DIR=/opt/models/doctr +``` + +### Offline use + +To run on a machine without internet access, populate the cache on a connected machine, then copy it: + +```python +# On a connected machine: instantiating the predictors downloads their weights +from doctr.models import ocr_predictor + +ocr_predictor(pretrained=True) # detection + recognition +ocr_predictor(pretrained=True, assume_straight_pages=False) # + orientation classifiers +ocr_predictor(pretrained=True, detect_tables=True) # + layout and table models +``` + +Copy the cache directory (`~/.cache/doctr` or `$DOCTR_CACHE_DIR`) to the same location on the offline machine. +Alternatively, load the weight files from any path with `model.from_pretrained("path/to/weights.pt")` (see +[](../training/custom_models.md)). + +## AWS Lambda + +The [AWS Lambda](https://aws.amazon.com/lambda/) runtime only allows writing to `/tmp`, and does not provide the +shared memory used by multiprocessing. Configure the function with: + +```bash +DOCTR_MULTIPROCESSING_DISABLE=TRUE +DOCTR_CACHE_DIR=/tmp/doctr +``` + +:::{tip} +Downloading the weights at every cold start is slow. Package them in your container image or a Lambda layer, and +point `DOCTR_CACHE_DIR` to their location if it is writable, or load them with `from_pretrained`. +::: + +The same settings apply to other restricted environments (read-only containers, some serverless platforms). + +## Logging + +docTR logs through the standard {mod}`logging` module, under the `doctr` logger: + +```python +import logging + +logging.getLogger("doctr").setLevel(logging.WARNING) +``` diff --git a/docs/source/deployment/docker.md b/docs/source/deployment/docker.md new file mode 100644 index 0000000000..2abcaa688a --- /dev/null +++ b/docs/source/deployment/docker.md @@ -0,0 +1,59 @@ +# Docker + +Prebuilt images with docTR installed are published on the +[GitHub Container Registry](https://github.com/mindee/doctr/pkgs/container/doctr). They are based on CUDA 12.2 and +ready for GPU inference. + +## Run an image + +```bash +docker run -it --gpus all ghcr.io/mindee/doctr: bash +``` + +Drop `--gpus all` to run on the CPU. For GPU support, your host needs: + +- an NVIDIA driver supporting **CUDA 12.2 or newer**, otherwise PyTorch cannot initialize the GPU; +- the [NVIDIA Container Toolkit](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html) + so that Docker can access the GPU. + +## Tags + +Tags follow the pattern `-py-`: + +`` +: `torch` for the core package, or `torch-viz-html-contrib` with all the optional extras. + +`` +: The Python version of the image, e.g. `3.11.15`, `3.12.9` or `3.13.14`. + +`` +: A release tag (e.g. `v1.1.0`), or a `YYYY-MM` date for the images rebuilt from the `main` branch every three + months. + +For instance, `torch-viz-html-contrib-py3.11.15-v1.1.0` is release 1.1.0 with all the extras on Python 3.11.15. +Browse the [registry](https://github.com/mindee/doctr/pkgs/container/doctr) for the available tags. + +## Build your own image + +The [`Dockerfile`](https://github.com/mindee/doctr/blob/main/Dockerfile) at the root of the repository accepts +build arguments to choose the Python version, the extras and the docTR version: + +```bash +docker build -t doctr \ + --build-arg FRAMEWORK="torch,viz,html,contrib" \ + --build-arg PYTHON_VERSION=3.11.15 \ + --build-arg DOCTR_VERSION=v1.1.0 \ + . +``` + +| Argument | Default | Description | +| ---------------- | ---------- | ----------------------------------------------------------- | +| `FRAMEWORK` | `torch` | Extras to install, comma-separated (e.g. `torch,viz,html`) | +| `PYTHON_VERSION` | `3.11.15` | Python version, compiled from source | +| `DOCTR_VERSION` | `main` | Git branch, tag or commit of docTR to install | + +:::{tip} +Pretrained weights are downloaded at runtime. To avoid it, warm the cache when building the image, e.g. with +`RUN python -c "from doctr.models import ocr_predictor; ocr_predictor(pretrained=True)"`, or mount a volume on +the cache directory (see [](configuration.md)). +::: diff --git a/docs/source/deployment/index.md b/docs/source/deployment/index.md new file mode 100644 index 0000000000..6d182a1201 --- /dev/null +++ b/docs/source/deployment/index.md @@ -0,0 +1,52 @@ +# Deployment + +Taking docTR to production means making it fast, packaging it, and serving it. This section covers each step. + +::::{grid} 1 2 2 2 +:gutter: 3 + +:::{grid-item-card} {octicon}`rocket;1.1em` Performance +:link: performance +:link-type: doc + +GPU and Apple Silicon, half precision, `torch.compile` and other speed-ups. +::: + +:::{grid-item-card} {octicon}`cpu;1.1em` ONNX & OnnxTR +:link: onnx +:link-type: doc + +Export models to ONNX and run them without PyTorch. +::: + +:::{grid-item-card} {octicon}`container;1.1em` Docker +:link: docker +:link-type: doc + +Prebuilt GPU-ready images, tags, and building your own. +::: + +:::{grid-item-card} {octicon}`globe;1.1em` Web API & demo app +:link: web_api +:link-type: doc + +A FastAPI template to serve docTR, and a Streamlit demo. +::: + +:::{grid-item-card} {octicon}`gear;1.1em` Configuration +:link: configuration +:link-type: doc + +Environment variables, model cache, offline use and AWS Lambda. +::: +:::: + +```{toctree} +:hidden: + +performance +onnx +docker +web_api +configuration +``` diff --git a/docs/source/deployment/onnx.md b/docs/source/deployment/onnx.md new file mode 100644 index 0000000000..0c675d32af --- /dev/null +++ b/docs/source/deployment/onnx.md @@ -0,0 +1,74 @@ +# ONNX & OnnxTR + +[ONNX](https://onnx.ai) is an open format for machine learning models, supported by many runtimes and hardware +vendors. Exporting docTR models to ONNX lets you run them **without PyTorch**, with a smaller footprint and +often a faster CPU inference. + +## Export a model + +{func}`~doctr.models.utils.export_model_to_onnx` traces a model with a dummy input. Build the model with +`exportable=True`, which makes it return raw outputs instead of post-processed predictions: + +```python +import torch + +from doctr.models import vitstr_small +from doctr.models.utils import export_model_to_onnx + +model = vitstr_small(pretrained=True, exportable=True) # or your own fine-tuned model + +batch_size = 1 +input_shape = (3, 32, 128) # (C, H, W), the input shape of the model +dummy_input = torch.rand((batch_size, *input_shape), dtype=torch.float32) + +model_path = export_model_to_onnx(model, model_name="vitstr_small", dummy_input=dummy_input) +``` + +The batch dimension of the exported model is dynamic. Find the input shape of any model in `model.cfg["input_shape"]`. + +## Run it with OnnxTR + +[OnnxTR](https://github.com/felixdittrich92/OnnxTR) is a lightweight package built on +[ONNX Runtime](https://onnxruntime.ai), with the same interface as docTR. It ships ONNX versions of the pretrained +models and loads your exported ones: + +::::{tab-set} + +:::{tab-item} CPU +```bash +pip install "onnxtr[cpu]" +``` +::: + +:::{tab-item} NVIDIA GPU +```bash +pip install "onnxtr[gpu]" +``` +::: + +:::{tab-item} Intel (OpenVINO) +```bash +pip install "onnxtr[openvino]" +``` +::: +:::: + +```python +from onnxtr.io import DocumentFile +from onnxtr.models import linknet_resnet18, ocr_predictor, parseq + +pages = DocumentFile.from_images("path/to/page.jpg") + +# Pretrained models, exactly like in docTR +predictor = ocr_predictor(det_arch="linknet_resnet18", reco_arch="parseq") + +# Or your exported models +det_model = linknet_resnet18("path/to/detection.onnx") +reco_model = parseq("path/to/recognition.onnx", vocab="ABC") # the vocabulary used for training +predictor = ocr_predictor(det_arch=det_model, reco_arch=reco_model) + +result = predictor(pages) +``` + +See the OnnxTR documentation for [installation options](https://github.com/felixdittrich92/OnnxTR#installation) +and [loading custom models](https://github.com/felixdittrich92/OnnxTR#loading-custom-exported-models). diff --git a/docs/source/deployment/performance.md b/docs/source/deployment/performance.md new file mode 100644 index 0000000000..826a56cac8 --- /dev/null +++ b/docs/source/deployment/performance.md @@ -0,0 +1,136 @@ +# Performance + +docTR runs on the CPU out of the box. This page lists the levers to make it faster, from the most effective to the +most specialized. + +## Run on a GPU + +Predictors are PyTorch modules: move them to a device like any model. Inputs are moved automatically. + +::::{tab-set} + +:::{tab-item} NVIDIA (CUDA) +```python +import torch + +from doctr.models import ocr_predictor + +device = torch.device("cuda" if torch.cuda.is_available() else "cpu") +predictor = ocr_predictor(pretrained=True).to(device) +# or simply: ocr_predictor(pretrained=True).cuda() +``` +::: + +:::{tab-item} Apple Silicon (MPS) +```python +import torch + +from doctr.models import ocr_predictor + +device = torch.device("mps" if torch.backends.mps.is_available() else "cpu") +predictor = ocr_predictor(pretrained=True).to(device) +``` +::: +:::: + +The same applies to every predictor: `detection_predictor`, `recognition_predictor`, `layout_predictor`, +`table_predictor`, `crop_orientation_predictor` and `page_orientation_predictor`. + +## Half precision + +On a GPU, half-precision inference uses 16-bit floats instead of 32-bit: it is faster and uses less memory, with +the same results in practice. + +```python +from doctr.models import ocr_predictor + +predictor = ocr_predictor(pretrained=True).cuda().bfloat16() # or .half() for float16 +result = predictor(pages) +``` + +| Format | Method | Notes | +| --- | --- | --- | +| **bfloat16** {bdg-success}`recommended` | `.bfloat16()` | Same range as float32, so no overflow. Requires an Ampere GPU or newer (compute capability 8.0+) | +| float16 | `.half()` | More precision but a much narrower range. Use it on older GPUs | + +:::{note} +Half precision is only supported on GPU devices. The [CLI](../user_guide/cli.md) enables bfloat16 automatically on +compatible GPUs. +::: + +## Batch sizes + +The predictor processes pages and word crops in batches: `det_bs` pages at a time for detection (default `2`) and +`reco_bs` crops at a time for recognition (default `128`). On a GPU with free memory, larger batches are faster; +lower them if you run out of memory: + +```python +predictor = ocr_predictor(pretrained=True, det_bs=8, reco_bs=512) +``` + +Pass all the pages of a document (or several documents) in **one call** so that batches are full. + +## Skip what you don't need + +- Keep `assume_straight_pages=True` (default) for upright documents: it avoids the orientation classifiers and + the more expensive rotated-box post-processing. +- With rotated documents, `disable_page_orientation=True` and `disable_crop_orientation=True` skip the orientation + classifiers when you know the text is horizontal (see [](../user_guide/rotated_documents.md)). +- Only enable `detect_layout`, `detect_tables`, `detect_orientation` and `detect_language` when you use them. +- Use lighter architectures, see the [model zoo](../models/index.md). + +## Compile the models + +[`torch.compile`](https://pytorch.org/tutorials/intermediate/torch_compile_tutorial.html) converts the models into +optimized graphs. Compile the models first, then build the predictor with them: + +```python +import torch + +from doctr.models import ( + crop_orientation_predictor, + fast_base, + mobilenet_v3_small_crop_orientation, + mobilenet_v3_small_page_orientation, + ocr_predictor, + page_orientation_predictor, + vitstr_small, +) + +detection_model = torch.compile(fast_base(pretrained=True).eval()) +recognition_model = torch.compile(vitstr_small(pretrained=True).eval()) + +predictor = ocr_predictor(detection_model, recognition_model, assume_straight_pages=False) + +# Only needed when the orientation classifiers are used (rotated documents) +predictor.crop_orientation_predictor = crop_orientation_predictor( + torch.compile(mobilenet_v3_small_crop_orientation(pretrained=True).eval()) +) +predictor.page_orientation_predictor = page_orientation_predictor( + torch.compile(mobilenet_v3_small_page_orientation(pretrained=True).eval()) +) + +result = predictor(pages) +``` + +:::{important} +- The first calls are slow while the graphs are compiled: warm the predictor up before measuring. +- The `master` recognition architecture does not support compilation yet. +- Only the default `inductor` backend is officially supported. +::: + +## CPU inference + +- PyTorch uses all the cores by default. When several workers share a machine, limit each of them with + `torch.set_num_threads(n)`. +- For the smallest footprint, export the models to ONNX and run them with [OnnxTR](onnx.md), optionally with + 8-bit quantized models. + +## Measure + +The `latency.py` scripts of the [references](https://github.com/mindee/doctr/tree/main/references) benchmark any +architecture on your hardware: + +```bash +python references/detection/latency.py fast_base --it 100 +``` diff --git a/docs/source/deployment/web_api.md b/docs/source/deployment/web_api.md new file mode 100644 index 0000000000..b1babbeb67 --- /dev/null +++ b/docs/source/deployment/web_api.md @@ -0,0 +1,80 @@ +# Web API & demo app + +The repository contains two ready-to-run applications: a REST API template to integrate docTR into your services, +and an interactive demo to try the models. + +## REST API + +The [`api/`](https://github.com/mindee/doctr/tree/main/api) folder is a [FastAPI](https://fastapi.tiangolo.com) +application exposing docTR over HTTP, packaged with Docker. + +### Start the server + +You need [Docker](https://docs.docker.com/get-docker/) and Python (to resolve the dependencies with +[uv](https://docs.astral.sh/uv/)): + +```bash +git clone https://github.com/mindee/doctr.git +cd doctr/api +make run +``` + +The server listens on port **8080**. Its interactive documentation (Swagger UI) is available at +[http://localhost:8080/docs](http://localhost:8080/docs). + +### Routes + +| Route | Description | +| --- | --- | +| `POST /detection` | Text detection: the boxes of the words | +| `POST /recognition` | Text recognition of word crops | +| `POST /ocr` | End-to-end OCR | +| `POST /kie` | Key information extraction | + +Each route accepts images and PDFs (`application/pdf`, `image/jpeg`, `image/png`) as multipart files, and the +architectures to use as query parameters: + +```python +import requests + +params = {"det_arch": "fast_base", "reco_arch": "crnn_vgg16_bn"} + +with open("path/to/invoice.pdf", "rb") as f: + files = [("files", ("invoice.pdf", f.read(), "application/pdf"))] + +response = requests.post("http://localhost:8080/ocr", params=params, files=files) +print(response.json()) +``` + +The template is a starting point: adapt the routes, the response schemas and the models to your needs. The +[API README](https://github.com/mindee/doctr/tree/main/api#readme) documents every route with examples. + +## Demo app + +A [Streamlit](https://streamlit.io) app lets you upload a document, pick the models, and inspect the +segmentation maps, the detected words and the reconstructed page. + +```{image} ../_static/images/demo.png +:alt: The docTR demo app +:align: center +``` + +Try it online on [Hugging Face Spaces](https://huggingface.co/spaces/mindee/doctr), or run it locally from the +repository: + +```bash +pip install -r demo/pt-requirements.txt +streamlit run demo/app.py +``` + +## Example script + +[`scripts/analyze.py`](https://github.com/mindee/doctr/blob/main/scripts/analyze.py) analyzes a single file and +displays the results, a handy way to try options from the terminal: + +```bash +python scripts/analyze.py path/to/your/doc.pdf +python scripts/analyze.py --help +``` + +For batch processing from the terminal, use the [CLI](../user_guide/cli.md). diff --git a/docs/source/getting_started/concepts.md b/docs/source/getting_started/concepts.md new file mode 100644 index 0000000000..1aa2ce6d56 --- /dev/null +++ b/docs/source/getting_started/concepts.md @@ -0,0 +1,176 @@ +# Core concepts + +A few ideas come back on every page of this documentation: **predictors**, the **`Document`** tree they return, +and the way docTR expresses **positions**. Ten minutes here will make everything else easier to follow. + +## The OCR pipeline + +OCR is split into two consecutive tasks, each solved by a dedicated deep learning model: + +1. **Text detection** localizes every word on the page (*where is text?*). +2. **Text recognition** transcribes each detected word from its crop (*what does it say?*). + +The predictions are then assembled into a structured document. Optional stages plug into the same pipeline when +you need them: orientation handling for rotated pages, layout analysis, and table structure recognition. + +```{raw} html +:file: ../_includes/pipeline.html +``` + +## Predictors and models + +You rarely call a model directly. Instead you use a **predictor**: a callable that takes care of everything +around the neural network so you can feed it raw pages. + +| Layer | Responsibility | Example | +| ----------------- | ---------------------------------------------------------------------------------- | -------------------------------- | +| **Pre-processor** | Resizes, pads, normalizes and batches the input images | {class}`~doctr.models.preprocessor.PreProcessor` | +| **Model** | A regular PyTorch `nn.Module` that runs the network | `fast_base`, `crnn_vgg16_bn` | +| **Post-processor**| Turns raw network outputs into boxes, strings and scores | decoding of the segmentation map | + +docTR exposes a factory function for every task. Each one accepts an architecture **name** (or a model +**instance**, e.g. one you trained yourself) and returns a ready-to-use predictor: + +| Task | Factory | Returns | +| --------------------------- | ----------------------------------------------------------- | ----------------------------------------- | +| End-to-end OCR | {func}`~doctr.models.ocr_predictor` | a {class}`~doctr.io.Document` | +| Key information extraction | {func}`~doctr.models.kie_predictor` | a {class}`~doctr.io.KIEDocument` | +| Text detection only | {func}`~doctr.models.detection.detection_predictor` | boxes per page | +| Text recognition only | {func}`~doctr.models.recognition.recognition_predictor` | `(text, confidence)` per crop | +| Layout analysis | {func}`~doctr.models.layout.layout_predictor` | labelled regions per page | +| Table structure recognition | {func}`~doctr.models.table_structure.table_predictor` | cells with row/column spans per table | + +The end-to-end {func}`~doctr.models.ocr_predictor` composes the task predictors, which stay reachable as attributes: + +```python +from doctr.models import ocr_predictor + +predictor = ocr_predictor(pretrained=True) + +predictor.det_predictor # text detection (pre-processor + model + post-processor) +predictor.reco_predictor # text recognition +predictor.doc_builder # assembles words into lines, blocks and pages +``` + +:::{important} +Always pass `pretrained=True` unless you load your own weights: without it, the models are randomly initialized +and return meaningless predictions. +::: + +## The `Document` tree + +The OCR predictor returns a {class}`~doctr.io.Document`: a tree of elements that mirrors the structure of what was +read. + +```{raw} html +
        Document +└── pages: list[Page] # one per input page + ├── blocks: list[Block] # groups of lines (paragraphs, addresses...) + │ ├── lines: list[Line] # words read together + │ │ └── words: list[Word] # value, confidence, geometry + │ └── artefacts: list[Artefact] # non-textual elements + ├── layout: list[LayoutElement] # with detect_layout=True + └── tables: list[Table] # with detect_tables=True + └── cells: list[TableCell]
        +``` + +| Element | What it represents | +| ---------------------------------------- | ---------------------------------------------------------------------------------------------------- | +| {class}`~doctr.io.Word` | An uninterrupted sequence of characters, with its text `value`, recognition `confidence` and `geometry` | +| {class}`~doctr.io.Line` | Words aligned and meant to be read together. On a two-column page, a horizontal row holds two lines | +| {class}`~doctr.io.Block` | A group of lines (e.g. an address written on several lines) and artefacts | +| {class}`~doctr.io.Artefact` | A non-textual element: a picture, a logo, a QR code, a signature... | +| {class}`~doctr.io.LayoutElement` | A region found by the layout model: `Title`, `Text`, `Table`, `Picture`, `Page-header`... | +| {class}`~doctr.io.Table` / {class}`~doctr.io.TableCell` | A recognized table, as cells spanning rows and columns | +| {class}`~doctr.io.Page` | Everything found on one page, plus its `dimensions`, `orientation` and `language` | + +Every element can be **rendered** to text with `.render()` and **exported** to a JSON-serializable dict with +`.export()`. See [](../user_guide/results.md) for a hands-on tour. + +## Coordinates + +All geometries are expressed in **relative coordinates**, between `0` and `1`, as a fraction of the page width (x) +and height (y), with the origin at the **top-left** corner. This makes them independent of the resolution the page +was rendered at. + +::::{grid} 1 1 2 2 +:gutter: 3 + +:::{grid-item-card} Straight boxes (default) +Two points: the top-left and the bottom-right corners. + +```python +((xmin, ymin), (xmax, ymax)) +# e.g. ((0.12, 0.05), (0.31, 0.08)) +``` +::: + +:::{grid-item-card} Rotated boxes +With `assume_straight_pages=False`: a polygon of four `(x, y)` points, as a NumPy array of shape `(4, 2)`. + +```python +array([[x1, y1], [x2, y2], [x3, y3], [x4, y4]]) +``` +::: +:::: + +To get pixel coordinates, multiply by the page size. Note that `page.dimensions` is `(height, width)`: + +```python +height, width = page.dimensions +(xmin, ymin), (xmax, ymax) = word.geometry +box_in_pixels = (int(xmin * width), int(ymin * height), int(xmax * width), int(ymax * height)) +``` + +## Scores + +docTR attaches several scores to its predictions. They answer different questions: + +`Word.confidence` +: How sure the **recognition** model is about the text, between 0 and 1. By default it is the lowest + probability among the characters of the word (see [confidence aggregation](../user_guide/ocr_predictor.md#confidence-scores)). + +`Word.objectness_score` +: How sure the **detection** model is that the box contains text. + +`Word.crop_orientation` +: The predicted rotation of the word crop, `{"value": angle, "confidence": score}`, when crop orientation is + classified (rotated documents). + +`Page.orientation` / `Page.language` +: The estimated page rotation and language, filled with `detect_orientation=True` / `detect_language=True`. + +## Vocabularies + +A recognition model can only output characters from the **vocabulary** it was trained on. The pretrained recognition +models use the `french` vocabulary, which covers Latin characters with the most common accents, digits and +punctuation. docTR ships [100+ vocabularies](../models/vocabs.md) for training models on other languages and +alphabets, and lets you [restrict a model to a subset](../user_guide/ocr_predictor.md#restrict-the-output-characters) +of its vocabulary. + +```python +from doctr.models import recognition_predictor + +predictor = recognition_predictor("crnn_vgg16_bn", pretrained=True) +print(predictor.model.cfg["vocab"]) +``` + +## Next steps + +::::{grid} 1 2 2 2 +:gutter: 3 + +:::{grid-item-card} {octicon}`book;1.1em` User guide +:link: ../user_guide/index +:link-type: doc + +Every option of the OCR predictor, explained with examples. +::: + +:::{grid-item-card} {octicon}`stack;1.1em` Model zoo +:link: ../models/index +:link-type: doc + +Compare the architectures and pick the right one for your documents. +::: +:::: diff --git a/docs/source/getting_started/index.md b/docs/source/getting_started/index.md new file mode 100644 index 0000000000..0641a37844 --- /dev/null +++ b/docs/source/getting_started/index.md @@ -0,0 +1,43 @@ +# Get started + +New to docTR? These three pages take you from `pip install` to structured OCR results, and explain the +handful of concepts that the rest of the documentation builds on. + +::::{grid} 1 1 3 3 +:gutter: 3 + +:::{grid-item-card} {octicon}`download;1.1em` Installation +:link: installation +:link-type: doc + +Install the package, the optional extras, or use the Docker images. +::: + +:::{grid-item-card} {octicon}`play;1.1em` Quickstart +:link: quickstart +:link-type: doc + +Run OCR on your first document and export the result in five minutes. +::: + +:::{grid-item-card} {octicon}`light-bulb;1.1em` Core concepts +:link: concepts +:link-type: doc + +How the pipeline works, what a `Document` is made of, and how coordinates are expressed. +::: +:::: + +:::{tip} +Prefer to explore in a notebook? The [Quicktour notebook](https://colab.research.google.com/github/mindee/notebooks/blob/main/doctr/quicktour.ipynb) +runs in Google Colab without installing anything, and the [live demo](https://huggingface.co/spaces/mindee/doctr) +lets you try the models on your own files in the browser. +::: + +```{toctree} +:hidden: + +installation +quickstart +concepts +``` diff --git a/docs/source/getting_started/installation.md b/docs/source/getting_started/installation.md new file mode 100644 index 0000000000..8bdbf25721 --- /dev/null +++ b/docs/source/getting_started/installation.md @@ -0,0 +1,134 @@ +# Installation + +docTR is distributed on PyPI as `python-doctr`. It requires **Python 3.11 or newer** and installs +[PyTorch](https://pytorch.org) as its deep learning backend. + +## Install the package + +::::{tab-set} + +:::{tab-item} pip +```bash +pip install python-doctr +``` +::: + +:::{tab-item} uv +```bash +uv add python-doctr +# or, outside of a uv project +uv pip install python-doctr +``` +::: + +:::{tab-item} From source +Install the latest development version, e.g. to try a feature that is not released yet: + +```bash +pip install "python-doctr @ git+https://github.com/mindee/doctr.git" +``` +::: +:::: + +To check that everything works, print the installed version: + +```bash +python -c "import doctr; print(doctr.__version__)" +``` + +:::{note} +The pretrained weights are **not** part of the package: each model is downloaded the first time you use it and +cached in `~/.cache/doctr` (see [](../deployment/configuration.md) to change this location or to run offline). +::: + +## Optional extras + +The core package is kept light. A few features need extra dependencies, which you can pull in with *extras*: + +| Extra | Installs | Needed for | +| --------- | ----------------------------- | ------------------------------------------------------------------------------------------------ | +| `viz` | `matplotlib`, `mplcursors` | Displaying predictions with {meth}`Document.show() ` | +| `html` | `weasyprint` | Reading web pages with {meth}`DocumentFile.from_url() ` | +| `contrib` | `onnxruntime` | The [artefact detector](../user_guide/artefacts.md) of the `contrib` module | + +```bash +# One extra +pip install "python-doctr[viz]" +# Several extras +pip install "python-doctr[viz,html,contrib]" +``` + +:::{admonition} WeasyPrint system libraries +:class: dropdown + +The `html` extra relies on [WeasyPrint](https://doc.courtbouillon.org/weasyprint/stable/first_steps.html#installation), +which needs Pango on the system. On Debian/Ubuntu: `sudo apt install libpango-1.0-0 libpangoft2-1.0-0 libharfbuzz-subset0`. +On macOS: `brew install pango`. +::: + +## GPU support + +docTR runs on whatever device PyTorch supports. The default `torch` wheel from PyPI already supports NVIDIA GPUs on +Linux; for another CUDA version, ROCm or a CPU-only build, install PyTorch first by following the +[official selector](https://pytorch.org/get-started/locally/), then install docTR: + +```bash +# Example: CPU-only build of PyTorch (smaller download) +pip install torch torchvision --index-url https://download.pytorch.org/whl/cpu +pip install python-doctr +``` + +Check which accelerator PyTorch sees: + +```python +import torch + +print("CUDA:", torch.cuda.is_available()) +print("Apple MPS:", torch.backends.mps.is_available()) +``` + +Models run on the CPU until you move them: see [](../deployment/performance.md) to run them on a GPU or in half precision. + +## Docker images + +Ready-to-use images with docTR preinstalled are published on the +[GitHub Container Registry](https://github.com/mindee/doctr/pkgs/container/doctr). They are GPU-ready (CUDA 12.2): + +```bash +docker run -it --gpus all ghcr.io/mindee/doctr: bash +``` + +Pick a `` from the registry; [](../deployment/docker.md) explains the tag naming scheme and how to build your own image. + +## Development installation + +To contribute to docTR, clone the repository and install it in editable mode with all the development tools: + +```bash +git clone https://github.com/mindee/doctr.git +cd doctr +pip install -e ".[dev]" +pre-commit install +``` + +See the {doc}`contribution guide <../contributing/contributing>` for the tests, the code style and how to build this documentation. + +## Next steps + +::::{grid} 1 2 2 2 +:gutter: 3 + +:::{grid-item-card} {octicon}`play;1.1em` Quickstart +:link: quickstart +:link-type: doc + +Extract the text of your first document. +::: + +:::{grid-item-card} {octicon}`light-bulb;1.1em` Core concepts +:link: concepts +:link-type: doc + +Understand predictors, documents and coordinates. +::: +:::: diff --git a/docs/source/getting_started/installing.rst b/docs/source/getting_started/installing.rst deleted file mode 100644 index d8c99d8f50..0000000000 --- a/docs/source/getting_started/installing.rst +++ /dev/null @@ -1,52 +0,0 @@ - -************ -Installation -************ - -This library requires `Python `_ 3.11 or higher. - - -Via Python Package -================== - -Install the last stable release of the package using `pip `_: - -.. code:: bash - - pip install python-doctr - -We strive towards reducing framework-specific dependencies to a minimum, but some necessary features are developed by third-parties for specific frameworks. To avoid missing some dependencies for a specific framework, you can install specific builds as follows: - -.. code:: bash - - pip install python-doctr - # or with preinstalled packages for visualization & html & contrib module support - pip install "python-doctr[viz,html,contrib]" - -Available optional extras: - -* ``viz``: installs `matplotlib` and `mplcursors` for result visualisation (e.g. ``Page.show()``) -* ``html``: installs `weasyprint` for reading HTML documents via :func:`~doctr.io.read_html` -* ``contrib``: installs `onnxruntime` for the :class:`~doctr.contrib.ArtefactDetector` contrib module - - -Via Git -======= - -Install the library in developer mode: - - -.. code:: bash - - git clone https://github.com/mindee/doctr.git - pip install -e doctr/. - - -Via Docker -========== - -Official Docker images are available on the `GitHub Container Registry `_. - -.. code:: bash - - docker run -it ghcr.io/mindee/doctr:latest bash diff --git a/docs/source/getting_started/quickstart.md b/docs/source/getting_started/quickstart.md new file mode 100644 index 0000000000..2392d023fa --- /dev/null +++ b/docs/source/getting_started/quickstart.md @@ -0,0 +1,249 @@ +# Quickstart + +This page takes you from a PDF to structured text in a few lines of code. You need docTR installed +(`pip install python-doctr`, see [](installation.md)) and a document to read. + +:::{tip} +No document at hand? Download the {download}`sample invoice <../_static/images/examples/invoice.pdf>` used on this +page and save it as `invoice.pdf` next to your script: you will get exactly the outputs shown below. +::: + +```{image} ../_static/images/examples/invoice_input.png +:alt: The sample invoice used on this page +:width: 560px +:align: center +``` + +## 1. Load the document + +{class}`~doctr.io.DocumentFile` turns PDFs, images and web pages into a list of pages: + +```python +from doctr.io import DocumentFile + +pages = DocumentFile.from_pdf("invoice.pdf") +# or: DocumentFile.from_images(["page1.jpg", "page2.jpg"]) +``` + +## 2. Run OCR + +{func}`~doctr.models.ocr_predictor` builds a complete pipeline: a text detection model followed by a text +recognition model. With `pretrained=True`, the weights are downloaded on first use and cached. + +```python +from doctr.models import ocr_predictor + +predictor = ocr_predictor(pretrained=True) +result = predictor(pages) +``` + +That's it: `result` is a {class}`~doctr.io.Document` holding every word, its position and its confidence. + +## 3. Get the text + +{meth}`~doctr.io.Document.render` returns the text of the whole document, in reading order: + +```python +print(result.render()) +``` + +```text +ACME Office Supplies + +INVOICE + +42 Harbour Road, Hamburg + +No. 2026-0412 +Date: 26/10/2026 + +Bill to: +Jane Doe +12 Market Street, Berlin +... +``` + +## 4. Explore the structure + +The result mirrors the document: pages contain blocks, blocks contain lines, lines contain words. +Printing it shows the tree: + +```python +print(result) +``` + +```text +Document( + (pages): [Page( + dimensions=(1684, 1191) + (blocks): [Block( + (lines): [ + Line( + (words): [ + Word(value='ACME', confidence=1.0), + Word(value='Office', confidence=1.0), + Word(value='Supplies', confidence=1.0), + ] + ), + Line( + (words): [Word(value='INVOICE', confidence=1.0)] + ), + ... +``` + +Every element is a regular Python object, so you can walk the tree to get the words with their positions: + +```python +for page in result.pages: + for block in page.blocks: + for line in block.lines: + for word in line.words: + (xmin, ymin), (xmax, ymax) = word.geometry + print( + f"{word.value:<10} conf={word.confidence:.2f} box=({xmin:.3f}, {ymin:.3f}, {xmax:.3f}, {ymax:.3f})" + ) +``` + +```text +ACME conf=1.00 box=(0.071, 0.054, 0.160, 0.071) +Office conf=1.00 box=(0.169, 0.054, 0.258, 0.071) +Supplies conf=1.00 box=(0.269, 0.055, 0.399, 0.073) +INVOICE conf=1.00 box=(0.697, 0.057, 0.855, 0.074) +... +``` + +Geometries are **relative** to the page size: `((xmin, ymin), (xmax, ymax))` with values between 0 and 1. +[](concepts.md#coordinates) shows how to convert them to pixels. + +## 5. Visualize the predictions + +With the `viz` extra installed (`pip install "python-doctr[viz]"`), {meth}`~doctr.io.Document.show` overlays the +predictions on the pages in an interactive window: + +```python +result.show() +``` + +```{image} ../_static/images/examples/invoice_words.png +:alt: Detected words overlaid on the invoice +:width: 560px +:align: center +``` + +## 6. Export the results + +Turn the result into the format your application needs: + +::::{tab-set} + +:::{tab-item} JSON +```python +import json + +with open("invoice.json", "w") as f: + json.dump(result.export(), f) +``` + +The export is a nested dictionary with the same structure as the `Document` (pages → blocks → lines → words). +::: + +:::{tab-item} Markdown +```python +markdown = result.export_as_markdown() +``` +::: + +:::{tab-item} HTML +```python +html = result.export_as_html() +``` +::: + +:::{tab-item} hOCR (XML) +```python +# One (bytes, ElementTree) pair per page +xml_pages = result.export_as_xml() +``` +::: +:::: + +[](../user_guide/exporting.md) covers every format and its options. + +## 7. Go further: layout & tables + +Add `detect_tables=True` and docTR also finds the layout of the page and reconstructs its tables. Here is the +Markdown export of the same invoice: + +```python +predictor = ocr_predictor(pretrained=True, detect_tables=True) +result = predictor(pages) +print(result.export_as_markdown()) +``` + +```markdown +## ACME Office Supplies + +42 Harbour Road, Hamburg + +## Bill to: + +Jane Doe + +12 Market Street, Berlin + +INVOICE + +No. 2026-0412 +Date: 26/10/2026 + +| Description | Qty | Unit price | Amount | +| --- | --- | --- | --- | +| Recycled paper A4 | 10 | 8.50 | 85.00 | +| Ballpoint pens (box) | 5 | 12.00 | 60.00 | +| Desk lamp | 2 | 45.00 | 90.00 | +| Office chair | 1 | 1,015.00 | 1,015.00 | + +Total due + +1,250.00 EUR +... +``` + +:::{admonition} Prefer the command line? +:class: tip + +The `doctr-cli` command runs the same pipeline without writing any code: + +```bash +doctr-cli --input_path invoice.pdf --detect_tables --output invoice.md +``` + +See [](../user_guide/cli.md). +::: + +## Next steps + +::::{grid} 1 2 3 3 +:gutter: 3 + +:::{grid-item-card} {octicon}`light-bulb;1.1em` Core concepts +:link: concepts +:link-type: doc + +Predictors, the `Document` tree, coordinates and scores. +::: + +:::{grid-item-card} {octicon}`gear;1.1em` Configure the predictor +:link: ../user_guide/ocr_predictor +:link-type: doc + +Choose the models and tune the pipeline to your documents. +::: + +:::{grid-item-card} {octicon}`sync;1.1em` Rotated documents +:link: ../user_guide/rotated_documents +:link-type: doc + +Read skewed scans, photos and upside-down pages. +::: +:::: diff --git a/docs/source/getting_started/quickstart.rst b/docs/source/getting_started/quickstart.rst deleted file mode 100644 index 94818a2415..0000000000 --- a/docs/source/getting_started/quickstart.rst +++ /dev/null @@ -1,110 +0,0 @@ - -********** -Quickstart -********** - -This page shows you how to get OCR results from a document in just a few lines of code. -For more details see :ref:`using_models`. - - -Load a document -=============== - -docTR can read PDFs, images, and web pages: - -.. code:: python3 - - from doctr.io import DocumentFile - - # From a PDF - doc = DocumentFile.from_pdf("path/to/your/doc.pdf") - # From one or more images - doc = DocumentFile.from_images("path/to/your/img.jpg") - doc = DocumentFile.from_images(["path/to/page1.jpg", "path/to/page2.jpg"]) - # From a URL (requires the ``html`` extra: pip install "python-doctr[html]") - doc = DocumentFile.from_url("https://www.example.com") - - -Run OCR -======= - -.. code:: python3 - - from doctr.io import DocumentFile - from doctr.models import ocr_predictor - - doc = DocumentFile.from_pdf("path/to/your/doc.pdf") - model = ocr_predictor(pretrained=True) - result = model(doc) - -The predictor uses ``db_resnet50`` for text detection and ``crnn_vgg16_bn`` for text recognition by default. -You can choose any combination of :ref:`supported architectures `. - - -Inspect the output -================== - -The result is a :class:`~doctr.io.Document` object. - -Render as plain text:: - - print(result.render()) - -Export as a nested dictionary (JSON-serialisable):: - - import json - print(json.dumps(result.export(), indent=2)) - -Visualize on screen (requires the ``viz`` extra: ``pip install "python-doctr[viz]"``):: - - result.pages[0].show() - - -Multi-page PDF end-to-end example -================================== - -The following snippet processes every page of a PDF and collects the plain-text output: - -.. code:: python3 - - import json - from doctr.io import DocumentFile - from doctr.models import ocr_predictor - - model = ocr_predictor(pretrained=True) - doc = DocumentFile.from_pdf("path/to/multi_page.pdf") - result = model(doc) - - # Plain-text — one string per page - for page_idx, page in enumerate(result.pages): - print(f"--- Page {page_idx + 1} ---") - print(page.render()) - - # Structured output — JSON-serialisable dict - output = result.export() - with open("ocr_output.json", "w") as f: - json.dump(output, f, indent=2) - - -Common pitfalls -=============== - -.. note:: - - * **Visualization** requires the ``viz`` extra (installs ``matplotlib`` and ``mplcursors``): - ``pip install "python-doctr[viz]"``. Calls to ``result.show()`` or - ``result.pages[0].show()`` raise a ``ModuleNotFoundError`` without it. - * **HTML input** requires the ``html`` extra: ``pip install "python-doctr[html]"``. - * **Image format**: pass file paths or NumPy ``uint8`` arrays shaped ``(H, W, C)`` in - RGB order. Grayscale arrays must be converted to 3-channel before use. - * **Pretrained weights** are downloaded on first use and cached locally. Subsequent calls are instantaneous. - * **PDF pages are returned as images**: ``DocumentFile.from_pdf`` returns one - NumPy array per page, so ``result.pages[i]`` corresponds to the *i*-th PDF page. - - -Next steps -========== - -* :doc:`../using_doctr/using_models` - full predictor guide, architecture benchmarks, GPU usage. -* :doc:`../using_doctr/custom_models_training` - train and load your own models. -* :doc:`../using_doctr/sharing_models` - share your trained models on Hugging Face Hub. diff --git a/docs/source/index.md b/docs/source/index.md new file mode 100644 index 0000000000..cc61345889 --- /dev/null +++ b/docs/source/index.md @@ -0,0 +1,194 @@ +--- +myst: + html_meta: + description: "docTR: state-of-the-art OCR for PDFs and images in a few lines of Python. Text detection, text recognition, layout analysis and table structure recognition, powered by PyTorch." +--- + +# docTR: Document Text Recognition + +```{raw} html +
        +
        +
        +
        Open-source OCR · Powered by PyTorch
        +

        OCR made seamless & accessible to anyone

        +

        + docTR reads PDFs and images and gives you back every word with its position, organized into + lines, blocks, layout regions and tables. Run state-of-the-art models in three lines of Python, + fine-tune them on your own documents and ship them anywhere. +

        + +
        + $ pip install python-doctr + +
        +
        +
        +
        ocr.py
        +
        from doctr.io import DocumentFile
        +from doctr.models import ocr_predictor
        +
        +model = ocr_predictor(pretrained=True)
        +doc = DocumentFile.from_pdf("invoice.pdf")
        +result = model(doc)
        +
        +# or export to JSON, Markdown, HTML...
        +print(result.render())
        +
        ACME Office Supplies + +INVOICE + +42 Harbour Road, Hamburg + +No. 2026-0412 +Date: 26/10/2026 +…
        +
        +
        +
        +
        4 tasksdetection · recognition · layout · tables
        +
        20+pretrained architectures
        +
        100+built-in vocabularies
        +
        6export formats
        +
        Apache 2.0free for commercial use
        +
        +
        +``` + +```{raw} html +

        Everything you need to read documents

        +

        From a scanned receipt to a hundred-page report: docTR covers the whole pipeline, and every stage can be swapped, tuned or retrained.

        +``` + +::::{grid} 1 2 3 3 +:gutter: 3 + +:::{grid-item-card} {octicon}`zap;1.1em` Two-stage OCR +:link: user_guide/ocr_predictor +:link-type: doc + +A text detection model finds the words, a recognition model reads them. Mix and match 9 detection and 9 recognition architectures. +::: + +:::{grid-item-card} {octicon}`table;1.1em` Layout & tables +:link: user_guide/layout_and_tables +:link-type: doc + +Detect titles, paragraphs, figures and tables, and turn tables into a row/column grid that loads straight into pandas. +::: + +:::{grid-item-card} {octicon}`sync;1.1em` Rotated documents +:link: user_guide/rotated_documents +:link-type: doc + +Handle skewed scans, upside-down pages and vertical text with built-in page and word orientation classifiers. +::: + +:::{grid-item-card} {octicon}`file-code;1.1em` Export anywhere +:link: user_guide/exporting +:link-type: doc + +Get plain text, JSON, Markdown, AsciiDoc, HTML or hOCR, in a reading order that follows columns, headers and footers. +::: + +:::{grid-item-card} {octicon}`mortar-board;1.1em` Train & share +:link: training/index +:link-type: doc + +Fine-tune any model on your own data with the reference training scripts, then share it on the Hugging Face Hub. +::: + +:::{grid-item-card} {octicon}`rocket;1.1em` Production ready +:link: deployment/index +:link-type: doc + +GPU & half precision, `torch.compile`, ONNX export, Docker images, a CLI and a REST API template. +::: +:::: + +```{raw} html +

        How it works

        +

        An OCR predictor chains specialized models. Each stage is a regular PyTorch module you can replace with your own.

        +``` + +```{raw} html +:file: _includes/pipeline.html +``` + +```{raw} html +

        Find your way around

        +

        Whether you need text out of a PDF in five minutes or want to train a model for a new alphabet, start here.

        +``` + +::::{grid} 1 2 3 3 +:gutter: 3 + +:::{grid-item-card} {octicon}`play;1.1em` Quickstart +:link: getting_started/quickstart +:link-type: doc + +Install docTR and extract the text of your first document in five minutes. +::: + +:::{grid-item-card} {octicon}`book;1.1em` User guide +:link: user_guide/index +:link-type: doc + +Load documents, configure the OCR predictor, navigate and export the results. +::: + +:::{grid-item-card} {octicon}`stack;1.1em` Model zoo +:link: models/index +:link-type: doc + +All architectures with their benchmarks, to pick the right speed/accuracy trade-off. +::: + +:::{grid-item-card} {octicon}`beaker;1.1em` Training +:link: training/index +:link-type: doc + +Datasets, data formats, training scripts and how to load your own checkpoints. +::: + +:::{grid-item-card} {octicon}`server;1.1em` Deployment +:link: deployment/index +:link-type: doc + +Speed up inference, export to ONNX, and serve docTR with Docker or a REST API. +::: + +:::{grid-item-card} {octicon}`code-square;1.1em` API reference +:link: api/index +:link-type: doc + +Every public class and function, generated from the source code. +::: +:::: + +```{raw} html +
        +
        +

        Need help with a complex use case?

        +

        docTR was created by Mindee and is developed and maintained by t2k GmbH, + who offer custom development, integration and consulting around docTR.

        +
        + Get support → +
        +``` + +```{toctree} +:hidden: + +getting_started/index +user_guide/index +models/index +training/index +deployment/index +api/index +community/index +``` diff --git a/docs/source/index.rst b/docs/source/index.rst deleted file mode 100644 index 1cfdb298b6..0000000000 --- a/docs/source/index.rst +++ /dev/null @@ -1,127 +0,0 @@ -******************************** -docTR: Document Text Recognition -******************************** - -State-of-the-art Optical Character Recognition made seamless & accessible to anyone, powered by PyTorch - -.. image:: https://github.com/mindee/doctr/releases/download/v0.2.0/ocr.png - :align: center - - -DocTR provides an easy and powerful way to extract valuable information from your documents: - -* |:receipt:| **for automation**: seamlessly process documents for Natural Language Understanding tasks: we provide OCR predictors to parse textual information (localize and identify each word) from your documents. -* |:woman_scientist:| **for research**: quickly compare your own architectures speed & performances with state-of-art models on public datasets. - - -Main Features -------------- - -* |:robot:| Robust 2-stage (detection + recognition) OCR predictors with pretrained parameters -* |:page_facing_up:| Layout analysis predictor for detecting document regions (tables, figures, headers, …) -* |:zap:| User-friendly, 3 lines of code to load a document and extract text with a predictor -* |:rocket:| State-of-the-art performance on public document datasets, comparable with GoogleVision/AWS Textract -* |:zap:| Optimized for inference speed on both CPU & GPU -* |:bird:| Light package, minimal dependencies -* |:tools:| Actively maintained by Mindee -* |:factory:| Easy integration (available templates for browser demo & API deployment) - - -.. toctree:: - :maxdepth: 2 - :caption: Getting started - :hidden: - - getting_started/installing - getting_started/quickstart - notebooks - - -Model zoo -^^^^^^^^^ - -Text detection models -""""""""""""""""""""" -* DBNet from `"Real-time Scene Text Detection with Differentiable Binarization" `_ -* LinkNet from `"LinkNet: Exploiting Encoder Representations for Efficient Semantic Segmentation" `_ -* FAST from `"FAST: Faster Arbitrarily-Shaped Text Detector with Minimalist Kernel Representation" `_ - -Text recognition models -""""""""""""""""""""""" -* SAR from `"Show, Attend and Read: A Simple and Strong Baseline for Irregular Text Recognition" `_ -* CRNN from `"An End-to-End Trainable Neural Network for Image-based Sequence Recognition and Its Application to Scene Text Recognition" `_ -* MASTER from `"MASTER: Multi-Aspect Non-local Network for Scene Text Recognition" `_ -* ViTSTR from `"Vision Transformer for Fast and Efficient Scene Text Recognition" `_ -* PARSeq from `"Scene Text Recognition with Permuted Autoregressive Sequence Models" `_ -* VIPTR from `"A Vision Permutable Extractor for Fast and Efficient Scene Text Recognition" `_ - - -Supported datasets -^^^^^^^^^^^^^^^^^^ -* FUNSD from `"FUNSD: A Dataset for Form Understanding in Noisy Scanned Documents" `_. -* CORD from `"CORD: A Consolidated Receipt Dataset forPost-OCR Parsing" `_. -* SROIE from `ICDAR 2019 `_. -* IIIT-5k from `CVIT `_. -* Street View Text from `"End-to-End Scene Text Recognition" `_. -* SynthText from `Visual Geometry Group `_. -* SVHN from `"Reading Digits in Natural Images with Unsupervised Feature Learning" `_. -* IC03 from `ICDAR 2003 `_. -* IC13 from `ICDAR 2013 `_. -* IMGUR5K from `"TextStyleBrush: Transfer of Text Aesthetics from a Single Example" `_. -* MJSynth from `"Synthetic Data and Artificial Neural Networks for Natural Scene Text Recognition" `_. -* IIITHWS from `"Generating Synthetic Data for Text Recognition" `_. -* WILDRECEIPT from `"Spatial Dual-Modality Graph Reasoning for Key Information Extraction" `_. -* COCO-Text dataset from `"COCO-Text: Dataset and Benchmark for Text Detection and Recognition in Natural Images" `_. - -.. toctree:: - :maxdepth: 2 - :caption: Using docTR - :hidden: - - using_doctr/using_models - using_doctr/using_datasets - using_doctr/using_contrib_modules - using_doctr/sharing_models - using_doctr/using_model_export - using_doctr/custom_models_training - using_doctr/running_on_aws - using_doctr/using_cli - - -.. toctree:: - :maxdepth: 2 - :caption: Community - :hidden: - - community/resources - community/tools - - -.. toctree:: - :maxdepth: 2 - :caption: Package Reference - :hidden: - - modules/contrib - modules/datasets - modules/io - modules/models - modules/transforms - modules/utils - - -.. toctree:: - :maxdepth: 2 - :caption: Contributing - :hidden: - - contributing/code_of_conduct - contributing/contributing - - -.. toctree:: - :maxdepth: 2 - :caption: Notes - :hidden: - - changelog diff --git a/docs/source/models/detection.md b/docs/source/models/detection.md new file mode 100644 index 0000000000..10e1de1054 --- /dev/null +++ b/docs/source/models/detection.md @@ -0,0 +1,49 @@ +# Text detection + +Text detection models localize the words of a page. In docTR, a *word* is an uninterrupted sequence of characters. +All models predict a segmentation map that is turned into boxes, and support both straight and rotated boxes +(`assume_straight_pages=False`). + +## Architectures + +| Family | Paper | Variants | +| --- | --- | --- | +| **DBNet** | [Real-time Scene Text Detection with Differentiable Binarization](https://arxiv.org/pdf/1911.08947.pdf) | {func}`~doctr.models.detection.db_resnet34`, {func}`~doctr.models.detection.db_resnet50`, {func}`~doctr.models.detection.db_mobilenet_v3_large` | +| **LinkNet** | [LinkNet: Exploiting Encoder Representations for Efficient Semantic Segmentation](https://arxiv.org/pdf/1707.03718.pdf) | {func}`~doctr.models.detection.linknet_resnet18`, {func}`~doctr.models.detection.linknet_resnet34`, {func}`~doctr.models.detection.linknet_resnet50` | +| **FAST** | [FAST: Faster Arbitrarily-Shaped Text Detector with Minimalist Kernel Representation](https://arxiv.org/pdf/2111.02394.pdf) | {func}`~doctr.models.detection.fast_tiny`, {func}`~doctr.models.detection.fast_small`, {func}`~doctr.models.detection.fast_base` {bdg-secondary}`default` | + +## Benchmark + +Recall and precision on FUNSD and CORD, and latency with a batch size of 1: + +| Architecture | Input shape | # params | FUNSD recall | FUNSD precision | CORD recall | CORD precision | sec/it | +| --- | --- | ---: | ---: | ---: | ---: | ---: | ---: | +| `db_resnet34` | (1024, 1024, 3) | 22.4 M | 82.76 | 76.75 | 89.20 | 71.74 | 0.8 | +| `db_resnet50` | (1024, 1024, 3) | 25.4 M | 83.56 | 86.68 | 92.61 | 86.39 | 1.1 | +| `db_mobilenet_v3_large` | (1024, 1024, 3) | 4.2 M | 82.69 | 84.63 | **94.51** | 70.28 | 0.5 | +| `linknet_resnet18` | (1024, 1024, 3) | 11.5 M | 81.64 | 85.52 | 88.92 | 82.74 | 0.6 | +| `linknet_resnet34` | (1024, 1024, 3) | 21.6 M | 81.62 | 82.95 | 86.26 | 81.06 | 0.7 | +| `linknet_resnet50` | (1024, 1024, 3) | 28.8 M | 81.78 | 82.47 | 87.29 | 85.54 | 1.0 | +| `fast_tiny` | (1024, 1024, 3) | 13.5 M (8.5 M) | 84.90 | 85.04 | 93.73 | 76.26 | 0.7 (0.4) | +| `fast_small` | (1024, 1024, 3) | 14.7 M (9.7 M) | **85.36** | 86.68 | 94.09 | 78.53 | 0.7 (0.5) | +| `fast_base` | (1024, 1024, 3) | 16.3 M (10.6 M) | 84.95 | **86.73** | 94.39 | 85.36 | 0.8 (0.5) | + +:::{note} +FAST models are **reparameterized** by `detection_predictor` and `ocr_predictor`: their branches are fused into +single convolutions for inference. Values in parentheses are measured after reparameterization. +::: + +## Usage + +```python +from doctr.models import ocr_predictor, detection_predictor + +# In the OCR pipeline +predictor = ocr_predictor(det_arch="db_resnet50", pretrained=True) + +# On its own +det_predictor = detection_predictor("db_resnet50", pretrained=True) +``` + +Tune the binarization and box thresholds of the post-processor to detect more (or fewer) words, see +[](../user_guide/ocr_predictor.md#tune-the-text-detection). diff --git a/docs/source/models/end_to_end.md b/docs/source/models/end_to_end.md new file mode 100644 index 0000000000..57c6423ac4 --- /dev/null +++ b/docs/source/models/end_to_end.md @@ -0,0 +1,31 @@ +# End-to-end OCR + +An OCR predictor combines a detection model with a recognition model: any pair of the architectures listed in this +section works. A word counts as correct when it is both well localized and correctly transcribed. + +## Benchmark + +| Architecture | FUNSD recall | FUNSD precision | CORD recall | CORD precision | +| --- | ---: | ---: | ---: | ---: | +| `db_resnet50` + `crnn_vgg16_bn` | 73.37 | 76.11 | 84.80 | 79.09 | +| `db_resnet50` + `crnn_mobilenet_v3_small` | 73.06 | 75.79 | 84.64 | 78.94 | +| `db_resnet50` + `crnn_mobilenet_v3_large` | 73.17 | 75.90 | 84.96 | 79.25 | +| `db_resnet50` + `master` | **73.90** | **76.66** | 85.84 | 80.07 | +| `db_resnet50` + `sar_resnet31` | 73.58 | 76.33 | 85.64 | 79.88 | +| `db_resnet50` + `vitstr_small` | 73.06 | 75.79 | **85.95** | **80.17** | +| `db_resnet50` + `vitstr_base` | 73.70 | 76.46 | 85.76 | 79.99 | +| `db_resnet50` + `parseq` | 73.52 | 76.27 | 85.91 | 80.13 | +| *Google Vision — text detection* | 59.50 | 62.50 | 75.30 | 59.03 | +| *Google Vision — document text detection* | 64.00 | 53.30 | 68.90 | 61.10 | +| *AWS Textract* | 78.10 | 83.00 | 87.50 | 66.00 | +| *Azure Form Recognizer (v3.2)* | 79.42 | 85.89 | 89.62 | 88.93 | + +Commercial services are shown in italics, for reference. + +## Usage + +```python +from doctr.models import ocr_predictor + +predictor = ocr_predictor(det_arch="db_resnet50", reco_arch="master", pretrained=True) +``` diff --git a/docs/source/models/index.md b/docs/source/models/index.md new file mode 100644 index 0000000000..8599be215e --- /dev/null +++ b/docs/source/models/index.md @@ -0,0 +1,71 @@ +# Model zoo + +docTR implements a range of published architectures for each task of the pipeline, all with pretrained weights. +This section lists them with their benchmarks, so you can pick the right trade-off between speed and accuracy. + +## At a glance + +| Task | Architectures | Default | Use it with | +| --- | --- | --- | --- | +| [Text detection](detection.md) | DBNet, LinkNet, FAST | `fast_base` | `ocr_predictor(det_arch=...)` | +| [Text recognition](recognition.md) | CRNN, SAR, MASTER, ViTSTR, PARSeq, VIPTR | `crnn_vgg16_bn` | `ocr_predictor(reco_arch=...)` | +| [Layout analysis](layout.md) | LW-DETR | `lw_detr_s` | `ocr_predictor(detect_layout=True, layout_arch=...)` | +| [Table structure](table_structure.md) | TableCenterNet | `tablecenternet` | `ocr_predictor(detect_tables=True)` | +| [Orientation](#orientation-classifiers) | MobileNetV3 | `mobilenet_v3_small_*_orientation` | `ocr_predictor(assume_straight_pages=False)` | + +[End-to-end benchmarks](end_to_end.md) compare detection + recognition pairs, including commercial OCR services. + +## How to choose + +::::{grid} 1 1 3 3 +:gutter: 3 + +:::{grid-item-card} {octicon}`check-circle;1.1em` Balanced +The defaults, `fast_base` + `crnn_vgg16_bn`, are accurate on most documents and run fine on a CPU. +::: + +:::{grid-item-card} {octicon}`zap;1.1em` Fast +`fast_tiny` or `db_mobilenet_v3_large` with `crnn_mobilenet_v3_small` or `viptr_tiny` for CPUs, edge devices and +high-volume pipelines. +::: + +:::{grid-item-card} {octicon}`goal;1.1em` Accurate +`db_resnet50` or `fast_base` with `parseq`, `vitstr_base` or `master`, ideally on a GPU. +::: +:::: + +Benchmarks on public datasets are a starting point: the best way to choose is to compare a few combinations on a +sample of **your** documents. If none is good enough, [fine-tune a model](../training/index.md) on your data. + +## Orientation classifiers + +Two lightweight MobileNetV3 classifiers handle [rotated documents](../user_guide/rotated_documents.md). They are +loaded automatically when needed. + +| Architecture | Predicts | Factory | +| ---------------------------------------- | ------------------------------------------------ | ---------------------------------------------------------- | +| `mobilenet_v3_small_page_orientation` | The orientation of a page: 0°, 90°, 180°, 270° | {func}`~doctr.models.classification.page_orientation_predictor` | +| `mobilenet_v3_small_crop_orientation` | The orientation of a word crop: 0°, 90°, 180°, 270° | {func}`~doctr.models.classification.crop_orientation_predictor` | + +## About the benchmarks + +- **Datasets**: unless stated otherwise, models are evaluated on both the training and test sets of + [FUNSD](https://guillaumejaume.github.io/FUNSD/) and [CORD](https://github.com/clovaai/cord) (see + [](../training/datasets.md)). FUNSD has 199 pages (30,595 word crops), which might not be representative of every + use case. +- **Metrics** are described in [](../api/utils.md#task-evaluation). +- **Speed** (`sec/it`) is measured on an *11th Gen Intel(R) Core(TM) i7-11800H @ 2.30GHz* CPU, after a warm-up of + 100 tensors, as the average over 1,000 samples. The batch size is given in each table. +- Reproduce or extend them with the `evaluate.py` and `latency.py` scripts of the + [references](https://github.com/mindee/doctr/tree/main/references). + +```{toctree} +:hidden: + +detection +recognition +layout +table_structure +end_to_end +vocabs +``` diff --git a/docs/source/models/layout.md b/docs/source/models/layout.md new file mode 100644 index 0000000000..24e3d5325b --- /dev/null +++ b/docs/source/models/layout.md @@ -0,0 +1,36 @@ +# Layout analysis + +Layout models localize and classify the regions of a page (titles, paragraphs, tables, figures, headers...). Like +the text detection models, they work on rotated and skewed documents. + +## Architectures + +| Architecture | Paper | Pretrained weights | +| --- | --- | --- | +| {func}`~doctr.models.layout.lw_detr_s` {bdg-secondary}`default` | [LW-DETR: A Transformer Replacement to YOLO for Real-Time Detection](https://arxiv.org/pdf/2406.03459v1) | {bdg-success}`available` | +| {func}`~doctr.models.layout.lw_detr_m` | Same, larger backbone | {bdg-warning}`coming soon` | + +The pretrained model predicts 11 classes: `Caption`, `Footnote`, `Formula`, `List-item`, `Page-footer`, +`Page-header`, `Picture`, `Section-header`, `Table`, `Text` and `Title`. + +## Benchmark + +| Architecture | Input shape | # params | mAP@[.5:.95] | AP@.5 | AP@.75 | sec/it (batch 1) | +| --- | --- | ---: | ---: | ---: | ---: | ---: | +| `lw_detr_s` | (1024, 1024, 3) | 15.1 M | 66.89 | 82.83 | 73.75 | 0.5 | +| `lw_detr_m` | (1024, 1024, 3) | 29.5 M | soon | soon | soon | 0.7 | + +## Usage + +```python +from doctr.models import layout_predictor, ocr_predictor + +# In the OCR pipeline +predictor = ocr_predictor(pretrained=True, detect_layout=True, layout_arch="lw_detr_s") + +# On its own +layout = layout_predictor("lw_detr_s", pretrained=True) +``` + +See [](../user_guide/layout_and_tables.md) for how the regions are used, and +[](../training/custom_models.md#layout-models) to plug a model trained on your own classes. diff --git a/docs/source/models/recognition.md b/docs/source/models/recognition.md new file mode 100644 index 0000000000..6d705fe593 --- /dev/null +++ b/docs/source/models/recognition.md @@ -0,0 +1,55 @@ +# Text recognition + +Text recognition models transcribe the characters of a word crop. They output a string and a confidence score, and +can only predict the characters of the [vocabulary](vocabs.md) they were trained on. + +## Architectures + +| Architecture | Paper | Decoding | +| --- | --- | --- | +| {func}`~doctr.models.recognition.crnn_vgg16_bn` {bdg-secondary}`default`, {func}`~doctr.models.recognition.crnn_mobilenet_v3_small`, {func}`~doctr.models.recognition.crnn_mobilenet_v3_large` | [An End-to-End Trainable Neural Network for Image-based Sequence Recognition](https://arxiv.org/pdf/1507.05717.pdf) | CTC | +| {func}`~doctr.models.recognition.sar_resnet31` | [Show, Attend and Read: A Simple and Strong Baseline for Irregular Text Recognition](https://arxiv.org/pdf/1811.00751.pdf) | Attention | +| {func}`~doctr.models.recognition.master` | [MASTER: Multi-Aspect Non-local Network for Scene Text Recognition](https://arxiv.org/pdf/1910.02562.pdf) | Transformer | +| {func}`~doctr.models.recognition.vitstr_small`, {func}`~doctr.models.recognition.vitstr_base` | [Vision Transformer for Fast and Efficient Scene Text Recognition](https://arxiv.org/pdf/2105.08582.pdf) | Parallel | +| {func}`~doctr.models.recognition.parseq` | [Scene Text Recognition with Permuted Autoregressive Sequence Models](https://arxiv.org/pdf/2207.06966) | Permuted autoregressive | +| {func}`~doctr.models.recognition.viptr_tiny` | [A Vision Permutable Extractor for Fast and Efficient Scene Text Recognition](https://arxiv.org/abs/2401.10110) | CTC | + +## Benchmark + +Word accuracy on FUNSD and CORD word crops (exact and partial match, see {class}`~doctr.utils.metrics.TextMatch`), and latency with a batch size of 64: + +| Architecture | Input shape | # params | FUNSD exact | FUNSD partial | CORD exact | CORD partial | sec/it | +| --- | --- | ---: | ---: | ---: | ---: | ---: | ---: | +| `crnn_vgg16_bn` | (32, 128, 3) | 15.8 M | 88.21 | 88.95 | 95.47 | 95.91 | 0.6 | +| `crnn_mobilenet_v3_small` | (32, 128, 3) | 2.1 M | 87.25 | 87.99 | 93.91 | 94.34 | **0.05** | +| `crnn_mobilenet_v3_large` | (32, 128, 3) | 4.5 M | 87.38 | 88.09 | 94.46 | 94.92 | 0.08 | +| `master` | (32, 128, 3) | 58.7 M | **88.57** | **89.39** | **95.73** | **96.21** | 17.6 | +| `sar_resnet31` | (32, 128, 3) | 55.4 M | 88.10 | 88.88 | 94.83 | 95.29 | 4.9 | +| `vitstr_small` | (32, 128, 3) | 21.4 M | 88.00 | 88.82 | 95.40 | 95.78 | 1.5 | +| `vitstr_base` | (32, 128, 3) | 85.2 M | 88.33 | 89.09 | 95.32 | 95.71 | 4.1 | +| `parseq` | (32, 128, 3) | 23.8 M | 88.53 | 89.24 | 95.56 | 95.91 | 2.2 | +| `viptr_tiny` | (32, 128, 3) | 3.2 M | 86.03 | 86.71 | 93.08 | 93.47 | 0.08 | + +## Usage + +```python +from doctr.models import ocr_predictor, recognition_predictor + +# In the OCR pipeline +predictor = ocr_predictor(reco_arch="parseq", pretrained=True) + +# On its own, on word crops +reco_predictor = recognition_predictor("parseq", pretrained=True) + +# The characters the model can predict +print(reco_predictor.model.cfg["vocab"]) +``` + +## Languages + +The pretrained recognition models are trained on the `french` vocabulary: Latin characters with the accents of +the main Western European languages, digits, punctuation and common currency symbols. For other languages: + +- restrict the output to the characters you expect with a [whitelist](../user_guide/ocr_predictor.md#restrict-the-output-characters); +- look for a [community model](../training/sharing_models.md#community-models), such as the multilingual PARSeq; +- [train your own](../training/train.md) on one of the [100+ vocabularies](vocabs.md). diff --git a/docs/source/models/table_structure.md b/docs/source/models/table_structure.md new file mode 100644 index 0000000000..fe95454479 --- /dev/null +++ b/docs/source/models/table_structure.md @@ -0,0 +1,34 @@ +# Table structure recognition + +Table structure models parse the image of a table into a machine-understandable grid: they localize every cell +(spatial structure) and recover the rows and columns it spans (logical structure). + +## Architectures + +| Architecture | Paper | +| --- | --- | +| {func}`~doctr.models.table_structure.tablecenternet` {bdg-secondary}`default` | [TableCenterNet: A one-stage network for table structure recognition](https://arxiv.org/abs/2504.17522) | + +## Benchmark + +| Architecture | Input shape | # params | Recall | Precision | F1 | Structure acc. | sec/it (batch 1) | +| --- | --- | ---: | ---: | ---: | ---: | ---: | ---: | +| `tablecenternet` | (1024, 1024, 3) | 7.1 M | 82.31 | 96.01 | 88.64 | 77.53 | 0.5 | + +The metrics are produced by `references/table/evaluate.py` with +{class}`~doctr.utils.metrics.TableCellMetric`: cell detection **recall**, **precision** and **F1** (cells matched +above an IoU of 0.5), and **structure accuracy**, the share of matched cells whose row and column spans are correct. + +## Usage + +```python +from doctr.models import ocr_predictor, table_predictor + +# In the OCR pipeline: tables are located by the layout model, then parsed +predictor = ocr_predictor(pretrained=True, detect_tables=True) + +# On its own, on images of tables +tables = table_predictor("tablecenternet", pretrained=True) +``` + +See [](../user_guide/layout_and_tables.md#table-structure-recognition) to work with the recognized tables. diff --git a/docs/source/models/vocabs.md b/docs/source/models/vocabs.md new file mode 100644 index 0000000000..13d300ff31 --- /dev/null +++ b/docs/source/models/vocabs.md @@ -0,0 +1,34 @@ +# Vocabularies + +A vocabulary is the set of characters a recognition model can predict. docTR ships more than 100 of them, covering +the main writing systems, in {data}`doctr.datasets.VOCABS`: + +```python +from doctr.datasets import VOCABS + +print(len(VOCABS["german"])) # 108 +print(VOCABS["german"][-8:]) # äöüßÄÖÜẞ +``` + +They are used to: + +- **train** a recognition model on a language: `crnn_vgg16_bn(vocab=VOCABS["german"])`, or + `--vocab german` with the [training script](../training/train.md#text-recognition); +- **restrict** a trained model to a subset of its characters with a + [whitelist](../user_guide/ocr_predictor.md#restrict-the-output-characters). + +:::{tip} +Vocabularies are plain strings, so you can combine them: `VOCABS["german"] + VOCABS["polish"]`. Remove the +duplicates while keeping the order with `"".join(dict.fromkeys(...))`. +::: + +## Available vocabularies + +Click a row to see all its characters. For Latin-script languages, the summary lists the characters added to the +`english` vocabulary. + +```{include} _generated/vocabs.md +``` + +`VOCABS` also contains the building blocks these vocabularies are made of, such as `digits`, `punctuation`, +`currency` or the consonants and vowels of each Indic script. diff --git a/docs/source/modules/contrib.rst b/docs/source/modules/contrib.rst deleted file mode 100644 index 1a2659e2e3..0000000000 --- a/docs/source/modules/contrib.rst +++ /dev/null @@ -1,13 +0,0 @@ -doctr.contrib -============= - -.. currentmodule:: doctr.contrib - -This module contains all the available contribution modules for docTR. - - -Supported contribution modules ------------------------------- -Here are all the available contribution modules: - -.. autoclass:: ArtefactDetector diff --git a/docs/source/modules/datasets.rst b/docs/source/modules/datasets.rst deleted file mode 100644 index 234e280903..0000000000 --- a/docs/source/modules/datasets.rst +++ /dev/null @@ -1,404 +0,0 @@ -doctr.datasets -============== - -.. currentmodule:: doctr.datasets - -.. _datasets: - -doctr.datasets --------------- - -.. autoclass:: FUNSD - -.. autoclass:: SROIE - -.. autoclass:: CORD - -.. autoclass:: IIIT5K - -.. autoclass:: SVT - -.. autoclass:: SVHN - -.. autoclass:: SynthText - -.. autoclass:: IC03 - -.. autoclass:: IC13 - -.. autoclass:: IMGUR5K - -.. autoclass:: MJSynth - -.. autoclass:: IIITHWS - -.. autoclass:: DocArtefacts - -.. autoclass:: WILDRECEIPT - -.. autoclass:: COCOTEXT - -Synthetic dataset generator ---------------------------- - -.. autoclass:: CharacterGenerator - -.. autoclass:: WordGenerator - -Custom dataset loader ---------------------- - -.. autoclass:: DetectionDataset - -.. autoclass:: LayoutDataset - -.. autoclass:: RecognitionDataset - -.. autoclass:: TableStructureDataset - -.. autoclass:: OCRDataset - -Dataset utils -------------- - -.. autofunction:: translate - -.. autofunction:: encode_string - -.. autofunction:: decode_sequence - -.. autofunction:: encode_sequences - -.. autofunction:: pre_transform_multiclass - -.. autofunction:: crop_bboxes_from_image - -.. autofunction:: convert_target_to_relative - -.. _vocabs: - -Supported Vocabs ----------------- - -Since textual content has to be encoded properly for models to interpret them efficiently, docTR supports multiple sets -of vocabs. - -.. list-table:: docTR Vocabs - :widths: 20 5 50 - :header-rows: 1 - - * - Name - - size - - characters - * - latex - - 81 - - ()+,-./0123456789<=>ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_abcdefghijklmnopqrstuvwxyz{|} - * - latin - - 94 - - 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~ - * - english - - 100 - - 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~°£€¥¢฿ - * - albanian - - 104 - - 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~°£€¥¢฿çëÇË - * - afrikaans - - 128 - - 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~°£€¥¢฿èëïîôûêÈËÏÎÔÛÊáéíóúäöÁÉÍÓÚÄÖ - * - azerbaijani - - 113 - - 0123456789abcdefghijklmnopqrstuvxyzABCDEFGHIJKLMNOPQRSTUVXYZ!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~°£€¥¢฿çəğıöşüÇƏĞİÖŞÜ₼ - * - basque - - 104 - - 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~°£€¥¢฿ñçÑÇ - * - bosnian - - 102 - - 0123456789abcdefghijklmnoprstuvzABCDEFGHIJKLMNOPRSTUVZ!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~°£€¥¢฿čćđšžČĆĐŠŽ - * - catalan - - 123 - - 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~°£€¥¢฿àèéíïòóúüçÀÈÉÍÏÒÓÚÜÇ·ŀĿ - * - croatian - - 110 - - 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~°£€¥¢฿ČčĆćĐ𩹮ž - * - czech - - 130 - - 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~°£€¥¢฿áčďéěíňóřšťúůýžÁČĎÉĚÍŇÓŘŠŤÚŮÝŽ - * - danish - - 106 - - 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~°£€¥¢฿æøåÆØÅ - * - dutch - - 126 - - 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~°£€¥¢฿áéíóúüñÁÉÍÓÚÜÑäëïöèêÄËÏÖÈÊ - * - estonian - - 112 - - 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~°£€¥¢฿šžõäöüŠŽÕÄÖÜ - * - esperanto - - 105 - - 0123456789abcdefghijklmnoprstuvzABCDEFGHIJKLMNOPRSTUVZ!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~°£€¥¢฿ĉĝĥĵŝŭĈĜĤĴŜŬ₷ - * - french - - 126 - - 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~°£€¥¢฿àâéèêëîïôùûüçÀÂÉÈÊËÎÏÔÙÛÜÇ - * - finnish - - 104 - - 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~°£€¥¢฿äöÄÖ - * - frisian - - 108 - - 0123456789abcdefghijklmnoprstuvwyzABCDEFGHIJKLMNOPRSTUVWYZ!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~°£€¥¢฿âêôûúÂÊÔÛÚƒƑ - * - galician - - 110 - - 0123456789abcdefghilmnopqrstuvxyzABCDEFGHILMNOPQRSTUVXYZ!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~°£€¥¢฿ñÑçÇáéíóúüÁÉÍÓÚÜ - * - german - - 108 - - 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~°£€¥¢฿äöüßÄÖÜẞ - * - hausa - - 101 - - 0123456789abcdefghijklmnorstuwyzABCDEFGHIJKLMNORSTUWYZ!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~°£€¥¢฿ɓɗƙƴƁƊƘƳ₦ - * - hungarian - - 118 - - 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~°£€¥¢฿áéíóöúüÁÉÍÓÖÚÜőűŐŰ - * - icelandic - - 114 - - 0123456789abdefghijklmnoprstuvxyzABDEFGHIJKLMNOPRSTUVXYZ!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~°£€¥¢฿ðáéíóúýþæöÐÁÉÍÓÚÝÞÆÖ - * - indonesian - - 100 - - 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~°£€¥¢฿ - * - irish - - 110 - - 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~°£€¥¢฿áéíóúÁÉÍÓÚ - * - italian - - 120 - - 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~°£€¥¢฿àèéìíîòóùúÀÈÉÌÍÎÒÓÙÚ - * - latvian - - 116 - - 0123456789abcdefghijklmnoprstuvyzABCDEFGHIJKLMNOPRSTUVYZ!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~°£€¥¢฿āčēģīķļņšūžĀČĒĢĪĶĻŅŠŪŽ - * - lithuanian - - 112 - - 0123456789abcdefghijklmnoprstuvyzABCDEFGHIJKLMNOPRSTUVYZ!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~°£€¥¢฿ąčęėįšųūžĄČĘĖĮŠŲŪŽ - * - luxembourgish - - 110 - - 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~°£€¥¢฿äöüéëÄÖÜÉË - * - malagasy - - 94 - - 0123456789abdefghijklmnoprstvyzABDEFGHIJKLMNOPRSTVYZ!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~°£€¥¢฿ôñÔÑ - * - malay - - 100 - - 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~°£€¥¢฿ - * - maltese - - 114 - - 0123456789abdefghijklmnopqrstuvwxzABDEFGHIJKLMNOPQRSTUVWXZ!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~°£€¥¢฿ċġħżĊĠĦŻàèìòùÀÈÌÒÙ - * - maori - - 86 - - 0123456789aeghikmnoprtuwAEGHIKMNOPRTUW!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~°£€¥¢฿āēīōūĀĒĪŌŪ - * - montenegrin - - 104 - - 0123456789abcdefghijklmnoprstuvzABCDEFGHIJKLMNOPRSTUVZ!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~°£€¥¢฿čćšśžźČĆŠŚŽŹ - * - norwegian - - 106 - - 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~°£€¥¢฿æøåÆØÅ - * - polish - - 118 - - 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~°£€¥¢฿ąćęłńóśźżĄĆĘŁŃÓŚŹŻ - * - portuguese - - 128 - - 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~°£€¥¢฿áàâãéêíïóôõúüçÁÀÂÃÉÊÍÏÓÔÕÚÜÇ - * - quechua - - 90 - - 0123456789acehiklmnopqrstuwyACEHIKLMNOPQRSTUWY!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~°£€¥¢฿ñÑĉĈçÇ - * - romanian - - 110 - - 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~°£€¥¢฿ăâîșțĂÂÎȘȚ - * - scottish_gaelic - - 94 - - 0123456789abcdefghilmnoprstuABCDEFGHILMNOPRSTU!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~°£€¥¢฿àèìòùÀÈÌÒÙ - * - serbian_latin - - 110 - - 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~°£€¥¢฿čćđžšČĆĐŽŠ - * - slovak - - 134 - - 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~°£€¥¢฿ôäčďľňšťžáéíĺóŕúýÔÄČĎĽŇŠŤŽÁÉÍĹÓŔÚÝ - * - slovene - - 102 - - 0123456789abcdefghijklmnoprstuvzABCDEFGHIJKLMNOPRSTUVZ!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~°£€¥¢฿čćđšžČĆĐŠŽ - * - somali - - 94 - - 0123456789abcdefghijklmnoqrstuwxyABCDEFGHIJKLMNOQRSTUWXY!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~°£€¥¢฿ - * - spanish - - 116 - - 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~°£€¥¢฿áéíóúüñÁÉÍÓÚÜÑ¡¿ - * - swahili - - 96 - - 0123456789abcdefghijklmnoprstuvwyzABCDEFGHIJKLMNOPRSTUVWYZ!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~°£€¥¢฿ - * - swedish - - 106 - - 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~°£€¥¢฿åäöÅÄÖ - * - tagalog - - 103 - - 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~°£€¥¢฿ñÑ₱ - * - turkish - - 113 - - 0123456789abcdefghijklmnoprstuvyzABCDEFGHIJKLMNOPRSTUVYZ!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~°£€¥¢฿çğıöşüâîûÇĞİÖŞÜÂÎÛ₺ - * - uzbek_latin - - 102 - - 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~°£€¥¢฿ʻʼ - * - vietnamese - - 235 - - 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~°£€¥¢฿áàảạãăắằẳẵặâấầẩẫậđéèẻẽẹêếềểễệóòỏõọôốồổộỗơớờởợỡúùủũụưứừửữựíìỉĩịýỳỷỹỵÁÀẢẠÃĂẮẰẲẴẶÂẤẦẨẪẬĐÉÈẺẼẸÊẾỀỂỄỆÓÒỎÕỌÔỐỒỔỘỖƠỚỜỞỢỠÚÙỦŨỤƯỨỪỬỮỰÍÌỈĨỊÝỲỶỸỴ₫ - * - welsh - - 102 - - 0123456789abcdefghijlmnoprstuwyABCDEFGHIJLMNOPRSTUWY!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~°£€¥¢฿âêîôŵŷÂÊÎÔŴŶ - * - yoruba - - 121 - - 0123456789abdefghijklmnoprstuwyABDEFGHIJKLMNOPRSTUWY!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~°£€¥¢฿ẹọṣẸỌṢàáèéìíòóùúÀÁÈÉÌÍÒÓÙÚńǹŃǸ₦ - * - zulu - - 100 - - 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~°£€¥¢฿ - * - russian - - 114 - - абвгдежзийклмнопрстуфхцчшщьюяАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЬЮЯёыэЁЫЭъЪ0123456789!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~£€¥¢฿₽ - * - belarusian - - 116 - - абвгдежзийклмнопрстуфхцчшщьюяАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЬЮЯёыэЁЫЭ0123456789!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~£€¥¢฿ўіЎІ₽ - * - ukrainian - - 114 - - абвгдежзийклмнопрстуфхцчшщьюяАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЬЮЯ0123456789!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~£€¥¢฿ґіїєҐІЇЄ₴ - * - tatar - - 126 - - абвгдежзийклмнопрстуфхцчшщьюяАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЬЮЯёыэЁЫЭъЪ0123456789!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~£€¥¢฿₽ӘәҖҗҢңӨөҮүҺһ - * - tajik - - 125 - - абвгдежзийклмнопрстуфхцчшщьюяАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЬЮЯёыэЁЫЭъЪ0123456789!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~£€¥¢฿ҒғҚқҲҳҶҷӢӣӮӯ - * - kazakh - - 132 - - абвгдежзийклмнопрстуфхцчшщьюяАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЬЮЯёыэЁЫЭъЪ0123456789!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~£€¥¢฿ӘәҒғҚқҢңӨөҰұҮүҺһІі₸ - * - kyrgyz - - 119 - - абвгдежзийклмнопрстуфхцчшщьюяАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЬЮЯёыэЁЫЭъЪ0123456789!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~£€¥¢฿ҢңӨөҮү - * - bulgarian - - 107 - - абвгдежзийклмнопрстуфхцчшщьюяАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЬЮЯъЪ0123456789!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~£€¥¢฿ - * - macedonian - - 119 - - абвгдежзийклмнопрстуфхцчшщьюяАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЬЮЯ0123456789!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~£€¥¢฿ЃѓЅѕЈјЉљЊњЌќЏџ - * - mongolian - - 128 - - абвгдежзийклмнопрстуфхцчшщьюяАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЬЮЯёыэЁЫЭъЪ0123456789!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~£€¥¢฿ӨөҮү᠐᠑᠒᠓᠔᠕᠖᠗᠘᠙₮ - * - yakut - - 124 - - абвгдежзийклмнопрстуфхцчшщьюяАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЬЮЯёыэЁЫЭъЪ0123456789!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~£€¥¢฿ҔҕҤҥӨөҺһҮү₽ - * - serbian_cyrillic - - 107 - - абвгдежзиклмнопрстуфхцчшАБВГДЕЖЗИКЛМНОПРСТУФХЦЧШјЈЂђЉљЊњЋћЏџ0123456789!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~£€¥¢฿ - * - uzbek_cyrillic - - 121 - - абвгдежзийклмнопрстуфхцчшщьюяАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЬЮЯёыэЁЫЭъЪ0123456789!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~£€¥¢฿ЎўҚқҒғҲҳ - * - greek - - 117 - - 0123456789!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~αβγδεζηθικλμνξοπρστςυφχψωΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ£€¥¢฿άέήίϊΐόύϋΰώΆΈΉΊΪΌΎΫΏ· - * - greek_extended - - 312 - - 0123456789!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~αβγδεζηθικλμνξοπρστςυφχψωΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ£€¥¢฿άέήίϊΐόύϋΰώΆΈΉΊΪΌΎΫΏ·ͶͷϜϝἀἁἂἃἄἅἆἇἈἉἊἋἌἍἎἏἐἑἒἓἔἕἘἙἚἛἜἝἠἡἢἣἤἥἦἧἨἩἪἫἬἭἮἯἰἱἲἳἴἵἶἷἸἹἺἻἼἽἾἿὀὁὂὃὄὅὈὉὊὋὌὍὐὑὒὓὔὕὖὗὙὛὝὟὠὡὢὣὤὥὦὧὨὩὪὫὬὭὮὯὰὲὴὶὸὺὼᾀᾁᾂᾃᾄᾅᾆᾇᾈᾉᾊᾋᾌᾍᾎᾏᾐᾑᾒᾓᾔᾕᾖᾗᾘᾙᾚᾛᾜᾝᾞᾟᾠᾡᾢᾣᾤᾥᾦᾧᾨᾩᾪᾫᾬᾭᾮᾯᾲᾳᾴᾶᾷᾺᾼῂῃῄῆῇῈῊῌῒΐῖῗῚῢΰῤῥῦῧῪῬῲῳῴῶῷῸῺῼ - * - hebrew - - 176 - - 0123456789!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~אבגדהוזחטיךכלםמןנסעףפץצקרשתְֱֲֳִֵֶַָׇֹֺֻֽ־ֿ׀ׁׂ׃ׅׄ׆׳״֑֖֛֢֣֤֥֦֧֪֚֭֮֒֓֔֕֗֘֙֜֝֞֟֠֡֨֩֫֬֯ׯװױײיִﬞײַﬠﬡﬢﬣﬤﬥﬦﬧﬨ﬩שׁשׂשּׁשּׂאַאָאּבּגּדּהּוּזּטּיּךּכּלּמּנּסּףּפּצּקּרּשּתּוֹבֿכֿפֿﭏ₪ - * - arabic - - 116 - - 0123456789٠١٢٣٤٥٦٧٨٩ءآأؤإئابةتثجحخدذرزسشصضطظعغـفقكلمنهوىيٱپچژڢڤگکیًٌٍَُِّْٕٓٔٚ؟؛«»—،!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~ - * - persian - - 126 - - 0123456789٠١٢٣٤٥٦٧٨٩ءآأؤإئابةتثجحخدذرزسشصضطظعغـفقكلمنهوىيٱپچژڢڤگکیًٌٍَُِّْٕٓٔٚ؟؛«»—،!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~۰۱۲۳۴۵۶۷۸۹ - * - urdu - - 134 - - 0123456789٠١٢٣٤٥٦٧٨٩ءآأؤإئابةتثجحخدذرزسشصضطظعغـفقكلمنهوىيٱپچژڢڤگکیًٌٍَُِّْٕٓٔٚ؟؛«»—،!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~۰۱۲۳۴۵۶۷۸۹ٹڈڑںھےہۃ - * - pashto - - 137 - - 0123456789٠١٢٣٤٥٦٧٨٩ءآأؤإئابةتثجحخدذرزسشصضطظعغـفقكلمنهوىيٱپچژڢڤگکیًٌٍَُِّْٕٓٔٚ؟؛«»—،!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~۰۱۲۳۴۵۶۷۸۹ټډړږښځڅڼېۍګ - * - kurdish - - 131 - - 0123456789٠١٢٣٤٥٦٧٨٩ءآأؤإئابةتثجحخدذرزسشصضطظعغـفقكلمنهوىيٱپچژڢڤگکیًٌٍَُِّْٕٓٔٚ؟؛«»—،!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~۰۱۲۳۴۵۶۷۸۹ڵڕۆێە - * - uyghur - - 134 - - 0123456789٠١٢٣٤٥٦٧٨٩ءآأؤإئابةتثجحخدذرزسشصضطظعغـفقكلمنهوىيٱپچژڢڤگکیًٌٍَُِّْٕٓٔٚ؟؛«»—،!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~۰۱۲۳۴۵۶۷۸۹ەېۆۇۈڭھۋ - * - sindhi - - 147 - - 0123456789٠١٢٣٤٥٦٧٨٩ءآأؤإئابةتثجحخدذرزسشصضطظعغـفقكلمنهوىيٱپچژڢڤگکیًٌٍَُِّْٕٓٔٚ؟؛«»—،!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~۰۱۲۳۴۵۶۷۸۹ڀٿٺٽڦڄڃڇڏڌڊڍڙڳڱڻھڪٻ۽۾ - * - devanagari - - 161 - - 0123456789कखगघङचछजझञटठडढणतथदधनपफबभमयरलवशषसहऴऩळक़ख़ग़ज़ड़ढ़फ़य़ऱॺॻॼॽॾअआइईउऊऋऌऍऎएऐऑऒओऔॠॡॲऄॵॶॳॴॷॸॹ०१२३४५६७८९़ंँः॒॑ािीुूृॄॅॆेैॉॊोौॢॣॏॎ्।॥॰ऽꣲ!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~₹ - * - hindi - - 161 - - 0123456789कखगघङचछजझञटठडढणतथदधनपफबभमयरलवशषसहऴऩळक़ख़ग़ज़ड़ढ़फ़य़ऱॺॻॼॽॾअआइईउऊऋऌऍऎएऐऑऒओऔॠॡॲऄॵॶॳॴॷॸॹ०१२३४५६७८९़ंँः॒॑ािीुूृॄॅॆेैॉॊोौॢॣॏॎ्।॥॰ऽꣲ!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~₹ - * - sanskrit - - 161 - - 0123456789कखगघङचछजझञटठडढणतथदधनपफबभमयरलवशषसहऴऩळक़ख़ग़ज़ड़ढ़फ़य़ऱॺॻॼॽॾअआइईउऊऋऌऍऎएऐऑऒओऔॠॡॲऄॵॶॳॴॷॸॹ०१२३४५६७८९़ंँः॒॑ािीुूृॄॅॆेैॉॊोौॢॣॏॎ्।॥॰ऽꣲ!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~₹ - * - marathi - - 161 - - 0123456789कखगघङचछजझञटठडढणतथदधनपफबभमयरलवशषसहऴऩळक़ख़ग़ज़ड़ढ़फ़य़ऱॺॻॼॽॾअआइईउऊऋऌऍऎएऐऑऒओऔॠॡॲऄॵॶॳॴॷॸॹ०१२३४५६७८९़ंँः॒॑ािीुूृॄॅॆेैॉॊोौॢॣॏॎ्।॥॰ऽꣲ!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~₹ - * - nepali - - 161 - - 0123456789कखगघङचछजझञटठडढणतथदधनपफबभमयरलवशषसहऴऩळक़ख़ग़ज़ड़ढ़फ़य़ऱॺॻॼॽॾअआइईउऊऋऌऍऎएऐऑऒओऔॠॡॲऄॵॶॳॴॷॸॹ०१२३४५६७८९़ंँः॒॑ािीुूृॄॅॆेैॉॊोौॢॣॏॎ्।॥॰ऽꣲ!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~₹ - * - gujarati - - 132 - - 0123456789કખગઘઙચછજઝઞટઠડઢણતથદધનપફબભમયરલળવશષસહઅઆઇઈઉઊઋઌઍએઐઑઓઔ૦૧૨૩૪૫૬૭૮૯ઁંઃ઼ાિીુૂૃૄૅેૈૉોૌૢૣૺૻૼ૽૾૿્ઽ॥!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~ૐ૰૱₹ - * - bengali - - 127 - - 0123456789কখগঘঙচছজঝঞটঠডঢণতথদধনপফবভমযরলশষসহড়ঢ়য়ৰৱৼঅআইঈউঊঋঌএঐওঔৠৡ০১২৩৪৫৬৭৮৯ািীুূৃেৈোৌৗ্ঽৎ৽৺৻!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~ঁংঃ়৳₹ - * - tamil - - 113 - - 0123456789ஜஶஷஸஹகஙசஞடணதநபமயரலவழளறனஅஆஇஈஉஊஎஏஐஒஓஔ௦௧௨௩௪௫௬௭௮௯ாிீுூெேைொோௌ்௰௱௲!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~௳௴௵௶௷௸௹௺ஃௐ₹ - * - telugu - - 129 - - 0123456789కఖగఘఙచఛజఝఞటఠడఢణతథదధనపఫబభమయరఱలళవశషసహఴఅఆఇఈఉఊఋఌఎఏఐఒఓఔౠౡ౦౧౨౩౪౫౬౭౮౯౸౹౺౻ాిీుూృౄెేైొోౌౢౣ్ఽ!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~ఁంః₹ - * - kannada - - 124 - - 0123456789ಕಖಗಘಙಚಛಜಝಞಟಠಡಢಣತಥದಧನಪಫಬಭಮಯರಲವಶಷಸಹಳಅಆಇಈಉಊಋೠಌೡಎಏಐಒಓಔ೦೧೨೩೪೫೬೭೮೯ಾಿೀುೂೃೄೆೇೈೊೋೌ್।॥ೱೲ!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~ಂಃಁ₹ - * - sinhala - - 129 - - 0123456789කඛගඝඞඟචඡජඣඤඥඦටඨඩඪණඬතථදධනඳපඵබභමඹයරලවශෂසහළෆඅආඇඈඉඊඋඌඍඎඏඐඑඒඓඔඕඖ෦෧෨෩෪෫෬෭෮෯ාැෑිීුූෙේෛොෝෞ්෴!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~ංඃ₹ - * - malayalam - - 132 - - 0123456789ൺൻർൽൾൿകഖഗഘങചഛജഝഞടഠഡഢണതഥദധനപഫബഭമയരറലളഴവശഷസഹഅആഇഈഉഊഋൠഌൡഎഏഐഒഓഔ൦൧൨൩൪൫൬൭൮൯ാിീുൂൃൄൢൣെേൈൊോൌ്!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~ഃ൹ഽ൏ം₹ - * - punjabi - - 122 - - 0123456789ਕਖਗਘਙਚਛਜਝਞਟਠਡਢਣਤਥਦਧਨਪਫਬਭਮਯਰਲਵਸ਼ਸਹਖ਼ਗ਼ਜ਼ਫ਼ੜਲ਼ਅਆਇਈਉਊਏਐਓਔੲੳ੦੧੨੩੪੫੬੭੮੯ਂ਼ਾਿੀੁੂੇੈੋੌੑੰੱੵ੍।॥!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~ੴ₹ - * - odia - - 131 - - 0123456789କଖଗଘଙଚଛଜଝଞଟଠଡଢଣତଥଦଧନପଫବଭମଯରଲଳଵଶଷସହୟୱଡ଼ଢ଼ଅଆଇଈଉଊଋଌଏଐଓଔୡୠ୦୧୨୩୪୫୬୭୮୯୲୳୴୵୶୷ାିୀୁୂୃୄେୈୋୌୢୣ୍ଽ!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~ଂଃଁ଼୰₹ - * - khmer - - 144 - - 0123456789កខគឃងចឆជឈញដឋឌឍណតថទធនបផពភមយរលវឝឞសហឡអឣឤឥឦឧឨឩឪឫឬឭឮឯឰឱឲឳ០១២៣៤៥៦៧៨៩ាិីឹឺុូួើឿៀេែៃោៅ្ំះៈ៉៊់៌៍៎៏័៑៓៝។៕៖៘៙៚ៗៜ!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~៛ - * - armenian - - 131 - - ԱԲԳԴԵԶԷԸԹԺԻԼԽԾԿՀՁՂՃՄՅՆՇՈՉՊՋՌՍՎՏՐՑՒՓՔՕՖՙՠաբգդեզէըթժիլխծկհձղճմյնշոչպջռսվտրցւփքօֆևֈ0123456789!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~՚՛՜՝՞՟։֊֏ - * - sudanese - - 106 - - 0123456789᮰᮱᮲᮳᮴᮵᮶᮷᮸᮹ᮊᮋᮌᮍᮎᮏᮐᮑᮒᮓᮔᮕᮖᮗᮘᮙᮚᮛᮜᮝᮞᮟᮠᮮᮯᮺᮻᮼᮽᮾᮿᮃᮄᮅᮆᮇᮈᮉᮀᮁᮂᮡᮢᮣᮤᮥᮦᮧᮨᮩ᮪᮫ᮬᮭ!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~ - * - thai - - 129 - - 0123456789๐๑๒๓๔๕๖๗๘๙!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~๏๚๛ๆฯกขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮะาำเแโใไๅัิีึืฺุู็่้๊๋์ํ๎฿ - * - lao - - 124 - - 0123456789໐໑໒໓໔໕໖໗໘໙!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~ໆໞໟຯກຂຄຆງຈຉຊຌຍຎຏຐຑຒຓດຕຖທຘນບປຜຝພຟຠມຢຣລວຨຩສຫຬອຮະາຳຽເແໂໃໄໜໝັິີຶື຺ຸູົຼ່້໊໋໌ໍ - * - burmese - - 162 - - 0123456789၀၁၂၃၄၅၆၇၈၉႐႑႒႓႔႕႖႗႘႙ကခဂဃငစဆဇဈဉညဋဌဍဎဏတထဒဓနပဖဗဘမယရလဝသဟဠအၐၑၒၓၔၕၚၛၜၝၡၥၦၮၯၰၵၶၷၸၹၺၻၼၽၾၿႀႁႎဣဤဥဦဧဩဪဿ့းံါာိီုူေဲဳဴဵျြွှ္်၊။၌၍၎၏ၤၗ!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~ - * - javanese - - 124 - - 0123456789꧐꧑꧒꧓꧔꧕꧖꧗꧘꧙ꦏꦐꦑꦒꦓꦔꦕꦖꦗꦘꦙꦚꦛꦜꦝꦞꦟꦠꦡꦢꦣꦤꦥꦦꦧꦨꦩꦪꦫꦬꦭꦮꦯꦰꦱꦲꦄꦅꦆꦇꦈꦉꦊꦋꦌꦍꦎꦴꦵꦶꦷꦸꦹꦺꦻꦼꦀꦁꦂꦃ꦳ꦽꦾꦿ꧀꧈꧉꧊꧋꧌꧍ꧏ!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~ - * - georgian - - 177 - - 0123456789ႠႡႢႣႤႥႦႧႨႩႪႫႬႭႮႯႰႱႲႳႴႵႶႷႸႹႺႻႼႽႾႿჀჁჂჃჄჅჇჍაბგდევზთიკლმნოპჟრსტუფქღყშჩცძწჭხჯჰჱჲჳჴჵჶჷჸჹჺჼჽჾჿᲐᲑᲒᲓᲔᲕᲖᲗᲘᲙᲚᲛᲜᲝᲞᲟᲠᲡᲢᲣᲤᲥᲦᲧᲨᲩᲪᲫᲬᲭᲮᲯᲰᲱᲲᲳᲴᲵᲶᲷᲸᲹᲺᲽᲾᲿ!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~჻₾ - * - ethiopic - - 418 - - ሀሁሂሃሄህሆሇለሉሊላሌልሎሏሐሑሒሓሔሕሖሗመሙሚማሜምሞሟሠሡሢሣሤሥሦሧረሩሪራሬርሮሯሰሱሲሳሴስሶሷሸሹሺሻሼሽሾሿቀቁቂቃቄቅቆቇቈቊቋቌቍቐቑቒቓቔቕቖቘቚቛቜቝበቡቢባቤብቦቧቨቩቪቫቬቭቮቯተቱቲታቴትቶቷቸቹቺቻቼችቾቿኀኁኂኃኄኅኆኇኈኊኋኌኍነኑኒናኔንኖኗኘኙኚኛኜኝኞኟአኡኢኣኤእኦኧከኩኪካኬክኮኯኰኲኳኴኵኸኹኺኻኼኽኾዀዂዃዄዅወዉዊዋዌውዎዏዐዑዒዓዔዕዖዘዙዚዛዜዝዞዟዠዡዢዣዤዥዦዧየዩዪያዬይዮዯደዱዲዳዴድዶዷዸዹዺዻዼዽዾዿጀጁጂጃጄጅጆጇገጉጊጋጌግጎጏጐጒጓጔጕጘጙጚጛጜጝጞጟጠጡጢጣጤጥጦጧጨጩጪጫጬጭጮጯጰጱጲጳጴጵጶጷጸጹጺጻጼጽጾጿፀፁፂፃፄፅፆፇፈፉፊፋፌፍፎፏፐፑፒፓፔፕፖፗፘፙፚᎀᎁᎂᎃᎄᎅᎆᎇᎈᎉᎊᎋᎌᎍᎎᎏ፩፪፫፬፭፮፯፰፱፲፳፴፵፶፷፸፹፺፻፼0123456789፠፡።፣፤፥፦፧፨!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~£€¥¢฿ - * - japanese - - 2383 - - 0123456789ぁあぃいぅうぇえぉおかがきぎくぐけげこごさざしじすずせぜそぞただちぢっつづてでとどなにぬねのはばぱひびぴふぶぷへべぺほぼぽまみむめもゃやゅゆょよらりるれろゎわゐゑをんゔゕゖゝゞゟァアィイゥウェエォオカガキギクグケゲコゴサザシジスズセゼソゾタダチヂッツヅテデトドナニヌネノハバパヒビピフブプヘベペホボポマミムメモャヤュユョヨラリルレロヮワヰヱヲンヴヵヶヷヸヹヺーヽヾヿ亜哀挨愛曖悪握圧扱宛嵐安案暗以衣位囲医依委威為畏胃尉異移萎偉椅彙意違維慰遺緯域育一壱逸茨芋引印因咽姻員院淫陰飲隠韻右宇羽雨唄鬱畝浦運雲永泳英映栄営詠影鋭衛易疫益液駅悦越謁閲円延沿炎怨宴媛援園煙猿遠鉛塩演縁艶汚王凹央応往押旺欧殴桜翁奥横岡屋億憶臆虞乙俺卸音恩温穏下化火加可仮何花佳価果河苛科架夏家荷華菓貨渦過嫁暇禍靴寡歌箇稼課蚊牙瓦我画芽賀雅餓介回灰会快戒改怪拐悔海界皆械絵開階塊楷解潰壊懐諧貝外劾害崖涯街慨蓋該概骸垣柿各角拡革格核殻郭覚較隔閣確獲嚇穫学岳楽額顎掛潟括活喝渇割葛滑褐轄且株釜鎌刈干刊甘汗缶完肝官冠巻看陥乾勘患貫寒喚堪換敢棺款間閑勧寛幹感漢慣管関歓監緩憾還館環簡観韓艦鑑丸含岸岩玩眼頑顔願企伎危机気岐希忌汽奇祈季紀軌既記起飢鬼帰基寄規亀喜幾揮期棋貴棄毀旗器畿輝機騎技宜偽欺義疑儀戯擬犠議菊吉喫詰却客脚逆虐九久及弓丘旧休吸朽臼求究泣急級糾宮救球給嗅窮牛去巨居拒拠挙虚許距魚御漁凶共叫狂京享供協況峡挟狭恐恭胸脅強教郷境橋矯鏡競響驚仰暁業凝曲局極玉巾斤均近金菌勤琴筋僅禁緊錦謹襟吟銀区句苦駆具惧愚空偶遇隅串屈掘窟熊繰君訓勲薫軍郡群兄刑形系径茎係型契計恵啓掲渓経蛍敬景軽傾携継詣慶憬稽憩警鶏芸迎鯨隙劇撃激桁欠穴血決結傑潔月犬件見券肩建研県倹兼剣拳軒健険圏堅検嫌献絹遣権憲賢謙鍵繭顕験懸元幻玄言弦限原現舷減源厳己戸古呼固股虎孤弧故枯個庫湖雇誇鼓錮顧五互午呉後娯悟碁語誤護口工公勾孔功巧広甲交光向后好江考行坑孝抗攻更効幸拘肯侯厚恒洪皇紅荒郊香候校耕航貢降高康控梗黄喉慌港硬絞項溝鉱構綱酵稿興衡鋼講購乞号合拷剛傲豪克告谷刻国黒穀酷獄骨駒込頃今困昆恨根婚混痕紺魂墾懇左佐沙査砂唆差詐鎖座挫才再災妻采砕宰栽彩採済祭斎細菜最裁債催塞歳載際埼在材剤財罪崎作削昨柵索策酢搾錯咲冊札刷刹拶殺察撮擦雑皿三山参桟蚕惨産傘散算酸賛残斬暫士子支止氏仕史司四市矢旨死糸至伺志私使刺始姉枝祉肢姿思指施師恣紙脂視紫詞歯嗣試詩資飼誌雌摯賜諮示字寺次耳自似児事侍治持時滋慈辞磁餌璽鹿式識軸七叱失室疾執湿嫉漆質実芝写社車舎者射捨赦斜煮遮謝邪蛇尺借酌釈爵若弱寂手主守朱取狩首殊珠酒腫種趣寿受呪授需儒樹収囚州舟秀周宗拾秋臭修袖終羞習週就衆集愁酬醜蹴襲十汁充住柔重従渋銃獣縦叔祝宿淑粛縮塾熟出述術俊春瞬旬巡盾准殉純循順準潤遵処初所書庶暑署緒諸女如助序叙徐除小升少召匠床抄肖尚招承昇松沼昭宵将消症祥称笑唱商渉章紹訟勝掌晶焼焦硝粧詔証象傷奨照詳彰障憧衝賞償礁鐘上丈冗条状乗城浄剰常情場畳蒸縄壌嬢錠譲醸色拭食植殖飾触嘱織職辱尻心申伸臣芯身辛侵信津神唇娠振浸真針深紳進森診寝慎新審震薪親人刃仁尽迅甚陣尋腎須図水吹垂炊帥粋衰推酔遂睡穂随髄枢崇数据杉裾寸瀬是井世正生成西声制姓征性青斉政星牲省凄逝清盛婿晴勢聖誠精製誓静請整醒税夕斥石赤昔析席脊隻惜戚責跡積績籍切折拙窃接設雪摂節説舌絶千川仙占先宣専泉浅洗染扇栓旋船戦煎羨腺詮践箋銭潜線遷選薦繊鮮全前善然禅漸膳繕狙阻祖租素措粗組疎訴塑遡礎双壮早争走奏相荘草送倉捜挿桑巣掃曹曽爽窓創喪痩葬装僧想層総遭槽踪操燥霜騒藻造像増憎蔵贈臓即束足促則息捉速側測俗族属賊続卒率存村孫尊損遜他多汰打妥唾堕惰駄太対体耐待怠胎退帯泰堆袋逮替貸隊滞態戴大代台第題滝宅択沢卓拓託濯諾濁但達脱奪棚誰丹旦担単炭胆探淡短嘆端綻誕鍛団男段断弾暖談壇地池知値恥致遅痴稚置緻竹畜逐蓄築秩窒茶着嫡中仲虫沖宙忠抽注昼柱衷酎鋳駐著貯丁弔庁兆町長挑帳張彫眺釣頂鳥朝貼超腸跳徴嘲潮澄調聴懲直勅捗沈珍朕陳賃鎮追椎墜通痛塚漬坪爪鶴低呈廷弟定底抵邸亭貞帝訂庭逓停偵堤提程艇締諦泥的笛摘滴適敵溺迭哲鉄徹撤天典店点展添転塡田伝殿電斗吐妬徒途都渡塗賭土奴努度怒刀冬灯当投豆東到逃倒凍唐島桃討透党悼盗陶塔搭棟湯痘登答等筒統稲踏糖頭謄藤闘騰同洞胴動堂童道働銅導瞳峠匿特得督徳篤毒独読栃凸突届屯豚頓貪鈍曇丼那奈内梨謎鍋南軟難二尼弐匂肉虹日入乳尿任妊忍認寧熱年念捻粘燃悩納能脳農濃把波派破覇馬婆罵拝杯背肺俳配排敗廃輩売倍梅培陪媒買賠白伯拍泊迫剝舶博薄麦漠縛爆箱箸畑肌八鉢発髪伐抜罰閥反半氾犯帆汎伴判坂阪板版班畔般販斑飯搬煩頒範繁藩晩番蛮盤比皮妃否批彼披肥非卑飛疲秘被悲扉費碑罷避尾眉美備微鼻膝肘匹必泌筆姫百氷表俵票評漂標苗秒病描猫品浜貧賓頻敏瓶不夫父付布扶府怖阜附訃負赴浮婦符富普腐敷膚賦譜侮武部舞封風伏服副幅復福腹複覆払沸仏物粉紛雰噴墳憤奮分文聞丙平兵併並柄陛閉塀幣弊蔽餅米壁璧癖別蔑片辺返変偏遍編弁便勉歩保哺捕補舗母募墓慕暮簿方包芳邦奉宝抱放法泡胞俸倣峰砲崩訪報蜂豊飽褒縫亡乏忙坊妨忘防房肪某冒剖紡望傍帽棒貿貌暴膨謀頰北木朴牧睦僕墨撲没勃堀本奔翻凡盆麻摩磨魔毎妹枚昧埋幕膜枕又末抹万満慢漫未味魅岬密蜜脈妙民眠矛務無夢霧娘名命明迷冥盟銘鳴滅免面綿麺茂模毛妄盲耗猛網目黙門紋問冶夜野弥厄役約訳薬躍闇由油喩愉諭輸癒唯友有勇幽悠郵湧猶裕遊雄誘憂融優与予余誉預幼用羊妖洋要容庸揚揺葉陽溶腰様瘍踊窯養擁謡曜抑沃浴欲翌翼拉裸羅来雷頼絡落酪辣乱卵覧濫藍欄吏利里理痢裏履璃離陸立律慄略柳流留竜粒隆硫侶旅虜慮了両良料涼猟陵量僚領寮療瞭糧力緑林厘倫輪隣臨瑠涙累塁類令礼冷励戻例鈴零霊隷齢麗暦歴列劣烈裂恋連廉練錬呂炉賂路露老労弄郎朗浪廊楼漏籠六録麓論和話賄脇惑枠湾腕!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~。・〜°—、「」『』【】゛》《〉〈£€¥¢฿ - * - korean - - 11237 - - 0123456789가각갂갃간갅갆갇갈갉갊갋갌갍갎갏감갑값갓갔강갖갗갘같갚갛개객갞갟갠갡갢갣갤갥갦갧갨갩갪갫갬갭갮갯갰갱갲갳갴갵갶갷갸갹갺갻갼갽갾갿걀걁걂걃걄걅걆걇걈걉걊걋걌걍걎걏걐걑걒걓걔걕걖걗걘걙걚걛걜걝걞걟걠걡걢걣걤걥걦걧걨걩걪걫걬걭걮걯거걱걲걳건걵걶걷걸걹걺걻걼걽걾걿검겁겂것겄겅겆겇겈겉겊겋게겍겎겏겐겑겒겓겔겕겖겗겘겙겚겛겜겝겞겟겠겡겢겣겤겥겦겧겨격겪겫견겭겮겯결겱겲겳겴겵겶겷겸겹겺겻겼경겾겿곀곁곂곃계곅곆곇곈곉곊곋곌곍곎곏곐곑곒곓곔곕곖곗곘곙곚곛곜곝곞곟고곡곢곣곤곥곦곧골곩곪곫곬곭곮곯곰곱곲곳곴공곶곷곸곹곺곻과곽곾곿관괁괂괃괄괅괆괇괈괉괊괋괌괍괎괏괐광괒괓괔괕괖괗괘괙괚괛괜괝괞괟괠괡괢괣괤괥괦괧괨괩괪괫괬괭괮괯괰괱괲괳괴괵괶괷괸괹괺괻괼괽괾괿굀굁굂굃굄굅굆굇굈굉굊굋굌굍굎굏교굑굒굓굔굕굖굗굘굙굚굛굜굝굞굟굠굡굢굣굤굥굦굧굨굩굪굫구국굮굯군굱굲굳굴굵굶굷굸굹굺굻굼굽굾굿궀궁궂궃궄궅궆궇궈궉궊궋권궍궎궏궐궑궒궓궔궕궖궗궘궙궚궛궜궝궞궟궠궡궢궣궤궥궦궧궨궩궪궫궬궭궮궯궰궱궲궳궴궵궶궷궸궹궺궻궼궽궾궿귀귁귂귃귄귅귆귇귈귉귊귋귌귍귎귏귐귑귒귓귔귕귖귗귘귙귚귛규귝귞귟균귡귢귣귤귥귦귧귨귩귪귫귬귭귮귯귰귱귲귳귴귵귶귷그극귺귻근귽귾귿글긁긂긃긄긅긆긇금급긊긋긌긍긎긏긐긑긒긓긔긕긖긗긘긙긚긛긜긝긞긟긠긡긢긣긤긥긦긧긨긩긪긫긬긭긮긯기긱긲긳긴긵긶긷길긹긺긻긼긽긾긿김깁깂깃깄깅깆깇깈깉깊깋까깍깎깏깐깑깒깓깔깕깖깗깘깙깚깛깜깝깞깟깠깡깢깣깤깥깦깧깨깩깪깫깬깭깮깯깰깱깲깳깴깵깶깷깸깹깺깻깼깽깾깿꺀꺁꺂꺃꺄꺅꺆꺇꺈꺉꺊꺋꺌꺍꺎꺏꺐꺑꺒꺓꺔꺕꺖꺗꺘꺙꺚꺛꺜꺝꺞꺟꺠꺡꺢꺣꺤꺥꺦꺧꺨꺩꺪꺫꺬꺭꺮꺯꺰꺱꺲꺳꺴꺵꺶꺷꺸꺹꺺꺻꺼꺽꺾꺿껀껁껂껃껄껅껆껇껈껉껊껋껌껍껎껏껐껑껒껓껔껕껖껗께껙껚껛껜껝껞껟껠껡껢껣껤껥껦껧껨껩껪껫껬껭껮껯껰껱껲껳껴껵껶껷껸껹껺껻껼껽껾껿꼀꼁꼂꼃꼄꼅꼆꼇꼈꼉꼊꼋꼌꼍꼎꼏꼐꼑꼒꼓꼔꼕꼖꼗꼘꼙꼚꼛꼜꼝꼞꼟꼠꼡꼢꼣꼤꼥꼦꼧꼨꼩꼪꼫꼬꼭꼮꼯꼰꼱꼲꼳꼴꼵꼶꼷꼸꼹꼺꼻꼼꼽꼾꼿꽀꽁꽂꽃꽄꽅꽆꽇꽈꽉꽊꽋꽌꽍꽎꽏꽐꽑꽒꽓꽔꽕꽖꽗꽘꽙꽚꽛꽜꽝꽞꽟꽠꽡꽢꽣꽤꽥꽦꽧꽨꽩꽪꽫꽬꽭꽮꽯꽰꽱꽲꽳꽴꽵꽶꽷꽸꽹꽺꽻꽼꽽꽾꽿꾀꾁꾂꾃꾄꾅꾆꾇꾈꾉꾊꾋꾌꾍꾎꾏꾐꾑꾒꾓꾔꾕꾖꾗꾘꾙꾚꾛꾜꾝꾞꾟꾠꾡꾢꾣꾤꾥꾦꾧꾨꾩꾪꾫꾬꾭꾮꾯꾰꾱꾲꾳꾴꾵꾶꾷꾸꾹꾺꾻꾼꾽꾾꾿꿀꿁꿂꿃꿄꿅꿆꿇꿈꿉꿊꿋꿌꿍꿎꿏꿐꿑꿒꿓꿔꿕꿖꿗꿘꿙꿚꿛꿜꿝꿞꿟꿠꿡꿢꿣꿤꿥꿦꿧꿨꿩꿪꿫꿬꿭꿮꿯꿰꿱꿲꿳꿴꿵꿶꿷꿸꿹꿺꿻꿼꿽꿾꿿뀀뀁뀂뀃뀄뀅뀆뀇뀈뀉뀊뀋뀌뀍뀎뀏뀐뀑뀒뀓뀔뀕뀖뀗뀘뀙뀚뀛뀜뀝뀞뀟뀠뀡뀢뀣뀤뀥뀦뀧뀨뀩뀪뀫뀬뀭뀮뀯뀰뀱뀲뀳뀴뀵뀶뀷뀸뀹뀺뀻뀼뀽뀾뀿끀끁끂끃끄끅끆끇끈끉끊끋끌끍끎끏끐끑끒끓끔끕끖끗끘끙끚끛끜끝끞끟끠끡끢끣끤끥끦끧끨끩끪끫끬끭끮끯끰끱끲끳끴끵끶끷끸끹끺끻끼끽끾끿낀낁낂낃낄낅낆낇낈낉낊낋낌낍낎낏낐낑낒낓낔낕낖낗나낙낚낛난낝낞낟날낡낢낣낤낥낦낧남납낪낫났낭낮낯낰낱낲낳내낵낶낷낸낹낺낻낼낽낾낿냀냁냂냃냄냅냆냇냈냉냊냋냌냍냎냏냐냑냒냓냔냕냖냗냘냙냚냛냜냝냞냟냠냡냢냣냤냥냦냧냨냩냪냫냬냭냮냯냰냱냲냳냴냵냶냷냸냹냺냻냼냽냾냿넀넁넂넃넄넅넆넇너넉넊넋넌넍넎넏널넑넒넓넔넕넖넗넘넙넚넛넜넝넞넟넠넡넢넣네넥넦넧넨넩넪넫넬넭넮넯넰넱넲넳넴넵넶넷넸넹넺넻넼넽넾넿녀녁녂녃년녅녆녇녈녉녊녋녌녍녎녏념녑녒녓녔녕녖녗녘녙녚녛녜녝녞녟녠녡녢녣녤녥녦녧녨녩녪녫녬녭녮녯녰녱녲녳녴녵녶녷노녹녺녻논녽녾녿놀놁놂놃놄놅놆놇놈놉놊놋놌농놎놏놐놑높놓놔놕놖놗놘놙놚놛놜놝놞놟놠놡놢놣놤놥놦놧놨놩놪놫놬놭놮놯놰놱놲놳놴놵놶놷놸놹놺놻놼놽놾놿뇀뇁뇂뇃뇄뇅뇆뇇뇈뇉뇊뇋뇌뇍뇎뇏뇐뇑뇒뇓뇔뇕뇖뇗뇘뇙뇚뇛뇜뇝뇞뇟뇠뇡뇢뇣뇤뇥뇦뇧뇨뇩뇪뇫뇬뇭뇮뇯뇰뇱뇲뇳뇴뇵뇶뇷뇸뇹뇺뇻뇼뇽뇾뇿눀눁눂눃누눅눆눇눈눉눊눋눌눍눎눏눐눑눒눓눔눕눖눗눘눙눚눛눜눝눞눟눠눡눢눣눤눥눦눧눨눩눪눫눬눭눮눯눰눱눲눳눴눵눶눷눸눹눺눻눼눽눾눿뉀뉁뉂뉃뉄뉅뉆뉇뉈뉉뉊뉋뉌뉍뉎뉏뉐뉑뉒뉓뉔뉕뉖뉗뉘뉙뉚뉛뉜뉝뉞뉟뉠뉡뉢뉣뉤뉥뉦뉧뉨뉩뉪뉫뉬뉭뉮뉯뉰뉱뉲뉳뉴뉵뉶뉷뉸뉹뉺뉻뉼뉽뉾뉿늀늁늂늃늄늅늆늇늈늉늊늋늌늍늎늏느늑늒늓는늕늖늗늘늙늚늛늜늝늞늟늠늡늢늣늤능늦늧늨늩늪늫늬늭늮늯늰늱늲늳늴늵늶늷늸늹늺늻늼늽늾늿닀닁닂닃닄닅닆닇니닉닊닋닌닍닎닏닐닑닒닓닔닕닖닗님닙닚닛닜닝닞닟닠닡닢닣다닥닦닧단닩닪닫달닭닮닯닰닱닲닳담답닶닷닸당닺닻닼닽닾닿대댁댂댃댄댅댆댇댈댉댊댋댌댍댎댏댐댑댒댓댔댕댖댗댘댙댚댛댜댝댞댟댠댡댢댣댤댥댦댧댨댩댪댫댬댭댮댯댰댱댲댳댴댵댶댷댸댹댺댻댼댽댾댿덀덁덂덃덄덅덆덇덈덉덊덋덌덍덎덏덐덑덒덓더덕덖덗던덙덚덛덜덝덞덟덠덡덢덣덤덥덦덧덨덩덪덫덬덭덮덯데덱덲덳덴덵덶덷델덹덺덻덼덽덾덿뎀뎁뎂뎃뎄뎅뎆뎇뎈뎉뎊뎋뎌뎍뎎뎏뎐뎑뎒뎓뎔뎕뎖뎗뎘뎙뎚뎛뎜뎝뎞뎟뎠뎡뎢뎣뎤뎥뎦뎧뎨뎩뎪뎫뎬뎭뎮뎯뎰뎱뎲뎳뎴뎵뎶뎷뎸뎹뎺뎻뎼뎽뎾뎿돀돁돂돃도독돆돇돈돉돊돋돌돍돎돏돐돑돒돓돔돕돖돗돘동돚돛돜돝돞돟돠돡돢돣돤돥돦돧돨돩돪돫돬돭돮돯돰돱돲돳돴돵돶돷돸돹돺돻돼돽돾돿됀됁됂됃됄됅됆됇됈됉됊됋됌됍됎됏됐됑됒됓됔됕됖됗되됙됚됛된됝됞됟될됡됢됣됤됥됦됧됨됩됪됫됬됭됮됯됰됱됲됳됴됵됶됷됸됹됺됻됼됽됾됿둀둁둂둃둄둅둆둇둈둉둊둋둌둍둎둏두둑둒둓둔둕둖둗둘둙둚둛둜둝둞둟둠둡둢둣둤둥둦둧둨둩둪둫둬둭둮둯둰둱둲둳둴둵둶둷둸둹둺둻둼둽둾둿뒀뒁뒂뒃뒄뒅뒆뒇뒈뒉뒊뒋뒌뒍뒎뒏뒐뒑뒒뒓뒔뒕뒖뒗뒘뒙뒚뒛뒜뒝뒞뒟뒠뒡뒢뒣뒤뒥뒦뒧뒨뒩뒪뒫뒬뒭뒮뒯뒰뒱뒲뒳뒴뒵뒶뒷뒸뒹뒺뒻뒼뒽뒾뒿듀듁듂듃듄듅듆듇듈듉듊듋듌듍듎듏듐듑듒듓듔듕듖듗듘듙듚듛드득듞듟든듡듢듣들듥듦듧듨듩듪듫듬듭듮듯듰등듲듳듴듵듶듷듸듹듺듻듼듽듾듿딀딁딂딃딄딅딆딇딈딉딊딋딌딍딎딏딐딑딒딓디딕딖딗딘딙딚딛딜딝딞딟딠딡딢딣딤딥딦딧딨딩딪딫딬딭딮딯따딱딲딳딴딵딶딷딸딹딺딻딼딽딾딿땀땁땂땃땄땅땆땇땈땉땊땋때땍땎땏땐땑땒땓땔땕땖땗땘땙땚땛땜땝땞땟땠땡땢땣땤땥땦땧땨땩땪땫땬땭땮땯땰땱땲땳땴땵땶땷땸땹땺땻땼땽땾땿떀떁떂떃떄떅떆떇떈떉떊떋떌떍떎떏떐떑떒떓떔떕떖떗떘떙떚떛떜떝떞떟떠떡떢떣떤떥떦떧떨떩떪떫떬떭떮떯떰떱떲떳떴떵떶떷떸떹떺떻떼떽떾떿뗀뗁뗂뗃뗄뗅뗆뗇뗈뗉뗊뗋뗌뗍뗎뗏뗐뗑뗒뗓뗔뗕뗖뗗뗘뗙뗚뗛뗜뗝뗞뗟뗠뗡뗢뗣뗤뗥뗦뗧뗨뗩뗪뗫뗬뗭뗮뗯뗰뗱뗲뗳뗴뗵뗶뗷뗸뗹뗺뗻뗼뗽뗾뗿똀똁똂똃똄똅똆똇똈똉똊똋똌똍똎똏또똑똒똓똔똕똖똗똘똙똚똛똜똝똞똟똠똡똢똣똤똥똦똧똨똩똪똫똬똭똮똯똰똱똲똳똴똵똶똷똸똹똺똻똼똽똾똿뙀뙁뙂뙃뙄뙅뙆뙇뙈뙉뙊뙋뙌뙍뙎뙏뙐뙑뙒뙓뙔뙕뙖뙗뙘뙙뙚뙛뙜뙝뙞뙟뙠뙡뙢뙣뙤뙥뙦뙧뙨뙩뙪뙫뙬뙭뙮뙯뙰뙱뙲뙳뙴뙵뙶뙷뙸뙹뙺뙻뙼뙽뙾뙿뚀뚁뚂뚃뚄뚅뚆뚇뚈뚉뚊뚋뚌뚍뚎뚏뚐뚑뚒뚓뚔뚕뚖뚗뚘뚙뚚뚛뚜뚝뚞뚟뚠뚡뚢뚣뚤뚥뚦뚧뚨뚩뚪뚫뚬뚭뚮뚯뚰뚱뚲뚳뚴뚵뚶뚷뚸뚹뚺뚻뚼뚽뚾뚿뛀뛁뛂뛃뛄뛅뛆뛇뛈뛉뛊뛋뛌뛍뛎뛏뛐뛑뛒뛓뛔뛕뛖뛗뛘뛙뛚뛛뛜뛝뛞뛟뛠뛡뛢뛣뛤뛥뛦뛧뛨뛩뛪뛫뛬뛭뛮뛯뛰뛱뛲뛳뛴뛵뛶뛷뛸뛹뛺뛻뛼뛽뛾뛿뜀뜁뜂뜃뜄뜅뜆뜇뜈뜉뜊뜋뜌뜍뜎뜏뜐뜑뜒뜓뜔뜕뜖뜗뜘뜙뜚뜛뜜뜝뜞뜟뜠뜡뜢뜣뜤뜥뜦뜧뜨뜩뜪뜫뜬뜭뜮뜯뜰뜱뜲뜳뜴뜵뜶뜷뜸뜹뜺뜻뜼뜽뜾뜿띀띁띂띃띄띅띆띇띈띉띊띋띌띍띎띏띐띑띒띓띔띕띖띗띘띙띚띛띜띝띞띟띠띡띢띣띤띥띦띧띨띩띪띫띬띭띮띯띰띱띲띳띴띵띶띷띸띹띺띻라락띾띿란랁랂랃랄랅랆랇랈랉랊랋람랍랎랏랐랑랒랓랔랕랖랗래랙랚랛랜랝랞랟랠랡랢랣랤랥랦랧램랩랪랫랬랭랮랯랰랱랲랳랴략랶랷랸랹랺랻랼랽랾랿럀럁럂럃럄럅럆럇럈량럊럋럌럍럎럏럐럑럒럓럔럕럖럗럘럙럚럛럜럝럞럟럠럡럢럣럤럥럦럧럨럩럪럫러럭럮럯런럱럲럳럴럵럶럷럸럹럺럻럼럽럾럿렀렁렂렃렄렅렆렇레렉렊렋렌렍렎렏렐렑렒렓렔렕렖렗렘렙렚렛렜렝렞렟렠렡렢렣려력렦렧련렩렪렫렬렭렮렯렰렱렲렳렴렵렶렷렸령렺렻렼렽렾렿례롁롂롃롄롅롆롇롈롉롊롋롌롍롎롏롐롑롒롓롔롕롖롗롘롙롚롛로록롞롟론롡롢롣롤롥롦롧롨롩롪롫롬롭롮롯롰롱롲롳롴롵롶롷롸롹롺롻롼롽롾롿뢀뢁뢂뢃뢄뢅뢆뢇뢈뢉뢊뢋뢌뢍뢎뢏뢐뢑뢒뢓뢔뢕뢖뢗뢘뢙뢚뢛뢜뢝뢞뢟뢠뢡뢢뢣뢤뢥뢦뢧뢨뢩뢪뢫뢬뢭뢮뢯뢰뢱뢲뢳뢴뢵뢶뢷뢸뢹뢺뢻뢼뢽뢾뢿룀룁룂룃룄룅룆룇룈룉룊룋료룍룎룏룐룑룒룓룔룕룖룗룘룙룚룛룜룝룞룟룠룡룢룣룤룥룦룧루룩룪룫룬룭룮룯룰룱룲룳룴룵룶룷룸룹룺룻룼룽룾룿뤀뤁뤂뤃뤄뤅뤆뤇뤈뤉뤊뤋뤌뤍뤎뤏뤐뤑뤒뤓뤔뤕뤖뤗뤘뤙뤚뤛뤜뤝뤞뤟뤠뤡뤢뤣뤤뤥뤦뤧뤨뤩뤪뤫뤬뤭뤮뤯뤰뤱뤲뤳뤴뤵뤶뤷뤸뤹뤺뤻뤼뤽뤾뤿륀륁륂륃륄륅륆륇륈륉륊륋륌륍륎륏륐륑륒륓륔륕륖륗류륙륚륛륜륝륞륟률륡륢륣륤륥륦륧륨륩륪륫륬륭륮륯륰륱륲륳르륵륶륷른륹륺륻를륽륾륿릀릁릂릃름릅릆릇릈릉릊릋릌릍릎릏릐릑릒릓릔릕릖릗릘릙릚릛릜릝릞릟릠릡릢릣릤릥릦릧릨릩릪릫리릭릮릯린릱릲릳릴릵릶릷릸릹릺릻림립릾릿맀링맂맃맄맅맆맇마막맊맋만맍많맏말맑맒맓맔맕맖맗맘맙맚맛맜망맞맟맠맡맢맣매맥맦맧맨맩맪맫맬맭맮맯맰맱맲맳맴맵맶맷맸맹맺맻맼맽맾맿먀먁먂먃먄먅먆먇먈먉먊먋먌먍먎먏먐먑먒먓먔먕먖먗먘먙먚먛먜먝먞먟먠먡먢먣먤먥먦먧먨먩먪먫먬먭먮먯먰먱먲먳먴먵먶먷머먹먺먻먼먽먾먿멀멁멂멃멄멅멆멇멈멉멊멋멌멍멎멏멐멑멒멓메멕멖멗멘멙멚멛멜멝멞멟멠멡멢멣멤멥멦멧멨멩멪멫멬멭멮멯며멱멲멳면멵멶멷멸멹멺멻멼멽멾멿몀몁몂몃몄명몆몇몈몉몊몋몌몍몎몏몐몑몒몓몔몕몖몗몘몙몚몛몜몝몞몟몠몡몢몣몤몥몦몧모목몪몫몬몭몮몯몰몱몲몳몴몵몶몷몸몹몺못몼몽몾몿뫀뫁뫂뫃뫄뫅뫆뫇뫈뫉뫊뫋뫌뫍뫎뫏뫐뫑뫒뫓뫔뫕뫖뫗뫘뫙뫚뫛뫜뫝뫞뫟뫠뫡뫢뫣뫤뫥뫦뫧뫨뫩뫪뫫뫬뫭뫮뫯뫰뫱뫲뫳뫴뫵뫶뫷뫸뫹뫺뫻뫼뫽뫾뫿묀묁묂묃묄묅묆묇묈묉묊묋묌묍묎묏묐묑묒묓묔묕묖묗묘묙묚묛묜묝묞묟묠묡묢묣묤묥묦묧묨묩묪묫묬묭묮묯묰묱묲묳무묵묶묷문묹묺묻물묽묾묿뭀뭁뭂뭃뭄뭅뭆뭇뭈뭉뭊뭋뭌뭍뭎뭏뭐뭑뭒뭓뭔뭕뭖뭗뭘뭙뭚뭛뭜뭝뭞뭟뭠뭡뭢뭣뭤뭥뭦뭧뭨뭩뭪뭫뭬뭭뭮뭯뭰뭱뭲뭳뭴뭵뭶뭷뭸뭹뭺뭻뭼뭽뭾뭿뮀뮁뮂뮃뮄뮅뮆뮇뮈뮉뮊뮋뮌뮍뮎뮏뮐뮑뮒뮓뮔뮕뮖뮗뮘뮙뮚뮛뮜뮝뮞뮟뮠뮡뮢뮣뮤뮥뮦뮧뮨뮩뮪뮫뮬뮭뮮뮯뮰뮱뮲뮳뮴뮵뮶뮷뮸뮹뮺뮻뮼뮽뮾뮿므믁믂믃믄믅믆믇믈믉믊믋믌믍믎믏믐믑믒믓믔믕믖믗믘믙믚믛믜믝믞믟믠믡믢믣믤믥믦믧믨믩믪믫믬믭믮믯믰믱믲믳믴믵믶믷미믹믺믻민믽믾믿밀밁밂밃밄밅밆밇밈밉밊밋밌밍밎및밐밑밒밓바박밖밗반밙밚받발밝밞밟밠밡밢밣밤밥밦밧밨방밪밫밬밭밮밯배백밲밳밴밵밶밷밸밹밺밻밼밽밾밿뱀뱁뱂뱃뱄뱅뱆뱇뱈뱉뱊뱋뱌뱍뱎뱏뱐뱑뱒뱓뱔뱕뱖뱗뱘뱙뱚뱛뱜뱝뱞뱟뱠뱡뱢뱣뱤뱥뱦뱧뱨뱩뱪뱫뱬뱭뱮뱯뱰뱱뱲뱳뱴뱵뱶뱷뱸뱹뱺뱻뱼뱽뱾뱿벀벁벂벃버벅벆벇번벉벊벋벌벍벎벏벐벑벒벓범법벖벗벘벙벚벛벜벝벞벟베벡벢벣벤벥벦벧벨벩벪벫벬벭벮벯벰벱벲벳벴벵벶벷벸벹벺벻벼벽벾벿변볁볂볃별볅볆볇볈볉볊볋볌볍볎볏볐병볒볓볔볕볖볗볘볙볚볛볜볝볞볟볠볡볢볣볤볥볦볧볨볩볪볫볬볭볮볯볰볱볲볳보복볶볷본볹볺볻볼볽볾볿봀봁봂봃봄봅봆봇봈봉봊봋봌봍봎봏봐봑봒봓봔봕봖봗봘봙봚봛봜봝봞봟봠봡봢봣봤봥봦봧봨봩봪봫봬봭봮봯봰봱봲봳봴봵봶봷봸봹봺봻봼봽봾봿뵀뵁뵂뵃뵄뵅뵆뵇뵈뵉뵊뵋뵌뵍뵎뵏뵐뵑뵒뵓뵔뵕뵖뵗뵘뵙뵚뵛뵜뵝뵞뵟뵠뵡뵢뵣뵤뵥뵦뵧뵨뵩뵪뵫뵬뵭뵮뵯뵰뵱뵲뵳뵴뵵뵶뵷뵸뵹뵺뵻뵼뵽뵾뵿부북붂붃분붅붆붇불붉붊붋붌붍붎붏붐붑붒붓붔붕붖붗붘붙붚붛붜붝붞붟붠붡붢붣붤붥붦붧붨붩붪붫붬붭붮붯붰붱붲붳붴붵붶붷붸붹붺붻붼붽붾붿뷀뷁뷂뷃뷄뷅뷆뷇뷈뷉뷊뷋뷌뷍뷎뷏뷐뷑뷒뷓뷔뷕뷖뷗뷘뷙뷚뷛뷜뷝뷞뷟뷠뷡뷢뷣뷤뷥뷦뷧뷨뷩뷪뷫뷬뷭뷮뷯뷰뷱뷲뷳뷴뷵뷶뷷뷸뷹뷺뷻뷼뷽뷾뷿븀븁븂븃븄븅븆븇븈븉븊븋브븍븎븏븐븑븒븓블븕븖븗븘븙븚븛븜븝븞븟븠븡븢븣븤븥븦븧븨븩븪븫븬븭븮븯븰븱븲븳븴븵븶븷븸븹븺븻븼븽븾븿빀빁빂빃비빅빆빇빈빉빊빋빌빍빎빏빐빑빒빓빔빕빖빗빘빙빚빛빜빝빞빟빠빡빢빣빤빥빦빧빨빩빪빫빬빭빮빯빰빱빲빳빴빵빶빷빸빹빺빻빼빽빾빿뺀뺁뺂뺃뺄뺅뺆뺇뺈뺉뺊뺋뺌뺍뺎뺏뺐뺑뺒뺓뺔뺕뺖뺗뺘뺙뺚뺛뺜뺝뺞뺟뺠뺡뺢뺣뺤뺥뺦뺧뺨뺩뺪뺫뺬뺭뺮뺯뺰뺱뺲뺳뺴뺵뺶뺷뺸뺹뺺뺻뺼뺽뺾뺿뻀뻁뻂뻃뻄뻅뻆뻇뻈뻉뻊뻋뻌뻍뻎뻏뻐뻑뻒뻓뻔뻕뻖뻗뻘뻙뻚뻛뻜뻝뻞뻟뻠뻡뻢뻣뻤뻥뻦뻧뻨뻩뻪뻫뻬뻭뻮뻯뻰뻱뻲뻳뻴뻵뻶뻷뻸뻹뻺뻻뻼뻽뻾뻿뼀뼁뼂뼃뼄뼅뼆뼇뼈뼉뼊뼋뼌뼍뼎뼏뼐뼑뼒뼓뼔뼕뼖뼗뼘뼙뼚뼛뼜뼝뼞뼟뼠뼡뼢뼣뼤뼥뼦뼧뼨뼩뼪뼫뼬뼭뼮뼯뼰뼱뼲뼳뼴뼵뼶뼷뼸뼹뼺뼻뼼뼽뼾뼿뽀뽁뽂뽃뽄뽅뽆뽇뽈뽉뽊뽋뽌뽍뽎뽏뽐뽑뽒뽓뽔뽕뽖뽗뽘뽙뽚뽛뽜뽝뽞뽟뽠뽡뽢뽣뽤뽥뽦뽧뽨뽩뽪뽫뽬뽭뽮뽯뽰뽱뽲뽳뽴뽵뽶뽷뽸뽹뽺뽻뽼뽽뽾뽿뾀뾁뾂뾃뾄뾅뾆뾇뾈뾉뾊뾋뾌뾍뾎뾏뾐뾑뾒뾓뾔뾕뾖뾗뾘뾙뾚뾛뾜뾝뾞뾟뾠뾡뾢뾣뾤뾥뾦뾧뾨뾩뾪뾫뾬뾭뾮뾯뾰뾱뾲뾳뾴뾵뾶뾷뾸뾹뾺뾻뾼뾽뾾뾿뿀뿁뿂뿃뿄뿅뿆뿇뿈뿉뿊뿋뿌뿍뿎뿏뿐뿑뿒뿓뿔뿕뿖뿗뿘뿙뿚뿛뿜뿝뿞뿟뿠뿡뿢뿣뿤뿥뿦뿧뿨뿩뿪뿫뿬뿭뿮뿯뿰뿱뿲뿳뿴뿵뿶뿷뿸뿹뿺뿻뿼뿽뿾뿿쀀쀁쀂쀃쀄쀅쀆쀇쀈쀉쀊쀋쀌쀍쀎쀏쀐쀑쀒쀓쀔쀕쀖쀗쀘쀙쀚쀛쀜쀝쀞쀟쀠쀡쀢쀣쀤쀥쀦쀧쀨쀩쀪쀫쀬쀭쀮쀯쀰쀱쀲쀳쀴쀵쀶쀷쀸쀹쀺쀻쀼쀽쀾쀿쁀쁁쁂쁃쁄쁅쁆쁇쁈쁉쁊쁋쁌쁍쁎쁏쁐쁑쁒쁓쁔쁕쁖쁗쁘쁙쁚쁛쁜쁝쁞쁟쁠쁡쁢쁣쁤쁥쁦쁧쁨쁩쁪쁫쁬쁭쁮쁯쁰쁱쁲쁳쁴쁵쁶쁷쁸쁹쁺쁻쁼쁽쁾쁿삀삁삂삃삄삅삆삇삈삉삊삋삌삍삎삏삐삑삒삓삔삕삖삗삘삙삚삛삜삝삞삟삠삡삢삣삤삥삦삧삨삩삪삫사삭삮삯산삱삲삳살삵삶삷삸삹삺삻삼삽삾삿샀상샂샃샄샅샆샇새색샊샋샌샍샎샏샐샑샒샓샔샕샖샗샘샙샚샛샜생샞샟샠샡샢샣샤샥샦샧샨샩샪샫샬샭샮샯샰샱샲샳샴샵샶샷샸샹샺샻샼샽샾샿섀섁섂섃섄섅섆섇섈섉섊섋섌섍섎섏섐섑섒섓섔섕섖섗섘섙섚섛서석섞섟선섡섢섣설섥섦섧섨섩섪섫섬섭섮섯섰성섲섳섴섵섶섷세섹섺섻센섽섾섿셀셁셂셃셄셅셆셇셈셉셊셋셌셍셎셏셐셑셒셓셔셕셖셗션셙셚셛셜셝셞셟셠셡셢셣셤셥셦셧셨셩셪셫셬셭셮셯셰셱셲셳셴셵셶셷셸셹셺셻셼셽셾셿솀솁솂솃솄솅솆솇솈솉솊솋소속솎솏손솑솒솓솔솕솖솗솘솙솚솛솜솝솞솟솠송솢솣솤솥솦솧솨솩솪솫솬솭솮솯솰솱솲솳솴솵솶솷솸솹솺솻솼솽솾솿쇀쇁쇂쇃쇄쇅쇆쇇쇈쇉쇊쇋쇌쇍쇎쇏쇐쇑쇒쇓쇔쇕쇖쇗쇘쇙쇚쇛쇜쇝쇞쇟쇠쇡쇢쇣쇤쇥쇦쇧쇨쇩쇪쇫쇬쇭쇮쇯쇰쇱쇲쇳쇴쇵쇶쇷쇸쇹쇺쇻쇼쇽쇾쇿숀숁숂숃숄숅숆숇숈숉숊숋숌숍숎숏숐숑숒숓숔숕숖숗수숙숚숛순숝숞숟술숡숢숣숤숥숦숧숨숩숪숫숬숭숮숯숰숱숲숳숴숵숶숷숸숹숺숻숼숽숾숿쉀쉁쉂쉃쉄쉅쉆쉇쉈쉉쉊쉋쉌쉍쉎쉏쉐쉑쉒쉓쉔쉕쉖쉗쉘쉙쉚쉛쉜쉝쉞쉟쉠쉡쉢쉣쉤쉥쉦쉧쉨쉩쉪쉫쉬쉭쉮쉯쉰쉱쉲쉳쉴쉵쉶쉷쉸쉹쉺쉻쉼쉽쉾쉿슀슁슂슃슄슅슆슇슈슉슊슋슌슍슎슏슐슑슒슓슔슕슖슗슘슙슚슛슜슝슞슟슠슡슢슣스슥슦슧슨슩슪슫슬슭슮슯슰슱슲슳슴습슶슷슸승슺슻슼슽슾슿싀싁싂싃싄싅싆싇싈싉싊싋싌싍싎싏싐싑싒싓싔싕싖싗싘싙싚싛시식싞싟신싡싢싣실싥싦싧싨싩싪싫심십싮싯싰싱싲싳싴싵싶싷싸싹싺싻싼싽싾싿쌀쌁쌂쌃쌄쌅쌆쌇쌈쌉쌊쌋쌌쌍쌎쌏쌐쌑쌒쌓쌔쌕쌖쌗쌘쌙쌚쌛쌜쌝쌞쌟쌠쌡쌢쌣쌤쌥쌦쌧쌨쌩쌪쌫쌬쌭쌮쌯쌰쌱쌲쌳쌴쌵쌶쌷쌸쌹쌺쌻쌼쌽쌾쌿썀썁썂썃썄썅썆썇썈썉썊썋썌썍썎썏썐썑썒썓썔썕썖썗썘썙썚썛썜썝썞썟썠썡썢썣썤썥썦썧써썩썪썫썬썭썮썯썰썱썲썳썴썵썶썷썸썹썺썻썼썽썾썿쎀쎁쎂쎃쎄쎅쎆쎇쎈쎉쎊쎋쎌쎍쎎쎏쎐쎑쎒쎓쎔쎕쎖쎗쎘쎙쎚쎛쎜쎝쎞쎟쎠쎡쎢쎣쎤쎥쎦쎧쎨쎩쎪쎫쎬쎭쎮쎯쎰쎱쎲쎳쎴쎵쎶쎷쎸쎹쎺쎻쎼쎽쎾쎿쏀쏁쏂쏃쏄쏅쏆쏇쏈쏉쏊쏋쏌쏍쏎쏏쏐쏑쏒쏓쏔쏕쏖쏗쏘쏙쏚쏛쏜쏝쏞쏟쏠쏡쏢쏣쏤쏥쏦쏧쏨쏩쏪쏫쏬쏭쏮쏯쏰쏱쏲쏳쏴쏵쏶쏷쏸쏹쏺쏻쏼쏽쏾쏿쐀쐁쐂쐃쐄쐅쐆쐇쐈쐉쐊쐋쐌쐍쐎쐏쐐쐑쐒쐓쐔쐕쐖쐗쐘쐙쐚쐛쐜쐝쐞쐟쐠쐡쐢쐣쐤쐥쐦쐧쐨쐩쐪쐫쐬쐭쐮쐯쐰쐱쐲쐳쐴쐵쐶쐷쐸쐹쐺쐻쐼쐽쐾쐿쑀쑁쑂쑃쑄쑅쑆쑇쑈쑉쑊쑋쑌쑍쑎쑏쑐쑑쑒쑓쑔쑕쑖쑗쑘쑙쑚쑛쑜쑝쑞쑟쑠쑡쑢쑣쑤쑥쑦쑧쑨쑩쑪쑫쑬쑭쑮쑯쑰쑱쑲쑳쑴쑵쑶쑷쑸쑹쑺쑻쑼쑽쑾쑿쒀쒁쒂쒃쒄쒅쒆쒇쒈쒉쒊쒋쒌쒍쒎쒏쒐쒑쒒쒓쒔쒕쒖쒗쒘쒙쒚쒛쒜쒝쒞쒟쒠쒡쒢쒣쒤쒥쒦쒧쒨쒩쒪쒫쒬쒭쒮쒯쒰쒱쒲쒳쒴쒵쒶쒷쒸쒹쒺쒻쒼쒽쒾쒿쓀쓁쓂쓃쓄쓅쓆쓇쓈쓉쓊쓋쓌쓍쓎쓏쓐쓑쓒쓓쓔쓕쓖쓗쓘쓙쓚쓛쓜쓝쓞쓟쓠쓡쓢쓣쓤쓥쓦쓧쓨쓩쓪쓫쓬쓭쓮쓯쓰쓱쓲쓳쓴쓵쓶쓷쓸쓹쓺쓻쓼쓽쓾쓿씀씁씂씃씄씅씆씇씈씉씊씋씌씍씎씏씐씑씒씓씔씕씖씗씘씙씚씛씜씝씞씟씠씡씢씣씤씥씦씧씨씩씪씫씬씭씮씯씰씱씲씳씴씵씶씷씸씹씺씻씼씽씾씿앀앁앂앃아악앆앇안앉않앋알앍앎앏앐앑앒앓암압앖앗았앙앚앛앜앝앞앟애액앢앣앤앥앦앧앨앩앪앫앬앭앮앯앰앱앲앳앴앵앶앷앸앹앺앻야약앾앿얀얁얂얃얄얅얆얇얈얉얊얋얌얍얎얏얐양얒얓얔얕얖얗얘얙얚얛얜얝얞얟얠얡얢얣얤얥얦얧얨얩얪얫얬얭얮얯얰얱얲얳어억얶얷언얹얺얻얼얽얾얿엀엁엂엃엄업없엇었엉엊엋엌엍엎엏에엑엒엓엔엕엖엗엘엙엚엛엜엝엞엟엠엡엢엣엤엥엦엧엨엩엪엫여역엮엯연엱엲엳열엵엶엷엸엹엺엻염엽엾엿였영옂옃옄옅옆옇예옉옊옋옌옍옎옏옐옑옒옓옔옕옖옗옘옙옚옛옜옝옞옟옠옡옢옣오옥옦옧온옩옪옫올옭옮옯옰옱옲옳옴옵옶옷옸옹옺옻옼옽옾옿와왁왂왃완왅왆왇왈왉왊왋왌왍왎왏왐왑왒왓왔왕왖왗왘왙왚왛왜왝왞왟왠왡왢왣왤왥왦왧왨왩왪왫왬왭왮왯왰왱왲왳왴왵왶왷외왹왺왻왼왽왾왿욀욁욂욃욄욅욆욇욈욉욊욋욌욍욎욏욐욑욒욓요욕욖욗욘욙욚욛욜욝욞욟욠욡욢욣욤욥욦욧욨용욪욫욬욭욮욯우욱욲욳운욵욶욷울욹욺욻욼욽욾욿움웁웂웃웄웅웆웇웈웉웊웋워웍웎웏원웑웒웓월웕웖웗웘웙웚웛웜웝웞웟웠웡웢웣웤웥웦웧웨웩웪웫웬웭웮웯웰웱웲웳웴웵웶웷웸웹웺웻웼웽웾웿윀윁윂윃위윅윆윇윈윉윊윋윌윍윎윏윐윑윒윓윔윕윖윗윘윙윚윛윜윝윞윟유육윢윣윤윥윦윧율윩윪윫윬윭윮윯윰윱윲윳윴융윶윷윸윹윺윻으윽윾윿은읁읂읃을읅읆읇읈읉읊읋음읍읎읏읐응읒읓읔읕읖읗의읙읚읛읜읝읞읟읠읡읢읣읤읥읦읧읨읩읪읫읬읭읮읯읰읱읲읳이익읶읷인읹읺읻일읽읾읿잀잁잂잃임입잆잇있잉잊잋잌잍잎잏자작잒잓잔잕잖잗잘잙잚잛잜잝잞잟잠잡잢잣잤장잦잧잨잩잪잫재잭잮잯잰잱잲잳잴잵잶잷잸잹잺잻잼잽잾잿쟀쟁쟂쟃쟄쟅쟆쟇쟈쟉쟊쟋쟌쟍쟎쟏쟐쟑쟒쟓쟔쟕쟖쟗쟘쟙쟚쟛쟜쟝쟞쟟쟠쟡쟢쟣쟤쟥쟦쟧쟨쟩쟪쟫쟬쟭쟮쟯쟰쟱쟲쟳쟴쟵쟶쟷쟸쟹쟺쟻쟼쟽쟾쟿저적젂젃전젅젆젇절젉젊젋젌젍젎젏점접젒젓젔정젖젗젘젙젚젛제젝젞젟젠젡젢젣젤젥젦젧젨젩젪젫젬젭젮젯젰젱젲젳젴젵젶젷져젹젺젻젼젽젾젿졀졁졂졃졄졅졆졇졈졉졊졋졌졍졎졏졐졑졒졓졔졕졖졗졘졙졚졛졜졝졞졟졠졡졢졣졤졥졦졧졨졩졪졫졬졭졮졯조족졲졳존졵졶졷졸졹졺졻졼졽졾졿좀좁좂좃좄종좆좇좈좉좊좋좌좍좎좏좐좑좒좓좔좕좖좗좘좙좚좛좜좝좞좟좠좡좢좣좤좥좦좧좨좩좪좫좬좭좮좯좰좱좲좳좴좵좶좷좸좹좺좻좼좽좾좿죀죁죂죃죄죅죆죇죈죉죊죋죌죍죎죏죐죑죒죓죔죕죖죗죘죙죚죛죜죝죞죟죠죡죢죣죤죥죦죧죨죩죪죫죬죭죮죯죰죱죲죳죴죵죶죷죸죹죺죻주죽죾죿준줁줂줃줄줅줆줇줈줉줊줋줌줍줎줏줐중줒줓줔줕줖줗줘줙줚줛줜줝줞줟줠줡줢줣줤줥줦줧줨줩줪줫줬줭줮줯줰줱줲줳줴줵줶줷줸줹줺줻줼줽줾줿쥀쥁쥂쥃쥄쥅쥆쥇쥈쥉쥊쥋쥌쥍쥎쥏쥐쥑쥒쥓쥔쥕쥖쥗쥘쥙쥚쥛쥜쥝쥞쥟쥠쥡쥢쥣쥤쥥쥦쥧쥨쥩쥪쥫쥬쥭쥮쥯쥰쥱쥲쥳쥴쥵쥶쥷쥸쥹쥺쥻쥼쥽쥾쥿즀즁즂즃즄즅즆즇즈즉즊즋즌즍즎즏즐즑즒즓즔즕즖즗즘즙즚즛즜증즞즟즠즡즢즣즤즥즦즧즨즩즪즫즬즭즮즯즰즱즲즳즴즵즶즷즸즹즺즻즼즽즾즿지직짂짃진짅짆짇질짉짊짋짌짍짎짏짐집짒짓짔징짖짗짘짙짚짛짜짝짞짟짠짡짢짣짤짥짦짧짨짩짪짫짬짭짮짯짰짱짲짳짴짵짶짷째짹짺짻짼짽짾짿쨀쨁쨂쨃쨄쨅쨆쨇쨈쨉쨊쨋쨌쨍쨎쨏쨐쨑쨒쨓쨔쨕쨖쨗쨘쨙쨚쨛쨜쨝쨞쨟쨠쨡쨢쨣쨤쨥쨦쨧쨨쨩쨪쨫쨬쨭쨮쨯쨰쨱쨲쨳쨴쨵쨶쨷쨸쨹쨺쨻쨼쨽쨾쨿쩀쩁쩂쩃쩄쩅쩆쩇쩈쩉쩊쩋쩌쩍쩎쩏쩐쩑쩒쩓쩔쩕쩖쩗쩘쩙쩚쩛쩜쩝쩞쩟쩠쩡쩢쩣쩤쩥쩦쩧쩨쩩쩪쩫쩬쩭쩮쩯쩰쩱쩲쩳쩴쩵쩶쩷쩸쩹쩺쩻쩼쩽쩾쩿쪀쪁쪂쪃쪄쪅쪆쪇쪈쪉쪊쪋쪌쪍쪎쪏쪐쪑쪒쪓쪔쪕쪖쪗쪘쪙쪚쪛쪜쪝쪞쪟쪠쪡쪢쪣쪤쪥쪦쪧쪨쪩쪪쪫쪬쪭쪮쪯쪰쪱쪲쪳쪴쪵쪶쪷쪸쪹쪺쪻쪼쪽쪾쪿쫀쫁쫂쫃쫄쫅쫆쫇쫈쫉쫊쫋쫌쫍쫎쫏쫐쫑쫒쫓쫔쫕쫖쫗쫘쫙쫚쫛쫜쫝쫞쫟쫠쫡쫢쫣쫤쫥쫦쫧쫨쫩쫪쫫쫬쫭쫮쫯쫰쫱쫲쫳쫴쫵쫶쫷쫸쫹쫺쫻쫼쫽쫾쫿쬀쬁쬂쬃쬄쬅쬆쬇쬈쬉쬊쬋쬌쬍쬎쬏쬐쬑쬒쬓쬔쬕쬖쬗쬘쬙쬚쬛쬜쬝쬞쬟쬠쬡쬢쬣쬤쬥쬦쬧쬨쬩쬪쬫쬬쬭쬮쬯쬰쬱쬲쬳쬴쬵쬶쬷쬸쬹쬺쬻쬼쬽쬾쬿쭀쭁쭂쭃쭄쭅쭆쭇쭈쭉쭊쭋쭌쭍쭎쭏쭐쭑쭒쭓쭔쭕쭖쭗쭘쭙쭚쭛쭜쭝쭞쭟쭠쭡쭢쭣쭤쭥쭦쭧쭨쭩쭪쭫쭬쭭쭮쭯쭰쭱쭲쭳쭴쭵쭶쭷쭸쭹쭺쭻쭼쭽쭾쭿쮀쮁쮂쮃쮄쮅쮆쮇쮈쮉쮊쮋쮌쮍쮎쮏쮐쮑쮒쮓쮔쮕쮖쮗쮘쮙쮚쮛쮜쮝쮞쮟쮠쮡쮢쮣쮤쮥쮦쮧쮨쮩쮪쮫쮬쮭쮮쮯쮰쮱쮲쮳쮴쮵쮶쮷쮸쮹쮺쮻쮼쮽쮾쮿쯀쯁쯂쯃쯄쯅쯆쯇쯈쯉쯊쯋쯌쯍쯎쯏쯐쯑쯒쯓쯔쯕쯖쯗쯘쯙쯚쯛쯜쯝쯞쯟쯠쯡쯢쯣쯤쯥쯦쯧쯨쯩쯪쯫쯬쯭쯮쯯쯰쯱쯲쯳쯴쯵쯶쯷쯸쯹쯺쯻쯼쯽쯾쯿찀찁찂찃찄찅찆찇찈찉찊찋찌찍찎찏찐찑찒찓찔찕찖찗찘찙찚찛찜찝찞찟찠찡찢찣찤찥찦찧차착찪찫찬찭찮찯찰찱찲찳찴찵찶찷참찹찺찻찼창찾찿챀챁챂챃채책챆챇챈챉챊챋챌챍챎챏챐챑챒챓챔챕챖챗챘챙챚챛챜챝챞챟챠챡챢챣챤챥챦챧챨챩챪챫챬챭챮챯챰챱챲챳챴챵챶챷챸챹챺챻챼챽챾챿첀첁첂첃첄첅첆첇첈첉첊첋첌첍첎첏첐첑첒첓첔첕첖첗처척첚첛천첝첞첟철첡첢첣첤첥첦첧첨첩첪첫첬청첮첯첰첱첲첳체첵첶첷첸첹첺첻첼첽첾첿쳀쳁쳂쳃쳄쳅쳆쳇쳈쳉쳊쳋쳌쳍쳎쳏쳐쳑쳒쳓쳔쳕쳖쳗쳘쳙쳚쳛쳜쳝쳞쳟쳠쳡쳢쳣쳤쳥쳦쳧쳨쳩쳪쳫쳬쳭쳮쳯쳰쳱쳲쳳쳴쳵쳶쳷쳸쳹쳺쳻쳼쳽쳾쳿촀촁촂촃촄촅촆촇초촉촊촋촌촍촎촏촐촑촒촓촔촕촖촗촘촙촚촛촜총촞촟촠촡촢촣촤촥촦촧촨촩촪촫촬촭촮촯촰촱촲촳촴촵촶촷촸촹촺촻촼촽촾촿쵀쵁쵂쵃쵄쵅쵆쵇쵈쵉쵊쵋쵌쵍쵎쵏쵐쵑쵒쵓쵔쵕쵖쵗쵘쵙쵚쵛최쵝쵞쵟쵠쵡쵢쵣쵤쵥쵦쵧쵨쵩쵪쵫쵬쵭쵮쵯쵰쵱쵲쵳쵴쵵쵶쵷쵸쵹쵺쵻쵼쵽쵾쵿춀춁춂춃춄춅춆춇춈춉춊춋춌춍춎춏춐춑춒춓추축춖춗춘춙춚춛출춝춞춟춠춡춢춣춤춥춦춧춨충춪춫춬춭춮춯춰춱춲춳춴춵춶춷춸춹춺춻춼춽춾춿췀췁췂췃췄췅췆췇췈췉췊췋췌췍췎췏췐췑췒췓췔췕췖췗췘췙췚췛췜췝췞췟췠췡췢췣췤췥췦췧취췩췪췫췬췭췮췯췰췱췲췳췴췵췶췷췸췹췺췻췼췽췾췿츀츁츂츃츄츅츆츇츈츉츊츋츌츍츎츏츐츑츒츓츔츕츖츗츘츙츚츛츜츝츞츟츠측츢츣츤츥츦츧츨츩츪츫츬츭츮츯츰츱츲츳츴층츶츷츸츹츺츻츼츽츾츿칀칁칂칃칄칅칆칇칈칉칊칋칌칍칎칏칐칑칒칓칔칕칖칗치칙칚칛친칝칞칟칠칡칢칣칤칥칦칧침칩칪칫칬칭칮칯칰칱칲칳카칵칶칷칸칹칺칻칼칽칾칿캀캁캂캃캄캅캆캇캈캉캊캋캌캍캎캏캐캑캒캓캔캕캖캗캘캙캚캛캜캝캞캟캠캡캢캣캤캥캦캧캨캩캪캫캬캭캮캯캰캱캲캳캴캵캶캷캸캹캺캻캼캽캾캿컀컁컂컃컄컅컆컇컈컉컊컋컌컍컎컏컐컑컒컓컔컕컖컗컘컙컚컛컜컝컞컟컠컡컢컣커컥컦컧컨컩컪컫컬컭컮컯컰컱컲컳컴컵컶컷컸컹컺컻컼컽컾컿케켁켂켃켄켅켆켇켈켉켊켋켌켍켎켏켐켑켒켓켔켕켖켗켘켙켚켛켜켝켞켟켠켡켢켣켤켥켦켧켨켩켪켫켬켭켮켯켰켱켲켳켴켵켶켷켸켹켺켻켼켽켾켿콀콁콂콃콄콅콆콇콈콉콊콋콌콍콎콏콐콑콒콓코콕콖콗콘콙콚콛콜콝콞콟콠콡콢콣콤콥콦콧콨콩콪콫콬콭콮콯콰콱콲콳콴콵콶콷콸콹콺콻콼콽콾콿쾀쾁쾂쾃쾄쾅쾆쾇쾈쾉쾊쾋쾌쾍쾎쾏쾐쾑쾒쾓쾔쾕쾖쾗쾘쾙쾚쾛쾜쾝쾞쾟쾠쾡쾢쾣쾤쾥쾦쾧쾨쾩쾪쾫쾬쾭쾮쾯쾰쾱쾲쾳쾴쾵쾶쾷쾸쾹쾺쾻쾼쾽쾾쾿쿀쿁쿂쿃쿄쿅쿆쿇쿈쿉쿊쿋쿌쿍쿎쿏쿐쿑쿒쿓쿔쿕쿖쿗쿘쿙쿚쿛쿜쿝쿞쿟쿠쿡쿢쿣쿤쿥쿦쿧쿨쿩쿪쿫쿬쿭쿮쿯쿰쿱쿲쿳쿴쿵쿶쿷쿸쿹쿺쿻쿼쿽쿾쿿퀀퀁퀂퀃퀄퀅퀆퀇퀈퀉퀊퀋퀌퀍퀎퀏퀐퀑퀒퀓퀔퀕퀖퀗퀘퀙퀚퀛퀜퀝퀞퀟퀠퀡퀢퀣퀤퀥퀦퀧퀨퀩퀪퀫퀬퀭퀮퀯퀰퀱퀲퀳퀴퀵퀶퀷퀸퀹퀺퀻퀼퀽퀾퀿큀큁큂큃큄큅큆큇큈큉큊큋큌큍큎큏큐큑큒큓큔큕큖큗큘큙큚큛큜큝큞큟큠큡큢큣큤큥큦큧큨큩큪큫크큭큮큯큰큱큲큳클큵큶큷큸큹큺큻큼큽큾큿킀킁킂킃킄킅킆킇킈킉킊킋킌킍킎킏킐킑킒킓킔킕킖킗킘킙킚킛킜킝킞킟킠킡킢킣키킥킦킧킨킩킪킫킬킭킮킯킰킱킲킳킴킵킶킷킸킹킺킻킼킽킾킿타탁탂탃탄탅탆탇탈탉탊탋탌탍탎탏탐탑탒탓탔탕탖탗탘탙탚탛태택탞탟탠탡탢탣탤탥탦탧탨탩탪탫탬탭탮탯탰탱탲탳탴탵탶탷탸탹탺탻탼탽탾탿턀턁턂턃턄턅턆턇턈턉턊턋턌턍턎턏턐턑턒턓턔턕턖턗턘턙턚턛턜턝턞턟턠턡턢턣턤턥턦턧턨턩턪턫턬턭턮턯터턱턲턳턴턵턶턷털턹턺턻턼턽턾턿텀텁텂텃텄텅텆텇텈텉텊텋테텍텎텏텐텑텒텓텔텕텖텗텘텙텚텛템텝텞텟텠텡텢텣텤텥텦텧텨텩텪텫텬텭텮텯텰텱텲텳텴텵텶텷텸텹텺텻텼텽텾텿톀톁톂톃톄톅톆톇톈톉톊톋톌톍톎톏톐톑톒톓톔톕톖톗톘톙톚톛톜톝톞톟토톡톢톣톤톥톦톧톨톩톪톫톬톭톮톯톰톱톲톳톴통톶톷톸톹톺톻톼톽톾톿퇀퇁퇂퇃퇄퇅퇆퇇퇈퇉퇊퇋퇌퇍퇎퇏퇐퇑퇒퇓퇔퇕퇖퇗퇘퇙퇚퇛퇜퇝퇞퇟퇠퇡퇢퇣퇤퇥퇦퇧퇨퇩퇪퇫퇬퇭퇮퇯퇰퇱퇲퇳퇴퇵퇶퇷퇸퇹퇺퇻퇼퇽퇾퇿툀툁툂툃툄툅툆툇툈툉툊툋툌툍툎툏툐툑툒툓툔툕툖툗툘툙툚툛툜툝툞툟툠툡툢툣툤툥툦툧툨툩툪툫투툭툮툯툰툱툲툳툴툵툶툷툸툹툺툻툼툽툾툿퉀퉁퉂퉃퉄퉅퉆퉇퉈퉉퉊퉋퉌퉍퉎퉏퉐퉑퉒퉓퉔퉕퉖퉗퉘퉙퉚퉛퉜퉝퉞퉟퉠퉡퉢퉣퉤퉥퉦퉧퉨퉩퉪퉫퉬퉭퉮퉯퉰퉱퉲퉳퉴퉵퉶퉷퉸퉹퉺퉻퉼퉽퉾퉿튀튁튂튃튄튅튆튇튈튉튊튋튌튍튎튏튐튑튒튓튔튕튖튗튘튙튚튛튜튝튞튟튠튡튢튣튤튥튦튧튨튩튪튫튬튭튮튯튰튱튲튳튴튵튶튷트특튺튻튼튽튾튿틀틁틂틃틄틅틆틇틈틉틊틋틌틍틎틏틐틑틒틓틔틕틖틗틘틙틚틛틜틝틞틟틠틡틢틣틤틥틦틧틨틩틪틫틬틭틮틯티틱틲틳틴틵틶틷틸틹틺틻틼틽틾틿팀팁팂팃팄팅팆팇팈팉팊팋파팍팎팏판팑팒팓팔팕팖팗팘팙팚팛팜팝팞팟팠팡팢팣팤팥팦팧패팩팪팫팬팭팮팯팰팱팲팳팴팵팶팷팸팹팺팻팼팽팾팿퍀퍁퍂퍃퍄퍅퍆퍇퍈퍉퍊퍋퍌퍍퍎퍏퍐퍑퍒퍓퍔퍕퍖퍗퍘퍙퍚퍛퍜퍝퍞퍟퍠퍡퍢퍣퍤퍥퍦퍧퍨퍩퍪퍫퍬퍭퍮퍯퍰퍱퍲퍳퍴퍵퍶퍷퍸퍹퍺퍻퍼퍽퍾퍿펀펁펂펃펄펅펆펇펈펉펊펋펌펍펎펏펐펑펒펓펔펕펖펗페펙펚펛펜펝펞펟펠펡펢펣펤펥펦펧펨펩펪펫펬펭펮펯펰펱펲펳펴펵펶펷편펹펺펻펼펽펾펿폀폁폂폃폄폅폆폇폈평폊폋폌폍폎폏폐폑폒폓폔폕폖폗폘폙폚폛폜폝폞폟폠폡폢폣폤폥폦폧폨폩폪폫포폭폮폯폰폱폲폳폴폵폶폷폸폹폺폻폼폽폾폿퐀퐁퐂퐃퐄퐅퐆퐇퐈퐉퐊퐋퐌퐍퐎퐏퐐퐑퐒퐓퐔퐕퐖퐗퐘퐙퐚퐛퐜퐝퐞퐟퐠퐡퐢퐣퐤퐥퐦퐧퐨퐩퐪퐫퐬퐭퐮퐯퐰퐱퐲퐳퐴퐵퐶퐷퐸퐹퐺퐻퐼퐽퐾퐿푀푁푂푃푄푅푆푇푈푉푊푋푌푍푎푏푐푑푒푓푔푕푖푗푘푙푚푛표푝푞푟푠푡푢푣푤푥푦푧푨푩푪푫푬푭푮푯푰푱푲푳푴푵푶푷푸푹푺푻푼푽푾푿풀풁풂풃풄풅풆풇품풉풊풋풌풍풎풏풐풑풒풓풔풕풖풗풘풙풚풛풜풝풞풟풠풡풢풣풤풥풦풧풨풩풪풫풬풭풮풯풰풱풲풳풴풵풶풷풸풹풺풻풼풽풾풿퓀퓁퓂퓃퓄퓅퓆퓇퓈퓉퓊퓋퓌퓍퓎퓏퓐퓑퓒퓓퓔퓕퓖퓗퓘퓙퓚퓛퓜퓝퓞퓟퓠퓡퓢퓣퓤퓥퓦퓧퓨퓩퓪퓫퓬퓭퓮퓯퓰퓱퓲퓳퓴퓵퓶퓷퓸퓹퓺퓻퓼퓽퓾퓿픀픁픂픃프픅픆픇픈픉픊픋플픍픎픏픐픑픒픓픔픕픖픗픘픙픚픛픜픝픞픟픠픡픢픣픤픥픦픧픨픩픪픫픬픭픮픯픰픱픲픳픴픵픶픷픸픹픺픻피픽픾픿핀핁핂핃필핅핆핇핈핉핊핋핌핍핎핏핐핑핒핓핔핕핖핗하학핚핛한핝핞핟할핡핢핣핤핥핦핧함합핪핫핬항핮핯핰핱핲핳해핵핶핷핸핹핺핻핼핽핾핿햀햁햂햃햄햅햆햇했행햊햋햌햍햎햏햐햑햒햓햔햕햖햗햘햙햚햛햜햝햞햟햠햡햢햣햤향햦햧햨햩햪햫햬햭햮햯햰햱햲햳햴햵햶햷햸햹햺햻햼햽햾햿헀헁헂헃헄헅헆헇허헉헊헋헌헍헎헏헐헑헒헓헔헕헖헗험헙헚헛헜헝헞헟헠헡헢헣헤헥헦헧헨헩헪헫헬헭헮헯헰헱헲헳헴헵헶헷헸헹헺헻헼헽헾헿혀혁혂혃현혅혆혇혈혉혊혋혌혍혎혏혐협혒혓혔형혖혗혘혙혚혛혜혝혞혟혠혡혢혣혤혥혦혧혨혩혪혫혬혭혮혯혰혱혲혳혴혵혶혷호혹혺혻혼혽혾혿홀홁홂홃홄홅홆홇홈홉홊홋홌홍홎홏홐홑홒홓화확홖홗환홙홚홛활홝홞홟홠홡홢홣홤홥홦홧홨황홪홫홬홭홮홯홰홱홲홳홴홵홶홷홸홹홺홻홼홽홾홿횀횁횂횃횄횅횆횇횈횉횊횋회획횎횏횐횑횒횓횔횕횖횗횘횙횚횛횜횝횞횟횠횡횢횣횤횥횦횧효횩횪횫횬횭횮횯횰횱횲횳횴횵횶횷횸횹횺횻횼횽횾횿훀훁훂훃후훅훆훇훈훉훊훋훌훍훎훏훐훑훒훓훔훕훖훗훘훙훚훛훜훝훞훟훠훡훢훣훤훥훦훧훨훩훪훫훬훭훮훯훰훱훲훳훴훵훶훷훸훹훺훻훼훽훾훿휀휁휂휃휄휅휆휇휈휉휊휋휌휍휎휏휐휑휒휓휔휕휖휗휘휙휚휛휜휝휞휟휠휡휢휣휤휥휦휧휨휩휪휫휬휭휮휯휰휱휲휳휴휵휶휷휸휹휺휻휼휽휾휿흀흁흂흃흄흅흆흇흈흉흊흋흌흍흎흏흐흑흒흓흔흕흖흗흘흙흚흛흜흝흞흟흠흡흢흣흤흥흦흧흨흩흪흫희흭흮흯흰흱흲흳흴흵흶흷흸흹흺흻흼흽흾흿힀힁힂힃힄힅힆힇히힉힊힋힌힍힎힏힐힑힒힓힔힕힖힗힘힙힚힛힜힝힞힟힠힡힢힣!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~。・〜°—、「」『』【】゛》《〉〈£€¥¢฿₩ - * - simplified_chinese - - 6839 - - 0123456789啊阿埃挨哎唉哀皑癌蔼矮艾碍爱隘鞍氨安俺按暗岸胺案肮昂盎凹敖熬翱袄傲奥懊澳芭捌扒叭吧笆八疤巴拔跋靶把耙坝霸罢爸白柏百摆佰败拜稗斑班搬扳般颁板版扮拌伴瓣半办绊邦帮梆榜膀绑棒磅蚌镑傍谤苞胞包褒剥薄雹保堡饱宝抱报暴豹鲍爆杯碑悲卑北辈背贝钡倍狈备惫焙被奔苯本笨崩绷甭泵蹦迸逼鼻比鄙笔彼碧蓖蔽毕毙毖币庇痹闭敝弊必辟壁臂避陛鞭边编贬扁便变卞辨辩辫遍标彪膘表鳖憋别瘪彬斌濒滨宾摈兵冰柄丙秉饼炳病并玻菠播拨钵波博勃搏铂箔伯帛舶脖膊渤泊驳捕卜哺补埠不布步簿部怖擦猜裁材才财睬踩采彩菜蔡餐参蚕残惭惨灿苍舱仓沧藏操糙槽曹草厕策侧册测层蹭插叉茬茶查碴搽察岔差诧拆柴豺搀掺蝉馋谗缠铲产阐颤昌猖场尝常长偿肠厂敞畅唱倡超抄钞朝嘲潮巢吵炒车扯撤掣彻澈郴臣辰尘晨忱沉陈趁衬撑称城橙成呈乘程惩澄诚承逞骋秤吃痴持匙池迟弛驰耻齿侈尺赤翅斥炽充冲虫崇宠抽酬畴踌稠愁筹仇绸瞅丑臭初出橱厨躇锄雏滁除楚础储矗搐触处揣川穿椽传船喘串疮窗幢床闯创吹炊捶锤垂春椿醇唇淳纯蠢戳绰疵茨磁雌辞慈瓷词此刺赐次聪葱囱匆从丛凑粗醋簇促蹿篡窜摧崔催脆瘁粹淬翠村存寸磋撮搓措挫错搭达答瘩打大呆歹傣戴带殆代贷袋待逮怠耽担丹单郸掸胆旦氮但惮淡诞弹蛋当挡党荡档刀捣蹈倒岛祷导到稻悼道盗德得的蹬灯登等瞪凳邓堤低滴迪敌笛狄涤翟嫡抵底地蒂第帝弟递缔颠掂滇碘点典靛垫电佃甸店惦奠淀殿碉叼雕凋刁掉吊钓调跌爹碟蝶迭谍叠丁盯叮钉顶鼎锭定订丢东冬董懂动栋侗恫冻洞兜抖斗陡豆逗痘都督毒犊独读堵睹赌杜镀肚度渡妒端短锻段断缎堆兑队对墩吨蹲敦顿囤钝盾遁掇哆多夺垛躲朵跺舵剁惰堕蛾峨鹅俄额讹娥恶厄扼遏鄂饿恩而儿耳尔饵洱二贰发罚筏伐乏阀法珐藩帆番翻樊矾钒繁凡烦反返范贩犯饭泛坊芳方肪房防妨仿访纺放菲非啡飞肥匪诽吠肺废沸费芬酚吩氛分纷坟焚汾粉奋份忿愤粪丰封枫蜂峰锋风疯烽逢冯缝讽奉凤佛否夫敷肤孵扶拂辐幅氟符伏俘服浮涪福袱弗甫抚辅俯釜斧脯腑府腐赴副覆赋复傅付阜父腹负富讣附妇缚咐噶嘎该改概钙盖溉干甘杆柑竿肝赶感秆敢赣冈刚钢缸肛纲岗港杠篙皋高膏羔糕搞镐稿告哥歌搁戈鸽胳疙割革葛格蛤阁隔铬个各给根跟耕更庚羹埂耿梗工攻功恭龚供躬公宫弓巩汞拱贡共钩勾沟苟狗垢构购够辜菇咕箍估沽孤姑鼓古蛊骨谷股故顾固雇刮瓜剐寡挂褂乖拐怪棺关官冠观管馆罐惯灌贯光广逛瑰规圭硅归龟闺轨鬼诡癸桂柜跪贵刽辊滚棍锅郭国果裹过哈骸孩海氦亥害骇酣憨邯韩含涵寒函喊罕翰撼捍旱憾悍焊汗汉夯杭航壕嚎豪毫郝好耗号浩呵喝荷菏核禾和何合盒貉阂河涸赫褐鹤贺嘿黑痕很狠恨哼亨横衡恒轰哄烘虹鸿洪宏弘红喉侯猴吼厚候后呼乎忽瑚壶葫胡蝴狐糊湖弧虎唬护互沪户花哗华猾滑画划化话槐徊怀淮坏欢环桓还缓换患唤痪豢焕涣宦幻荒慌黄磺蝗簧皇凰惶煌晃幌恍谎灰挥辉徽恢蛔回毁悔慧卉惠晦贿秽会烩汇讳诲绘荤昏婚魂浑混豁活伙火获或惑霍货祸击圾基机畸稽积箕肌饥迹激讥鸡姬绩缉吉极棘辑籍集及急疾汲即嫉级挤几脊己蓟技冀季伎祭剂悸济寄寂计记既忌际妓继纪嘉枷夹佳家加荚颊贾甲钾假稼价架驾嫁歼监坚尖笺间煎兼肩艰奸缄茧检柬碱硷拣捡简俭剪减荐槛鉴践贱见键箭件健舰剑饯渐溅涧建僵姜将浆江疆蒋桨奖讲匠酱降蕉椒礁焦胶交郊浇骄娇嚼搅铰矫侥脚狡角饺缴绞剿教酵轿较叫窖揭接皆秸街阶截劫节桔杰捷睫竭洁结解姐戒藉芥界借介疥诫届巾筋斤金今津襟紧锦仅谨进靳晋禁近烬浸尽劲荆兢茎睛晶鲸京惊精粳经井警景颈静境敬镜径痉靖竟竞净炯窘揪究纠玖韭久灸九酒厩救旧臼舅咎就疚鞠拘狙疽居驹菊局咀矩举沮聚拒据巨具距踞锯俱句惧炬剧捐鹃娟倦眷卷绢撅攫抉掘倔爵觉决诀绝均菌钧军君峻俊竣浚郡骏喀咖卡咯开揩楷凯慨刊堪勘坎砍看康慷糠扛抗亢炕考拷烤靠坷苛柯棵磕颗科壳咳可渴克刻客课肯啃垦恳坑吭空恐孔控抠口扣寇枯哭窟苦酷库裤夸垮挎跨胯块筷侩快宽款匡筐狂框矿眶旷况亏盔岿窥葵奎魁傀馈愧溃坤昆捆困括扩廓阔垃拉喇蜡腊辣啦莱来赖蓝婪栏拦篮阑兰澜谰揽览懒缆烂滥琅榔狼廊郎朗浪捞劳牢老佬姥酪烙涝勒乐雷镭蕾磊累儡垒擂肋类泪棱楞冷厘梨犁黎篱狸离漓理李里鲤礼莉荔吏栗丽厉励砾历利傈例俐痢立粒沥隶力璃哩俩联莲连镰廉怜涟帘敛脸链恋炼练粮凉梁粱良两辆量晾亮谅撩聊僚疗燎寥辽潦了撂镣廖料列裂烈劣猎琳林磷霖临邻鳞淋凛赁吝拎玲菱零龄铃伶羚凌灵陵岭领另令溜琉榴硫馏留刘瘤流柳六龙聋咙笼窿隆垄拢陇楼娄搂篓漏陋芦卢颅庐炉掳卤虏鲁麓碌露路赂鹿潞禄录陆戮驴吕铝侣旅履屡缕虑氯律率滤绿峦挛孪滦卵乱掠略抡轮伦仑沦纶论萝螺罗逻锣箩骡裸落洛骆络妈麻玛码蚂马骂嘛吗埋买麦卖迈脉瞒馒蛮满蔓曼慢漫谩芒茫盲氓忙莽猫茅锚毛矛铆卯茂冒帽貌贸么玫枚梅酶霉煤没眉媒镁每美昧寐妹媚门闷们萌蒙檬盟锰猛梦孟眯醚靡糜迷谜弥米秘觅泌蜜密幂棉眠绵冕免勉娩缅面苗描瞄藐秒渺庙妙蔑灭民抿皿敏悯闽明螟鸣铭名命谬摸摹蘑模膜磨摩魔抹末莫墨默沫漠寞陌谋牟某拇牡亩姆母墓暮幕募慕木目睦牧穆拿哪呐钠那娜纳氖乃奶耐奈南男难囊挠脑恼闹淖呢馁内嫩能妮霓倪泥尼拟你匿腻逆溺蔫拈年碾撵捻念娘酿鸟尿捏聂孽啮镊镍涅您柠狞凝宁拧泞牛扭钮纽脓浓农弄奴努怒女暖虐疟挪懦糯诺哦欧鸥殴藕呕偶沤啪趴爬帕怕琶拍排牌徘湃派攀潘盘磐盼畔判叛乓庞旁耪胖抛咆刨炮袍跑泡呸胚培裴赔陪配佩沛喷盆砰抨烹澎彭蓬棚硼篷膨朋鹏捧碰坯砒霹批披劈琵毗啤脾疲皮匹痞僻屁譬篇偏片骗飘漂瓢票撇瞥拼频贫品聘乒坪苹萍平凭瓶评屏坡泼颇婆破魄迫粕剖扑铺仆莆葡菩蒲埔朴圃普浦谱曝瀑期欺栖戚妻七凄漆柒沏其棋奇歧畦崎脐齐旗祈祁骑起岂乞企启契砌器气迄弃汽泣讫掐恰洽牵扦钎铅千迁签仟谦乾黔钱钳前潜遣浅谴堑嵌欠歉枪呛腔羌墙蔷强抢橇锹敲悄桥瞧乔侨巧鞘撬翘峭俏窍切茄且怯窃钦侵亲秦琴勤芹擒禽寝沁青轻氢倾卿清擎晴氰情顷请庆琼穷秋丘邱球求囚酋泅趋区蛆曲躯屈驱渠取娶龋趣去圈颧权醛泉全痊拳犬券劝缺炔瘸却鹊榷确雀裙群然燃冉染瓤壤攘嚷让饶扰绕惹热壬仁人忍韧任认刃妊纫扔仍日戎茸蓉荣融熔溶容绒冗揉柔肉茹蠕儒孺如辱乳汝入褥软阮蕊瑞锐闰润若弱撒洒萨腮鳃塞赛三叁伞散桑嗓丧搔骚扫嫂瑟色涩森僧莎砂杀刹沙纱傻啥煞筛晒珊苫杉山删煽衫闪陕擅赡膳善汕扇缮墒伤商赏晌上尚裳梢捎稍烧芍勺韶少哨邵绍奢赊蛇舌舍赦摄射慑涉社设砷申呻伸身深娠绅神沈审婶甚肾慎渗声生甥牲升绳省盛剩胜圣师失狮施湿诗尸虱十石拾时什食蚀实识史矢使屎驶始式示士世柿事拭誓逝势是嗜噬适仕侍释饰氏市恃室视试收手首守寿授售受瘦兽蔬枢梳殊抒输叔舒淑疏书赎孰熟薯暑曙署蜀黍鼠属术述树束戍竖墅庶数漱恕刷耍摔衰甩帅栓拴霜双爽谁水睡税吮瞬顺舜说硕朔烁斯撕嘶思私司丝死肆寺嗣四伺似饲巳松耸怂颂送宋讼诵搜艘擞嗽苏酥俗素速粟僳塑溯宿诉肃酸蒜算虽隋随绥髓碎岁穗遂隧祟孙损笋蓑梭唆缩琐索锁所塌他它她塔獭挞蹋踏胎苔抬台泰酞太态汰坍摊贪瘫滩坛檀痰潭谭谈坦毯袒碳探叹炭汤塘搪堂棠膛唐糖倘躺淌趟烫掏涛滔绦萄桃逃淘陶讨套特藤腾疼誊梯剔踢锑提题蹄啼体替嚏惕涕剃屉天添填田甜恬舔腆挑条迢眺跳贴铁帖厅听烃汀廷停亭庭挺艇通桐酮瞳同铜彤童桶捅筒统痛偷投头透凸秃突图徒途涂屠土吐兔湍团推颓腿蜕褪退吞屯臀拖托脱鸵陀驮驼椭妥拓唾挖哇蛙洼娃瓦袜歪外豌弯湾玩顽丸烷完碗挽晚皖惋宛婉万腕汪王亡枉网往旺望忘妄威巍微危韦违桅围唯惟为潍维苇萎委伟伪尾纬未蔚味畏胃喂魏位渭谓尉慰卫瘟温蚊文闻纹吻稳紊问嗡翁瓮挝蜗涡窝我斡卧握沃巫呜钨乌污诬屋无芜梧吾吴毋武五捂午舞伍侮坞戊雾晤物勿务悟误昔熙析西硒矽晰嘻吸锡牺稀息希悉膝夕惜熄烯溪汐犀檄袭席习媳喜铣洗系隙戏细瞎虾匣霞辖暇峡侠狭下厦夏吓掀锨先仙鲜纤咸贤衔舷闲涎弦嫌显险现献县腺馅羡宪陷限线相厢镶香箱襄湘乡翔祥详想响享项巷橡像向象萧硝霄削哮嚣销消宵淆晓小孝校肖啸笑效楔些歇蝎鞋协挟携邪斜胁谐写械卸蟹懈泄泻谢屑薪芯锌欣辛新忻心信衅星腥猩惺兴刑型形邢行醒幸杏性姓兄凶胸匈汹雄熊休修羞朽嗅锈秀袖绣墟戌需虚嘘须徐许蓄酗叙旭序畜恤絮婿绪续轩喧宣悬旋玄选癣眩绚靴薛学穴雪血勋熏循旬询寻驯巡殉汛训讯逊迅压押鸦鸭呀丫芽牙蚜崖衙涯雅哑亚讶焉咽阉烟淹盐严研蜒岩延言颜阎炎沿奄掩眼衍演艳堰燕厌砚雁唁彦焰宴谚验殃央鸯秧杨扬佯疡羊洋阳氧仰痒养样漾邀腰妖瑶摇尧遥窑谣姚咬舀药要耀椰噎耶爷野冶也页掖业叶曳腋夜液一壹医揖铱依伊衣颐夷遗移仪胰疑沂宜姨彝椅蚁倚已乙矣以艺抑易邑屹亿役臆逸肄疫亦裔意毅忆义益溢诣议谊译异翼翌绎茵荫因殷音阴姻吟银淫寅饮尹引隐印英樱婴鹰应缨莹萤营荧蝇迎赢盈影颖硬映哟拥佣臃痈庸雍踊蛹咏泳涌永恿勇用幽优悠忧尤由邮铀犹油游酉有友右佑釉诱又幼迂淤于盂榆虞愚舆余俞逾鱼愉渝渔隅予娱雨与屿禹宇语羽玉域芋郁吁遇喻峪御愈欲狱育誉浴寓裕预豫驭鸳渊冤元垣袁原援辕园员圆猿源缘远苑愿怨院曰约越跃钥岳粤月悦阅耘云郧匀陨允运蕴酝晕韵孕匝砸杂栽哉灾宰载再在咱攒暂赞赃脏葬遭糟凿藻枣早澡蚤躁噪造皂灶燥责择则泽贼怎增憎曾赠扎喳渣札轧铡闸眨栅榨咋乍炸诈摘斋宅窄债寨瞻毡詹粘沾盏斩辗崭展蘸栈占战站湛绽樟章彰漳张掌涨杖丈帐账仗胀瘴障招昭找沼赵照罩兆肇召遮折哲蛰辙者锗蔗这浙珍斟真甄砧臻贞针侦枕疹诊震振镇阵蒸挣睁征狰争怔整拯正政帧症郑证芝枝支吱蜘知肢脂汁之织职直植殖执值侄址指止趾只旨纸志挚掷至致置帜峙制智秩稚质炙痔滞治窒中盅忠钟衷终种肿重仲众舟周州洲诌粥轴肘帚咒皱宙昼骤珠株蛛朱猪诸诛逐竹烛煮拄瞩嘱主著柱助蛀贮铸筑住注祝驻抓爪拽专砖转撰赚篆桩庄装妆撞壮状椎锥追赘坠缀谆准捉拙卓桌琢茁酌啄着灼浊兹咨资姿滋淄孜紫仔籽滓子自渍字鬃棕踪宗综总纵邹走奏揍租足卒族祖诅阻组钻纂嘴醉最罪尊遵昨左佐柞做作坐座亍丌兀丐廿卅丕亘丞鬲孬噩丨禺丿匕乇夭爻卮氐囟胤馗毓睾鼗丶亟鼐乜乩亓芈孛啬嘏仄厍厝厣厥厮靥赝匚叵匦匮匾赜卦卣刂刈刎刭刳刿剀剌剞剡剜蒯剽劂劁劐劓冂罔亻仃仉仂仨仡仫仞伛仳伢佤仵伥伧伉伫佞佧攸佚佝佟佗伲伽佶佴侑侉侃侏佾佻侪佼侬侔俦俨俪俅俚俣俜俑俟俸倩偌俳倬倏倮倭俾倜倌倥倨偾偃偕偈偎偬偻傥傧傩傺僖儆僭僬僦僮儇儋仝氽佘佥俎龠汆籴兮巽黉馘冁夔勹匍訇匐凫夙兕亠兖亳衮袤亵脔裒禀嬴蠃羸冫冱冽冼凇冖冢冥讠讦讧讪讴讵讷诂诃诋诏诎诒诓诔诖诘诙诜诟诠诤诨诩诮诰诳诶诹诼诿谀谂谄谇谌谏谑谒谔谕谖谙谛谘谝谟谠谡谥谧谪谫谮谯谲谳谵谶卩卺阝阢阡阱阪阽阼陂陉陔陟陧陬陲陴隈隍隗隰邗邛邝邙邬邡邴邳邶邺邸邰郏郅邾郐郄郇郓郦郢郜郗郛郫郯郾鄄鄢鄞鄣鄱鄯鄹酃酆刍奂劢劬劭劾哿勐勖勰叟燮矍廴凵凼鬯厶弁畚巯坌垩垡塾墼壅壑圩圬圪圳圹圮圯坜圻坂坩垅坫垆坼坻坨坭坶坳垭垤垌垲埏垧垴垓垠埕埘埚埙埒垸埴埯埸埤埝堋堍埽埭堀堞堙塄堠塥塬墁墉墚墀馨鼙懿艹艽艿芏芊芨芄芎芑芗芙芫芸芾芰苈苊苣芘芷芮苋苌苁芩芴芡芪芟苄苎芤苡茉苷苤茏茇苜苴苒苘茌苻苓茑茚茆茔茕苠苕茜荑荛荜茈莒茼茴茱莛荞茯荏荇荃荟荀茗荠茭茺茳荦荥荨茛荩荬荪荭荮莰荸莳莴莠莪莓莜莅荼莶莩荽莸荻莘莞莨莺莼菁萁菥菘堇萘萋菝菽菖萜萸萑萆菔菟萏萃菸菹菪菅菀萦菰菡葜葑葚葙葳蒇蒈葺蒉葸萼葆葩葶蒌蒎萱葭蓁蓍蓐蓦蒽蓓蓊蒿蒺蓠蒡蒹蒴蒗蓥蓣蔌甍蔸蓰蔹蔟蔺蕖蔻蓿蓼蕙蕈蕨蕤蕞蕺瞢蕃蕲蕻薤薨薇薏蕹薮薜薅薹薷薰藓藁藜藿蘧蘅蘩蘖蘼廾弈夼奁耷奕奚奘匏尢尥尬尴扌扪抟抻拊拚拗拮挢拶挹捋捃掭揶捱捺掎掴捭掬掊捩掮掼揲揸揠揿揄揞揎摒揆掾摅摁搋搛搠搌搦搡摞撄摭撖摺撷撸撙撺擀擐擗擤擢攉攥攮弋忒甙弑卟叱叽叩叨叻吒吖吆呋呒呓呔呖呃吡呗呙吣吲咂咔呷呱呤咚咛咄呶呦咝哐咭哂咴哒咧咦哓哔呲咣哕咻咿哌哙哚哜咩咪咤哝哏哞唛哧唠哽唔哳唢唣唏唑唧唪啧喏喵啉啭啁啕唿啐唼唷啖啵啶啷唳唰啜喋嗒喃喱喹喈喁喟啾嗖喑啻嗟喽喾喔喙嗪嗷嗉嘟嗑嗫嗬嗔嗦嗝嗄嗯嗥嗲嗳嗌嗍嗨嗵嗤辔嘞嘈嘌嘁嘤嘣嗾嘀嘧嘭噘嘹噗嘬噍噢噙噜噌噔嚆噤噱噫噻噼嚅嚓嚯囔囗囝囡囵囫囹囿圄圊圉圜帏帙帔帑帱帻帼帷幄幔幛幞幡岌屺岍岐岖岈岘岙岑岚岜岵岢岽岬岫岱岣峁岷峄峒峤峋峥崂崃崧崦崮崤崞崆崛嵘崾崴崽嵬嵛嵯嵝嵫嵋嵊嵩嵴嶂嶙嶝豳嶷巅彳彷徂徇徉後徕徙徜徨徭徵徼衢彡犭犰犴犷犸狃狁狎狍狒狨狯狩狲狴狷猁狳猃狺狻猗猓猡猊猞猝猕猢猹猥猬猸猱獐獍獗獠獬獯獾舛夥飧夤夂饣饧饨饩饪饫饬饴饷饽馀馄馇馊馍馐馑馓馔馕庀庑庋庖庥庠庹庵庾庳赓廒廑廛廨廪膺忄忉忖忏怃忮怄忡忤忾怅怆忪忭忸怙怵怦怛怏怍怩怫怊怿怡恸恹恻恺恂恪恽悖悚悭悝悃悒悌悛惬悻悱惝惘惆惚悴愠愦愕愣惴愀愎愫慊慵憬憔憧憷懔懵忝隳闩闫闱闳闵闶闼闾阃阄阆阈阊阋阌阍阏阒阕阖阗阙阚丬爿戕氵汔汜汊沣沅沐沔沌汨汩汴汶沆沩泐泔沭泷泸泱泗沲泠泖泺泫泮沱泓泯泾洹洧洌浃浈洇洄洙洎洫浍洮洵洚浏浒浔洳涑浯涞涠浞涓涔浜浠浼浣渚淇淅淞渎涿淠渑淦淝淙渖涫渌涮渫湮湎湫溲湟溆湓湔渲渥湄滟溱溘滠漭滢溥溧溽溻溷滗溴滏溏滂溟潢潆潇漤漕滹漯漶潋潴漪漉漩澉澍澌潸潲潼潺濑濉澧澹澶濂濡濮濞濠濯瀚瀣瀛瀹瀵灏灞宀宄宕宓宥宸甯骞搴寤寮褰寰蹇謇辶迓迕迥迮迤迩迦迳迨逅逄逋逦逑逍逖逡逵逶逭逯遄遑遒遐遨遘遢遛暹遴遽邂邈邃邋彐彗彖彘尻咫屐屙孱屣屦羼弪弩弭艴弼鬻屮妁妃妍妩妪妣妗姊妫妞妤姒妲妯姗妾娅娆姝娈姣姘姹娌娉娲娴娑娣娓婀婧婊婕娼婢婵胬媪媛婷婺媾嫫媲嫒嫔媸嫠嫣嫱嫖嫦嫘嫜嬉嬗嬖嬲嬷孀尕尜孚孥孳孑孓孢驵驷驸驺驿驽骀骁骅骈骊骐骒骓骖骘骛骜骝骟骠骢骣骥骧纟纡纣纥纨纩纭纰纾绀绁绂绉绋绌绐绔绗绛绠绡绨绫绮绯绱绲缍绶绺绻绾缁缂缃缇缈缋缌缏缑缒缗缙缜缛缟缡缢缣缤缥缦缧缪缫缬缭缯缰缱缲缳缵幺畿巛甾邕玎玑玮玢玟珏珂珑玷玳珀珉珈珥珙顼琊珩珧珞玺珲琏琪瑛琦琥琨琰琮琬琛琚瑁瑜瑗瑕瑙瑷瑭瑾璜璎璀璁璇璋璞璨璩璐璧瓒璺韪韫韬杌杓杞杈杩枥枇杪杳枘枧杵枨枞枭枋杷杼柰栉柘栊柩枰栌柙枵柚枳柝栀柃枸柢栎柁柽栲栳桠桡桎桢桄桤梃栝桕桦桁桧桀栾桊桉栩梵梏桴桷梓桫棂楮棼椟椠棹椤棰椋椁楗棣椐楱椹楠楂楝榄楫榀榘楸椴槌榇榈槎榉楦楣楹榛榧榻榫榭槔榱槁槊槟榕槠榍槿樯槭樗樘橥槲橄樾檠橐橛樵檎橹樽樨橘橼檑檐檩檗檫猷獒殁殂殇殄殒殓殍殚殛殡殪轫轭轱轲轳轵轶轸轷轹轺轼轾辁辂辄辇辋辍辎辏辘辚軎戋戗戛戟戢戡戥戤戬臧瓯瓴瓿甏甑甓攴旮旯旰昊昙杲昃昕昀炅曷昝昴昱昶昵耆晟晔晁晏晖晡晗晷暄暌暧暝暾曛曜曦曩贲贳贶贻贽赀赅赆赈赉赇赍赕赙觇觊觋觌觎觏觐觑牮犟牝牦牯牾牿犄犋犍犏犒挈挲掰搿擘耄毪毳毽毵毹氅氇氆氍氕氘氙氚氡氩氤氪氲攵敕敫牍牒牖爰虢刖肟肜肓肼朊肽肱肫肭肴肷胧胨胩胪胛胂胄胙胍胗朐胝胫胱胴胭脍脎胲胼朕脒豚脶脞脬脘脲腈腌腓腴腙腚腱腠腩腼腽腭腧塍媵膈膂膑滕膣膪臌朦臊膻臁膦欤欷欹歃歆歙飑飒飓飕飙飚殳彀毂觳斐齑斓於旆旄旃旌旎旒旖炀炜炖炝炻烀炷炫炱烨烊焐焓焖焯焱煳煜煨煅煲煊煸煺熘熳熵熨熠燠燔燧燹爝爨灬焘煦熹戾戽扃扈扉礻祀祆祉祛祜祓祚祢祗祠祯祧祺禅禊禚禧禳忑忐怼恝恚恧恁恙恣悫愆愍慝憩憝懋懑戆肀聿沓泶淼矶矸砀砉砗砘砑斫砭砜砝砹砺砻砟砼砥砬砣砩硎硭硖硗砦硐硇硌硪碛碓碚碇碜碡碣碲碹碥磔磙磉磬磲礅磴礓礤礞礴龛黹黻黼盱眄眍盹眇眈眚眢眙眭眦眵眸睐睑睇睃睚睨睢睥睿瞍睽瞀瞌瞑瞟瞠瞰瞵瞽町畀畎畋畈畛畲畹疃罘罡罟詈罨罴罱罹羁罾盍盥蠲钅钆钇钋钊钌钍钏钐钔钗钕钚钛钜钣钤钫钪钭钬钯钰钲钴钶钷钸钹钺钼钽钿铄铈铉铊铋铌铍铎铐铑铒铕铖铗铙铘铛铞铟铠铢铤铥铧铨铪铩铫铮铯铳铴铵铷铹铼铽铿锃锂锆锇锉锊锍锎锏锒锓锔锕锖锘锛锝锞锟锢锪锫锩锬锱锲锴锶锷锸锼锾锿镂锵镄镅镆镉镌镎镏镒镓镔镖镗镘镙镛镞镟镝镡镢镤镥镦镧镨镩镪镫镬镯镱镲镳锺矧矬雉秕秭秣秫稆嵇稃稂稞稔稹稷穑黏馥穰皈皎皓皙皤瓞瓠甬鸠鸢鸨鸩鸪鸫鸬鸲鸱鸶鸸鸷鸹鸺鸾鹁鹂鹄鹆鹇鹈鹉鹋鹌鹎鹑鹕鹗鹚鹛鹜鹞鹣鹦鹧鹨鹩鹪鹫鹬鹱鹭鹳疒疔疖疠疝疬疣疳疴疸痄疱疰痃痂痖痍痣痨痦痤痫痧瘃痱痼痿瘐瘀瘅瘌瘗瘊瘥瘘瘕瘙瘛瘼瘢瘠癀瘭瘰瘿瘵癃瘾瘳癍癞癔癜癖癫癯翊竦穸穹窀窆窈窕窦窠窬窨窭窳衤衩衲衽衿袂袢裆袷袼裉裢裎裣裥裱褚裼裨裾裰褡褙褓褛褊褴褫褶襁襦襻疋胥皲皴矜耒耔耖耜耠耢耥耦耧耩耨耱耋耵聃聆聍聒聩聱覃顸颀颃颉颌颍颏颔颚颛颞颟颡颢颥颦虍虔虬虮虿虺虼虻蚨蚍蚋蚬蚝蚧蚣蚪蚓蚩蚶蛄蚵蛎蚰蚺蚱蚯蛉蛏蚴蛩蛱蛲蛭蛳蛐蜓蛞蛴蛟蛘蛑蜃蜇蛸蜈蜊蜍蜉蜣蜻蜞蜥蜮蜚蜾蝈蜴蜱蜩蜷蜿螂蜢蝽蝾蝻蝠蝰蝌蝮螋蝓蝣蝼蝤蝙蝥螓螯螨蟒蟆螈螅螭螗螃螫蟥螬螵螳蟋蟓螽蟑蟀蟊蟛蟪蟠蟮蠖蠓蟾蠊蠛蠡蠹蠼缶罂罄罅舐竺竽笈笃笄笕笊笫笏筇笸笪笙笮笱笠笥笤笳笾笞筘筚筅筵筌筝筠筮筻筢筲筱箐箦箧箸箬箝箨箅箪箜箢箫箴篑篁篌篝篚篥篦篪簌篾篼簏簖簋簟簪簦簸籁籀臾舁舂舄臬衄舡舢舣舭舯舨舫舸舻舳舴舾艄艉艋艏艚艟艨衾袅袈裘裟襞羝羟羧羯羰羲籼敉粑粝粜粞粢粲粼粽糁糇糌糍糈糅糗糨艮暨羿翎翕翥翡翦翩翮翳糸絷綦綮繇纛麸麴赳趄趔趑趱赧赭豇豉酊酐酎酏酤酢酡酰酩酯酽酾酲酴酹醌醅醐醍醑醢醣醪醭醮醯醵醴醺豕鹾趸跫踅蹙蹩趵趿趼趺跄跖跗跚跞跎跏跛跆跬跷跸跣跹跻跤踉跽踔踝踟踬踮踣踯踺蹀踹踵踽踱蹉蹁蹂蹑蹒蹊蹰蹶蹼蹯蹴躅躏躔躐躜躞豸貂貊貅貘貔斛觖觞觚觜觥觫觯訾謦靓雩雳雯霆霁霈霏霎霪霭霰霾龀龃龅龆龇龈龉龊龌黾鼋鼍隹隼隽雎雒瞿雠銎銮鋈錾鍪鏊鎏鐾鑫鱿鲂鲅鲆鲇鲈稣鲋鲎鲐鲑鲒鲔鲕鲚鲛鲞鲟鲠鲡鲢鲣鲥鲦鲧鲨鲩鲫鲭鲮鲰鲱鲲鲳鲴鲵鲶鲷鲺鲻鲼鲽鳄鳅鳆鳇鳊鳋鳌鳍鳎鳏鳐鳓鳔鳕鳗鳘鳙鳜鳝鳟鳢靼鞅鞑鞒鞔鞯鞫鞣鞲鞴骱骰骷鹘骶骺骼髁髀髅髂髋髌髑魅魃魇魉魈魍魑飨餍餮饕饔髟髡髦髯髫髻髭髹鬈鬏鬓鬟鬣麽麾縻麂麇麈麋麒鏖麝麟黛黜黝黠黟黢黩黧黥黪黯鼢鼬鼯鼹鼷鼽鼾齄!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~,、。:;?!()《》〈〉「」『』【】—〜…·°“”‘’£€¥¢฿¥ - * - multilingual - - 601 - - 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~°£€¥¢฿çëÇËèïîôûêÈÏÎÔÛÊáéíóúäöÁÉÍÓÚÄÖəğışüƏĞİŞÜ₼ñÑčćđšžČĆĐŠŽàòÀÒ·ŀĿďěňřťůýĎĚŇŘŤŮÝæøåÆØÅõÕĉĝĥĵŝŭĈĜĤĴŜŬ₷âùÂÙƒƑßẞɓɗƙƴƁƊƘƳ₦őűŐŰðþÐÞìÌāēģīķļņūĀĒĢĪĶĻŅŪąęėįųĄĘĖĮŲōŌċġħżĊĠĦŻśźŚŹłńŁŃãÃășțĂȘȚľĺŕĽĹŔ¡¿₱₺ʻʼảạắằẳẵặấầẩẫậẻẽẹếềểễệỏọốồổộỗơớờởợỡủũụưứừửữựỉĩịỳỷỹỵẢẠẮẰẲẴẶẤẦẨẪẬẺẼẸẾỀỂỄỆỎỌỐỒỔỘỖƠỚỜỞỢỠỦŨỤƯỨỪỬỮỰỈĨỊỲỶỸỴ₫ŵŷŴŶṣṢǹǸ§абвгдежзийклмнопрстуфхцчшщьюяАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЬЮЯёыэЁЫЭъЪ₽ўіЎІґїєҐЇЄ₴ӘәҖҗҢңӨөҮүҺһҒғҚқҲҳҶҷӢӣӮӯҰұ₸ЃѓЅѕЈјЉљЊњЌќЏџ᠐᠑᠒᠓᠔᠕᠖᠗᠘᠙₮ҔҕҤҥЂђЋћαβγδεζηθικλμνξοπρστςυφχψωΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩάέήίϊΐόύϋΰώΆΈΉΊΪΌΎΫΏ diff --git a/docs/source/modules/io.rst b/docs/source/modules/io.rst deleted file mode 100644 index df556dad03..0000000000 --- a/docs/source/modules/io.rst +++ /dev/null @@ -1,240 +0,0 @@ -doctr.io -======== - - -.. currentmodule:: doctr.io - -The io module enables users to easily access content from documents and export analysis -results to structured formats. - -.. _document_structure: - -Document structure ------------------- - -Structural organization of the documents. - -Word -^^^^ -A Word is an uninterrupted sequence of characters. - -.. autoclass:: Word - -Prediction -^^^^^^^^^^ -A Prediction is a Word with an additional crop orientation field indicating the detected text rotation angle. - -.. autoclass:: Prediction - -Line -^^^^ -A Line is a collection of Words aligned spatially and meant to be read together (on a two-column page, on the same horizontal, we will consider that there are two Lines). - -.. autoclass:: Line - -Artefact -^^^^^^^^ - -An Artefact is a non-textual element (e.g. QR code, picture, chart, signature, logo, etc.). - -.. autoclass:: Artefact - -LayoutElement -^^^^^^^^^^^^^ - -A LayoutElement is a region predicted by a layout detection model (e.g. Title, Text, Table, Page-header, Page-footer). Layout regions are attached to a :class:`Page` when the ``ocr_predictor`` / ``kie_predictor`` is run with ``detect_layout=True``. - -.. autoclass:: LayoutElement - -Block -^^^^^ -A Block is a collection of Lines (e.g. an address written on several lines) and Artefacts (e.g. a graph with its title underneath). - -.. autoclass:: Block - -Page -^^^^ - -A Page is a collection of Blocks that were on the same physical page. - -.. autoclass:: Page - - .. automethod:: show - .. automethod:: items_in_reading_order - .. automethod:: export_as_markdown - .. automethod:: export_as_asciidoc - .. automethod:: export_as_html - .. automethod:: export_as_xml - .. automethod:: export - .. automethod:: render - .. automethod:: export_as - - -KIEPage -^^^^^^^ - -A KIEPage is returned by the :py:meth:`kie_predictor `. It groups predictions by -semantic class rather than by spatial layout. - -.. autoclass:: KIEPage - - .. automethod:: show - .. automethod:: export_as_markdown - .. automethod:: export_as_asciidoc - .. automethod:: export_as_html - .. automethod:: export_as_xml - .. automethod:: export - .. automethod:: render - .. automethod:: export_as - - -Document -^^^^^^^^ - -A Document is a collection of Pages. - -.. autoclass:: Document - - .. automethod:: show - .. automethod:: export_as_markdown - .. automethod:: export_as_asciidoc - .. automethod:: export_as_xml - .. automethod:: export_as_html - .. automethod:: export - .. automethod:: render - .. automethod:: export_as - - -KIEDocument -^^^^^^^^^^^ - -A KIEDocument is a collection of :class:`KIEPage` elements, returned by the -:py:meth:`kie_predictor `. - -.. autoclass:: KIEDocument - - .. automethod:: show - - -File reading ------------- - -High-performance file reading and conversion to processable structured data. - -.. autofunction:: read_pdf - -.. autofunction:: read_img_as_numpy - -.. autofunction:: read_img_as_tensor - -.. autofunction:: decode_img_as_tensor - -.. autofunction:: read_html - - -.. autoclass:: DocumentFile - - .. automethod:: from_pdf - - .. automethod:: from_url - - .. automethod:: from_images - - -.. _reading_order: - -Reading order -------------- - -The reading-order-aware export of a :class:`Document` / :class:`Page` to Markdown, AsciiDoc, HTML, or XML is available -through the ``export_as_markdown`` / ``export_as_asciidoc`` / ``export_as_html`` / ``export_as_xml`` / ``export_as`` / ``export`` / ``render`` methods documented above, which -delegate to the exporters of :mod:`doctr.io.exporters`. -The underlying ordering primitives live in :mod:`doctr.models.reading_order`. - -Every export path shares the same linearization, so ``render()``, ``export()``, ``export_as_xml()`` and the -Markdown / AsciiDoc / HTML exports all present the content in the same order. The result is memoized on the -page, so exporting one page to several formats orders it only once. - -.. currentmodule:: doctr.io - -.. autoclass:: TextExporter - :members: export_page, export_kie_page, export_document - -.. autoclass:: MarkdownExporter - :members: export_page, export_kie_page, export_document - -.. autoclass:: AsciiDocExporter - :members: export_page, export_kie_page, export_document - -.. autoclass:: HTMLExporter - :members: export_page, export_kie_page, export_document - -.. autoclass:: XMLExporter - :members: export_page, export_kie_page, export_document - -.. autofunction:: doctr.io.exporters.page_reading_order - -.. autofunction:: doctr.io.exporters.predictions_in_reading_order - -.. autofunction:: doctr.io.exporters.to_json_safe - -Figures -------- - -When the predictor runs the layout model (``detect_layout=True`` or ``detect_tables=True``), the detected figures -take part in the reading order, and the Markdown, AsciiDoc and HTML exports render them according to their -``images`` argument, an image mode or a configured :class:`FigureEncoder`: - -* ``'placeholder'`` (default): a comment marks each figure (```` in Markdown and HTML, ``// image`` in - AsciiDoc) -* ``'none'``: the figures are left out -* ``'embedded'``: each figure is cropped and inlined as a base64 data URI -* ``'referenced'``: each crop is written to an image directory and linked by its relative path, which needs a - configured encoder: ``images=FigureEncoder("referenced", image_dir=...)``. Set ``path_prefix`` when the export is - not written to the working directory: it locates the image directory from the export. The file names carry the - position and a hash of the figure (e.g. ``page1_figure2-3fa2b1c9.png``), so several documents can share a - directory. - -.. note:: - Once a figure carries its pixels (``'embedded'`` and ``'referenced'``), the text recognized inside it is left - out of the export, since the image shows it, and its caption becomes the alternative text of the image. A figure - which cannot be cropped (e.g. on a page restored from a JSON export) falls back to a placeholder and keeps its - text. ``page.items_in_reading_order(include_figures=True)`` returns the figures along with the blocks and tables. - -.. code:: python - - from doctr.io import DocumentFile, FigureEncoder - from doctr.models import ocr_predictor - - predictor = ocr_predictor(pretrained=True, detect_layout=True) - doc = predictor(DocumentFile.from_pdf("report.pdf")) - - # A self-contained Markdown file - markdown = doc.export_as_markdown(images="embedded") - # ... or one that links to the crops written to `assets` - markdown = doc.export_as_markdown(images=FigureEncoder("referenced", image_dir="assets")) - -The caption also stays visible: an italic paragraph under the image in Markdown, a ``
        `` in HTML and a -block title in AsciiDoc. Plain text never carries figures, and hOCR positions them as ``ocr_photo`` areas. A figure -lying (at least half) in a page header or footer, e.g. a logo, is read with that furniture, and left out with it by -``include_furniture=False``. - -The command line exposes the same options: ``--images`` picks the mode, ``--image_format`` the file format, and in -``referenced`` mode the crops are written to ``--image_dir`` (by default ``_images`` next to the output): - -.. code:: bash - - doctr-cli --input_path report.pdf --detect_layout --output report.md --images referenced - -.. autoclass:: FigureEncoder - :members: resolve, source, enabled, materializes - -.. autofunction:: crop_layout_region - -.. autofunction:: encode_crop - -.. autofunction:: picture_regions - -.. autofunction:: is_picture_region - -.. autofunction:: is_picture_label diff --git a/docs/source/modules/transforms.rst b/docs/source/modules/transforms.rst deleted file mode 100644 index 0a1a74a5d1..0000000000 --- a/docs/source/modules/transforms.rst +++ /dev/null @@ -1,39 +0,0 @@ -doctr.transforms -================ - -.. currentmodule:: doctr.transforms - -Data transformations are part of both training and inference procedure. Drawing inspiration from the design of `torchvision `_, we express transformations as composable modules. - - -Supported transformations -------------------------- -Here are all transformations that are available through docTR: - -.. currentmodule:: doctr.transforms.modules - -.. autoclass:: Resize -.. autoclass:: GaussianNoise -.. autoclass:: ChannelShuffle -.. autoclass:: RandomHorizontalFlip -.. autoclass:: RandomShadow - -.. autoclass:: RandomGlare - -.. autoclass:: RandomLighting - -.. autoclass:: RandomPerspective -.. autoclass:: RandomResize - - -Composing transformations ---------------------------------------------- -It is common to require several transformations to be performed consecutively. - -.. autoclass:: SampleCompose -.. autoclass:: ImageTransform -.. autoclass:: ColorInversion -.. autoclass:: OneOf -.. autoclass:: RandomApply -.. autoclass:: RandomRotate -.. autoclass:: RandomCrop diff --git a/docs/source/modules/utils.rst b/docs/source/modules/utils.rst deleted file mode 100644 index a6f4be3f13..0000000000 --- a/docs/source/modules/utils.rst +++ /dev/null @@ -1,67 +0,0 @@ -doctr.utils -=========== - -This module regroups non-core features that are complementary to the rest of the package. - -.. currentmodule:: doctr.utils - - -Visualization -------------- -Easy-to-use functions to make sense of your model's predictions. - -.. currentmodule:: doctr.utils.visualization - -.. autofunction:: visualize_page - -.. autofunction:: visualize_kie_page - -.. autofunction:: draw_boxes - -Reconstitution ---------------- - -.. currentmodule:: doctr.utils.reconstitution - -.. autofunction:: synthesize_page - -.. autofunction:: synthesize_kie_page - - -.. _metrics: - -Task evaluation ---------------- -Implementations of task-specific metrics to easily assess your model performances. - -.. currentmodule:: doctr.utils.metrics - -.. autoclass:: TextMatch - - .. automethod:: update - .. automethod:: summary - -.. autoclass:: LocalizationConfusion - - .. automethod:: update - .. automethod:: summary - -.. autoclass:: OCRMetric - - .. automethod:: update - .. automethod:: summary - -.. autoclass:: DetectionMetric - - .. automethod:: update - .. automethod:: summary - -.. autoclass:: ObjectDetectionMetric - - .. automethod:: update - .. automethod:: summary - -.. autoclass:: TableCellMetric - - .. automethod:: update - .. automethod:: summary diff --git a/docs/source/notebooks.rst b/docs/source/notebooks.rst deleted file mode 120000 index 6c3d7bfec2..0000000000 --- a/docs/source/notebooks.rst +++ /dev/null @@ -1 +0,0 @@ -../../notebooks/README.rst \ No newline at end of file diff --git a/docs/source/training/custom_models.md b/docs/source/training/custom_models.md new file mode 100644 index 0000000000..392b34546f --- /dev/null +++ b/docs/source/training/custom_models.md @@ -0,0 +1,175 @@ +# Using your trained models + +Every predictor factory accepts a model **instance** instead of an architecture name. To use your checkpoint, +build the architecture with the same settings as for training, load the weights with `from_pretrained`, and pass +the model to the predictor. Pretrained and custom models can be mixed freely. + +:::{tip} +`from_pretrained` accepts a local path or a URL. The `.json` file written next to the checkpoint +records the settings to rebuild the model with (vocabulary, class names...). +::: + +## Detection and recognition models + +::::{tab-set} + +:::{tab-item} Custom detection +```python +from doctr.models import db_resnet50, ocr_predictor + +det_model = db_resnet50(pretrained=False, pretrained_backbone=False) +det_model.from_pretrained("path/to/detection.pt", map_location="cpu") + +predictor = ocr_predictor(det_arch=det_model, reco_arch="crnn_vgg16_bn", pretrained=True) +``` +::: + +:::{tab-item} Custom recognition +```python +from doctr.models import crnn_vgg16_bn, ocr_predictor + +reco_model = crnn_vgg16_bn(pretrained=False, pretrained_backbone=False) +reco_model.from_pretrained("path/to/recognition.pt", map_location="cpu") + +predictor = ocr_predictor(det_arch="fast_base", reco_arch=reco_model, pretrained=True) +``` +::: + +:::{tab-item} Both +```python +from doctr.models import crnn_vgg16_bn, db_resnet50, ocr_predictor + +det_model = db_resnet50(pretrained=False, pretrained_backbone=False) +det_model.from_pretrained("path/to/detection.pt") +reco_model = crnn_vgg16_bn(pretrained=False, pretrained_backbone=False) +reco_model.from_pretrained("path/to/recognition.pt") + +# pretrained=True still loads the pretrained orientation classifiers when they are needed +predictor = ocr_predictor(det_arch=det_model, reco_arch=reco_model, pretrained=True) +``` +::: +:::: + +### Another vocabulary + +A recognition model trained on another vocabulary than the default (`french`) must be built with that vocabulary, +so that its output layer matches the checkpoint: + +```python +from doctr.datasets import VOCABS +from doctr.models import crnn_vgg16_bn, ocr_predictor + +reco_model = crnn_vgg16_bn(pretrained=False, pretrained_backbone=False, vocab=VOCABS["german"]) +reco_model.from_pretrained("path/to/recognition.pt") + +predictor = ocr_predictor(reco_arch=reco_model, pretrained=True) +``` + +### KIE classes + +A multi-class detection model is built with its class names, and used with the +[KIE predictor](../user_guide/kie.md): + +```python +from doctr.models import db_resnet50, kie_predictor + +det_model = db_resnet50(pretrained=False, pretrained_backbone=False, class_names=["total", "date"]) +det_model.from_pretrained("path/to/detection.pt") + +predictor = kie_predictor(det_arch=det_model, reco_arch="crnn_vgg16_bn", pretrained=True) +``` + +## Layout models + +A layout model trained on your own classes is passed through `layout_arch`. The detected regions carry your class +names: + +```python +from doctr.models import lw_detr_s, ocr_predictor + +layout_model = lw_detr_s(pretrained=False, class_names=["heading", "paragraph", "figure", "table"]) +layout_model.from_pretrained("path/to/layout.pt") + +predictor = ocr_predictor(pretrained=True, detect_layout=True, layout_arch=layout_model) +result = predictor(pages) +print([(region.type, region.confidence) for region in result.pages[0].layout]) +``` + +:::{note} +Table recognition (`detect_tables=True`) crops the regions labelled `Table`: keep this class name if your layout +model should feed the table model. +::: + +## Table structure models + +```python +from doctr.models import ocr_predictor, tablecenternet +from doctr.models.table_structure.zoo import table_predictor + +table_model = tablecenternet(pretrained=False) +table_model.from_pretrained("path/to/table.pt") + +predictor = ocr_predictor(pretrained=True, detect_tables=True) +predictor.table_predictor = table_predictor(table_model) # replace the default table model +``` + +## Orientation classifiers + +The orientation classifiers are used with `assume_straight_pages=False`, `straighten_pages=True` or +`detect_orientation=True`. Only `mobilenet_v3_small` based models are supported. Replace the default ones after +building the predictor: + +```python +from doctr.models import ( + crop_orientation_predictor, + mobilenet_v3_small_crop_orientation, + mobilenet_v3_small_page_orientation, + ocr_predictor, + page_orientation_predictor, +) + +page_model = mobilenet_v3_small_page_orientation(pretrained=False) +page_model.from_pretrained("path/to/page_orientation.pt") +crop_model = mobilenet_v3_small_crop_orientation(pretrained=False) +crop_model.from_pretrained("path/to/crop_orientation.pt") + +predictor = ocr_predictor(pretrained=True, assume_straight_pages=False, detect_orientation=True) +predictor.page_orientation_predictor = page_orientation_predictor(page_model) +predictor.crop_orientation_predictor = crop_orientation_predictor(crop_model) +``` + +## Custom pre-processing + +To change how images are resized and normalized (e.g. a model trained with another input size or other +statistics), assemble the predictors yourself: + +```python +from doctr.models import crnn_vgg16_bn, db_resnet50 +from doctr.models.detection.predictor import DetectionPredictor +from doctr.models.predictor import OCRPredictor +from doctr.models.preprocessor import PreProcessor +from doctr.models.recognition.predictor import RecognitionPredictor + +det_model = db_resnet50(pretrained=False, pretrained_backbone=False) +det_model.from_pretrained("path/to/detection.pt") +reco_model = crnn_vgg16_bn(pretrained=False, pretrained_backbone=False) +reco_model.from_pretrained("path/to/recognition.pt") + +det_predictor = DetectionPredictor( + PreProcessor((1024, 1024), batch_size=1, mean=(0.798, 0.785, 0.772), std=(0.264, 0.2749, 0.287)), + det_model, +) +reco_predictor = RecognitionPredictor( + PreProcessor( + (32, 128), preserve_aspect_ratio=True, batch_size=32, mean=(0.694, 0.695, 0.693), std=(0.299, 0.296, 0.301) + ), + reco_model, +) + +predictor = OCRPredictor(det_predictor, reco_predictor) +``` + +## Models from the Hugging Face Hub + +Models shared on the Hub are loaded with {func}`~doctr.models.factory.from_hub`, which restores the architecture and its +settings automatically. See [](sharing_models.md). diff --git a/docs/source/training/datasets.md b/docs/source/training/datasets.md new file mode 100644 index 0000000000..ead07e4a2a --- /dev/null +++ b/docs/source/training/datasets.md @@ -0,0 +1,137 @@ +# Datasets + +{mod}`doctr.datasets` provides ready-to-use public datasets, synthetic data generators, and loaders for your own +annotations. They all return samples in the format expected by the docTR models and training scripts. + +## Built-in datasets + +Public datasets are downloaded and extracted on first use (`download=True`) into `~/.cache/doctr/datasets`. + +```python +from doctr.datasets import CORD + +train_set = CORD(train=True, download=True) +sample = train_set[0] +image, target = sample.image, sample.target +``` + +The same dataset can be loaded for each task: + +::::{tab-set} + +:::{tab-item} OCR (default) +Full pages, with the boxes **and** the transcriptions of the words: + +```python +train_set = CORD(train=True, download=True) +target = train_set[0].target # {"boxes": array of shape (N, 4), "labels": [str, ...]} +``` +::: + +:::{tab-item} Detection +Full pages, with the boxes of the words only: + +```python +train_set = CORD(train=True, download=True, detection_task=True) +``` +::: + +:::{tab-item} Recognition +Word crops, with their transcription: + +```python +train_set = CORD(train=True, download=True, recognition_task=True) +image, word = train_set[0].image, train_set[0].target +``` +::: +:::: + +Add `use_polygons=True` to get rotated boxes as `(4, 2)` polygons instead of straight boxes (for recognition, +crops are then extracted along the rotated box). + +### Available datasets + +| Dataset | Detection (train / test pages) | Recognition (train / test crops) | Notes | +| --- | ---: | ---: | --- | +| {class}`~doctr.datasets.FUNSD` | 149 / 50 | 21,888 / 8,707 | English forms | +| {class}`~doctr.datasets.SROIE` | 626 / 360 | 33,608 / 19,342 | Receipts, upper-case labels | +| {class}`~doctr.datasets.CORD` | 800 / 100 | 19,370 / 2,186 | Receipts | +| {class}`~doctr.datasets.IIIT5K` | 2,000 / 3,000 | 2,000 / 3,000 | Scene text | +| {class}`~doctr.datasets.SVT` | 100 / 249 | 257 / 647 | Street view, upper-case labels | +| {class}`~doctr.datasets.SVHN` | 33,402 / 13,068 | 73,257 / 26,032 | House numbers, digits only | +| {class}`~doctr.datasets.SynthText` | 772,875 / 85,875 | ~7,100,000 / 707,470 | Synthetic | +| {class}`~doctr.datasets.IC03` | 246 / 249 | 1,156 / 1,107 | Scene text | +| {class}`~doctr.datasets.IC13` | 229 / 233 | 849 / 1,095 | Scene text, manual download | +| {class}`~doctr.datasets.IMGUR5K` | 7,149 / 796 | 207,901 / 22,672 | Handwritten, manual download | +| {class}`~doctr.datasets.MJSynth` | — | 7,581,382 / 1,337,891 | Synthetic words, manual download | +| {class}`~doctr.datasets.IIITHWS` | — | 7,141,797 / 793,533 | Handwritten words, manual download | +| {class}`~doctr.datasets.WILDRECEIPT` | 1,268 / 472 | 49,377 / 19,598 | Receipts, manual download | +| {class}`~doctr.datasets.COCOTEXT` | 13,880 / 3,261 | 59,130 / 13,258 | Natural images, legible text only, manual download | +| {class}`~doctr.datasets.DocArtefacts` | 2,700 / 300 | — | Object detection: QR codes, bar codes, logos, photos | + +Datasets marked *manual download* must be fetched from their authors' website first: pass the paths of the +extracted files to the constructor (see the [API reference](../api/datasets.md)). + +## Synthetic data + +Generators render random characters or words on the fly, which is useful to pre-train a model or to add an +alphabet to it. Both are used by the reference training scripts when no dataset is given. + +```python +from doctr.datasets import VOCABS, CharacterGenerator, WordGenerator + +# Single characters, e.g. to train a character classifier +chars = CharacterGenerator(vocab=VOCABS["german"], num_samples=1000) + +# Random words of 1 to 12 characters +words = WordGenerator(vocab=VOCABS["german"], min_chars=1, max_chars=12, num_samples=10000) +sample = words[0] # sample.image: rendered word, sample.target: its text +``` + +Both accept a `font_family` (one font or a list of fonts) to render with your own fonts. + +## Your own data + +Load annotated data stored in the [training format](train.md) of each task: + +| Class | Task | Expected files | +| --- | --- | --- | +| {class}`~doctr.datasets.DetectionDataset` | Text detection | `images/` + `labels.json` with polygons (optionally per class) | +| {class}`~doctr.datasets.RecognitionDataset` | Text recognition | word images + `labels.json` mapping each image to its text | +| {class}`~doctr.datasets.OCRDataset` | End-to-end OCR | `images/` + `labels.json` with boxes and transcriptions | +| {class}`~doctr.datasets.LayoutDataset` | Layout analysis | `images/` + `labels.json` with polygons and classes | +| {class}`~doctr.datasets.TableStructureDataset` | Table structure | `images/` + `labels.json` with cells and their logical coordinates | +| {class}`~doctr.datasets.OrientationDataset` | Orientation classification | a folder of upright images | + +```python +from doctr.datasets import DetectionDataset, OCRDataset, RecognitionDataset + +det_set = DetectionDataset(img_folder="path/to/images", label_path="path/to/labels.json") +reco_set = RecognitionDataset(img_folder="path/to/images", labels_path="path/to/labels.json") +ocr_set = OCRDataset(img_folder="path/to/images", label_file="path/to/labels.json") +``` + +## Transforms and batching + +Pass transformations with `img_transforms` (applied to the image) and `sample_transforms` (applied to the image +and its target, e.g. rotations). Datasets return images of different sizes, so resize them before batching. Batch +with a PyTorch {class}`~torch.utils.data.DataLoader` and the `collate_fn` of the dataset: + +```python +from torch.utils.data import DataLoader + +from doctr import transforms as T +from doctr.datasets import RecognitionDataset + +train_set = RecognitionDataset( + img_folder="path/to/images", + labels_path="path/to/labels.json", + img_transforms=T.Resize((32, 128), preserve_aspect_ratio=True), +) + +train_loader = DataLoader(train_set, batch_size=32, shuffle=True, collate_fn=train_set.collate_fn) +images, targets = next(iter(train_loader)) # images: (32, 3, 32, 128) tensor, targets: list of 32 strings +``` + +{mod}`doctr.transforms` provides document-specific augmentations (shadows, glare, perspective, rotations...). See +the [API reference](../api/transforms.md) and the reference training scripts for complete pipelines. diff --git a/docs/source/training/index.md b/docs/source/training/index.md new file mode 100644 index 0000000000..7cd3fb8b10 --- /dev/null +++ b/docs/source/training/index.md @@ -0,0 +1,63 @@ +# Training + +The pretrained models work well on common printed documents. When your documents are different (another +language, handwriting, unusual fonts, specific layouts, fields to extract), **fine-tuning** a model on a few hundred +annotated samples usually brings a large improvement. + +## The workflow + +```{raw} html +
          +
        1. Collect and annotate a representative sample of your documents, e.g. with the + docTR Labeler.
        2. +
        3. Format the data as an images/ folder and a labels.json file, + following the format of each task.
        4. +
        5. Train with the reference script of the task, starting from the pretrained weights.
        6. +
        7. Evaluate the checkpoint on held-out data with the evaluation script.
        8. +
        9. Load your checkpoint into a predictor, alongside the pretrained models.
        10. +
        11. Share it on the Hugging Face Hub, if you like.
        12. +
        +``` + +## In this section + +::::{grid} 1 2 2 2 +:gutter: 3 + +:::{grid-item-card} {octicon}`database;1.1em` Datasets +:link: datasets +:link-type: doc + +Built-in public datasets, synthetic data generators and loaders for your own data. +::: + +:::{grid-item-card} {octicon}`mortar-board;1.1em` Training a model +:link: train +:link-type: doc + +Data formats, training scripts, multi-GPU and mixed precision, for every task. +::: + +:::{grid-item-card} {octicon}`plug;1.1em` Using your trained models +:link: custom_models +:link-type: doc + +Load your checkpoints into the OCR, KIE and task-specific predictors. +::: + +:::{grid-item-card} {octicon}`share;1.1em` Sharing models +:link: sharing_models +:link-type: doc + +Publish and load models with the Hugging Face Hub, and browse community models. +::: +:::: + +```{toctree} +:hidden: + +datasets +train +custom_models +sharing_models +``` diff --git a/docs/source/training/sharing_models.md b/docs/source/training/sharing_models.md new file mode 100644 index 0000000000..62450d06fe --- /dev/null +++ b/docs/source/training/sharing_models.md @@ -0,0 +1,70 @@ +# Sharing models + +docTR is integrated with the [Hugging Face Hub](https://huggingface.co/models?library=doctr): load models shared by +the community in one line, and publish your own. + +## Load a model from the Hub + +{func}`~doctr.models.factory.from_hub` downloads a model and rebuilds it with its configuration (architecture, vocabulary, +classes...). Plug it into any predictor: + +```python +from doctr.io import DocumentFile +from doctr.models import from_hub, ocr_predictor + +det_model = from_hub("Felix92/doctr-torch-db-mobilenet-v3-large") +reco_model = from_hub("Felix92/doctr-torch-parseq-multilingual-v1") + +predictor = ocr_predictor(det_arch=det_model, reco_arch=reco_model) +result = predictor(DocumentFile.from_images("path/to/page.jpg")) +``` + +## Publish a model + +You need a [Hugging Face account](https://huggingface.co/join) and [Git LFS](https://git-lfs.com) installed. + +```python +from doctr.models import login_to_hub, push_to_hf_hub, recognition + +login_to_hub() # paste an access token with write permissions + +model = recognition.crnn_mobilenet_v3_large(pretrained=True) +push_to_hf_hub( + model, + model_name="doctr-crnn-mobilenet-v3-large-french-v1", + task="recognition", # classification, detection, recognition, layout or table_structure + arch="crnn_mobilenet_v3_large", +) +``` + +Existing repositories are never overwritten. The reference training scripts can also publish the model at the end +of the training: + +```bash +python references/recognition/train.py crnn_mobilenet_v3_large --name doctr-crnn-mobilenet-v3-large --push-to-hub +``` + +### Naming conventions + +| Task | Suggested name | +| --- | --- | +| Classification | `doctr--` | +| Detection | `doctr-` | +| Recognition | `doctr--` | +| Layout | `doctr-` | +| Table structure | `doctr-` | + +## Community models + +Models trained and shared by the community. Open a pull request to add yours! + +| Task | Architecture | Repository | Language | +| --- | --- | --- | --- | +| Detection | `db_resnet50` | [`rania-sr/doctr-Detection-model-v1-arabic`](https://huggingface.co/rania-sr/doctr-Detection-model-v1-arabic) | Arabic | +| Recognition | `parseq` | [`Felix92/doctr-torch-parseq-multilingual-v1`](https://huggingface.co/Felix92/doctr-torch-parseq-multilingual-v1) | Multilingual | +| Recognition | `parseq` | [`rania-sr/doctr-model-v1-arabic`](https://huggingface.co/rania-sr/doctr-model-v1-arabic) | Arabic | +| Recognition | `crnn_vgg16_bn` | [`tilman-rassy/doctr-crnn-vgg16-bn-fascan-v1`](https://huggingface.co/tilman-rassy/doctr-crnn-vgg16-bn-fascan-v1) | French + German + § | + +Dummy models, handy for tests: [`Felix92/doctr-dummy-torch-resnet18`](https://huggingface.co/Felix92/doctr-dummy-torch-resnet18) (classification), +[`Felix92/doctr-dummy-torch-lw-detr-s`](https://huggingface.co/Felix92/doctr-dummy-torch-lw-detr-s) (layout) and +[`Felix92/doctr-dummy-torch-tablecenternet`](https://huggingface.co/Felix92/doctr-dummy-torch-tablecenternet) (table structure). diff --git a/docs/source/training/train.md b/docs/source/training/train.md new file mode 100644 index 0000000000..fa0b22657e --- /dev/null +++ b/docs/source/training/train.md @@ -0,0 +1,233 @@ +# Training a model + +The [`references/`](https://github.com/mindee/doctr/tree/main/references) folder of the repository contains +ready-to-use training, evaluation and latency scripts for every task. This page summarizes how to use them; each +task folder has a README with all the details. + +## Setup + +The scripts live in the repository, not in the package. Clone it and install the extra requirements: + +```bash +git clone https://github.com/mindee/doctr.git +cd doctr +pip install -e . +pip install -r references/requirements.txt +``` + +All scripts share the same interface: the architecture as first argument, `--train_path` and `--val_path` +pointing to your data, and options such as `--epochs`, `--batch_size`, `--lr`, `--pretrained` (start from the +pretrained weights, recommended for fine-tuning) or `--name` (experiment name). Run any script with `--help` to +list them all. + +:::{tip} +Annotating data is the hardest part. The [docTR Labeler](../community/tools.md#doctr-labeler) lets you draw and +correct polygons with automatic suggestions, and exports the formats below. +::: + +## Data formats + +Every task uses the same layout on disk, one folder per split: + +```text +train_set/ +├── images/ +│ ├── sample_img_01.png +│ ├── sample_img_02.png +│ └── ... +└── labels.json +``` + +`labels.json` maps each image file name to its annotation, which depends on the task. Coordinates are **absolute +pixel coordinates**. + +::::{tab-set} + +:::{tab-item} Detection +```{code-block} javascript +:caption: labels.json + +{ + "sample_img_01.png": { + "img_dimensions": [900, 600], + "img_hash": "", + "polygons": [[[x1, y1], [x2, y2], [x3, y3], [x4, y4]], ...] + } +} +``` + +For a multi-class model (e.g. for [KIE](../user_guide/kie.md)), `polygons` is a dictionary with one list per class: + +```javascript +"polygons": { + "date": [[[x1, y1], [x2, y2], [x3, y3], [x4, y4]], ...], + "total": [[[x1, y1], [x2, y2], [x3, y3], [x4, y4]], ...] +} +``` + +Every class must appear in both splits; an image without a box of a class has an empty list for it. +::: + +:::{tab-item} Recognition +`images/` contains **word crops** and `labels.json` their transcription, in UTF-8: + +```{code-block} javascript +:caption: labels.json + +{ + "img_1.jpg": "I", + "img_2.jpg": "am", + "img_3.jpg": "a", + "img_4.jpg": "Jedi" +} +``` + +Labels must not contain spaces, and their characters must be part of the vocabulary you train with. +::: + +:::{tab-item} Layout +```{code-block} javascript +:caption: labels.json + +{ + "sample_img_01.png": { + "img_dimensions": [900, 600], + "img_hash": "", + "polygons": [[[x1, y1], [x2, y2], [x3, y3], [x4, y4]], ...], + "classes": ["Title", "Text", ...] + } +} +``` +::: + +:::{tab-item} Table structure +`images/` contains images of **tables**: + +```{code-block} javascript +:caption: labels.json + +{ + "sample_img_01.png": { + "cells": [[[x1, y1], [x2, y2], [x3, y3], [x4, y4]], ...], + "logic": [[start_col, end_col, start_row, end_row], ...] + } +} +``` + +Cell polygons are ordered top-left, top-right, bottom-right, bottom-left. Logical coordinates are 0-indexed and +inclusive: a cell spanning one row and one column has equal start and end indices. +::: + +:::{tab-item} Orientation +No labels: a folder of **upright** images. The script rotates them to generate the training targets. + +```text +train_set/ +├── sample_img_01.png +├── sample_img_02.png +└── ... +``` +::: +:::: + +## Train + +### Text detection + +```bash +python references/detection/train.py db_resnet50 \ + --train_path path/to/train_set --val_path path/to/val_set \ + --epochs 5 --pretrained +``` + +Add `--rotation` to train on rotated documents. Built-in datasets can replace local folders: +`--train_datasets FUNSD CORD --val_datasets FUNSD`. +[Full guide](https://github.com/mindee/doctr/tree/main/references/detection#readme). + +### Text recognition + +```bash +python references/recognition/train.py crnn_vgg16_bn \ + --train_path path/to/train_set --val_path path/to/val_set \ + --vocab german --epochs 5 --pretrained +``` + +`--vocab` selects one of the [vocabularies](../models/vocabs.md) (`french` by default). Without any dataset, the +script trains on synthetic words generated from the vocabulary, optionally with your own fonts (`--font`). +[Full guide](https://github.com/mindee/doctr/tree/main/references/recognition#readme). + +### Layout analysis + +```bash +python references/layout/train.py lw_detr_s \ + --train_path path/to/train_set --val_path path/to/val_set --epochs 5 +``` + +[Full guide](https://github.com/mindee/doctr/tree/main/references/layout#readme). + +### Table structure + +```bash +python references/table/train.py tablecenternet \ + --train_path path/to/train_set --val_path path/to/val_set --epochs 5 +``` + +[Full guide](https://github.com/mindee/doctr/tree/main/references/table#readme), including a toy dataset to try +the pipeline end to end. + +### Orientation classifiers + +```bash +# --type page for whole pages, --type crop for word crops +python references/classification/train_orientation.py mobilenet_v3_small_page_orientation \ + --type page --train_path path/to/train_set --val_path path/to/val_set --epochs 5 +``` + +[Full guide](https://github.com/mindee/doctr/tree/main/references/classification#readme). + +## Hardware + +::::{tab-set} + +:::{tab-item} Single GPU +Every script accepts `--device`: a CUDA index (`0`), `cuda:N`, `mps` or `cpu`. By default, the script picks CUDA, +then MPS, then the CPU. + +`--amp` enables automatic mixed precision on CUDA; add `--amp-dtype bfloat16` on Ampere GPUs or newer to avoid the +overflows of float16: + +```bash +python references/detection/train.py db_resnet50 --train_path train --val_path val \ + --device 0 --amp --amp-dtype bfloat16 +``` +::: + +:::{tab-item} Multi-GPU +Launch the same scripts with [`torchrun`](https://pytorch.org/docs/stable/elastic/run.html) to train with +DistributedDataParallel: + +```bash +CUDA_VISIBLE_DEVICES=0,2 torchrun --nproc_per_node=2 references/detection/train.py db_resnet50 \ + --train_path train --val_path val --epochs 5 --backend nccl +``` +::: + +:::{tab-item} Apple Silicon +```bash +# Let the few operations MPS lacks fall back to the CPU +PYTORCH_ENABLE_MPS_FALLBACK=1 python references/detection/train.py db_resnet50 \ + --train_path train --val_path val --device mps +``` +::: +:::: + +## Outputs, logging and evaluation + +- **Checkpoints** are saved in `--output_dir` as `.pt`, next to a `.json` file + with the run metadata: architecture and task settings (vocabulary, class names...), dataset hashes, library + versions and all the arguments. +- **Tracking**: `--wb` logs to Weights & Biases and `--clearml` to ClearML. +- **Evaluation**: each task folder has an `evaluate.py` script, and a `latency.py` script to benchmark speed. +- **Sharing**: `--push-to-hub` publishes the final model on the [Hugging Face Hub](sharing_models.md). + +Then [load your checkpoint](custom_models.md) into a predictor. diff --git a/docs/source/user_guide/artefacts.md b/docs/source/user_guide/artefacts.md new file mode 100644 index 0000000000..249d1fe508 --- /dev/null +++ b/docs/source/user_guide/artefacts.md @@ -0,0 +1,56 @@ +# Artefact detection + +The `doctr.contrib` module gathers complementary features that are useful in document pipelines but are not part +of the core OCR. Its first member, {class}`~doctr.contrib.ArtefactDetector`, finds non-textual elements on a page: +**bar codes, QR codes, logos and photos**. + +:::{note} +Contrib modules run on [ONNX Runtime](https://onnxruntime.ai) instead of PyTorch. Install the extra first: + +```bash +pip install "python-doctr[contrib]" +# or, for GPU inference: pip install onnxruntime-gpu +``` +::: + +## Detect artefacts + +```python +from doctr.contrib import ArtefactDetector +from doctr.io import DocumentFile + +pages = DocumentFile.from_images(["path/to/page.jpg"]) + +detector = ArtefactDetector(batch_size=2, conf_threshold=0.5, iou_threshold=0.5) +results = detector(pages) + +for artefact in results[0]: # one list per page + print(artefact["label"], artefact["confidence"], artefact["box"]) +# e.g. qr_code 0.91 [812, 64, 1003, 255] + +detector.show() # requires the `viz` extra +``` + +Each artefact is a dict with a `label`, a `confidence` and a `box` as `[xmin, ymin, xmax, ymax]` in **pixels**. + +| Parameter | Default | Description | +| ----------------- | ------- | -------------------------------------------------------------- | +| `batch_size` | `2` | Number of pages processed at once | +| `conf_threshold` | `0.5` | Minimum confidence of a detection | +| `iou_threshold` | `0.5` | Overlap above which duplicate detections are merged (NMS) | + +## Use your own YOLOv8 model + +The detector is based on [YOLOv8](https://github.com/ultralytics/ultralytics). You can run any YOLOv8 detection +model exported to ONNX, e.g. one trained to find tables, stamps or signatures: + +```python +from doctr.contrib import ArtefactDetector + +detector = ArtefactDetector(model_path="path/to/your/model.onnx", labels=["table", "figure"]) +``` + +:::{important} +The model must be exported to ONNX **with a dynamic batch size**. Oriented bounding box (OBB) models are not +supported. +::: diff --git a/docs/source/user_guide/cli.md b/docs/source/user_guide/cli.md new file mode 100644 index 0000000000..f928c8788e --- /dev/null +++ b/docs/source/user_guide/cli.md @@ -0,0 +1,135 @@ +# Command-line interface + +`doctr-cli` runs the complete OCR pipeline on images and PDFs from your terminal, and writes the result as JSON, +plain text, Markdown, AsciiDoc, HTML or hOCR. It is installed with the package. + +```bash +doctr-cli --input_path invoice.pdf --output invoice.json +``` + +## Common recipes + +::::{tab-set} + +:::{tab-item} Text +```bash +doctr-cli --input_path scan.jpg --output scan.txt +``` +::: + +:::{tab-item} Markdown with tables +```bash +doctr-cli --input_path report.pdf --detect_tables --output report.md +``` +::: + +:::{tab-item} Several files +Every page of every input is appended to a single document: + +```bash +doctr-cli --input_path page1.jpg page2.jpg annex.pdf --output dossier.json +``` +::: + +:::{tab-item} Rotated scans +```bash +doctr-cli --input_path skewed.pdf --straighten_pages --output skewed.txt +``` +::: + +:::{tab-item} GPU & hOCR +On a CUDA device of compute capability 8.0 or newer, the models run in bfloat16: + +```bash +doctr-cli --input_path doc.pdf --device cuda:0 --output doc.xml +``` +::: + +:::{tab-item} Web page +Requires the `html` extra: + +```bash +doctr-cli --input_path https://www.example.com --output page.md +``` +::: +:::: + +The format is **inferred from the extension** of `--output` (`.json`, `.txt`, `.md`, `.adoc`, `.html`, `.xml`) and +falls back to JSON. Use `--format` to set it explicitly. + +## Arguments + +Run `doctr-cli --help` for the full list with default values. + +### Input + +| Argument | Default | Description | +| ----------------- | ------- | ------------------------------------------------------------------------------------------- | +| `--input_path` | — | **Required.** One or more images, PDF files, or `http(s)://` URLs of web pages | +| `--pdf_password` | `None` | Password of encrypted PDF files | +| `--pdf_scale` | `2` | PDF rendering scale (1 corresponds to 72 dpi) | + +### Models + +| Argument | Default | Description | +| --------------- | ----------------- | --------------------------------------------------------------------------------- | +| `--det_arch` | `fast_base` | Detection architecture | +| `--reco_arch` | `crnn_vgg16_bn` | Recognition architecture | +| `--layout_arch` | `lw_detr_s` | Layout architecture | +| `--device` | `auto` | `auto`, `cpu`, `cuda`, `cuda:1`, `mps`... (`auto` picks a GPU when available) | + +### Processing + +| Argument | Default | Description | +| ------------------------------------------------ | --------- | ---------------------------------------------------------------------- | +| `--assume_straight_pages` / `--no-assume_straight_pages` | on | Handle pages as straight (see [](rotated_documents.md)) | +| `--straighten_pages` | off | Straighten rotated pages before reading them | +| `--preserve_aspect_ratio` / `--no-preserve_aspect_ratio` | on | Pad pages instead of stretching them | +| `--symmetric_pad` / `--no-symmetric_pad` | on | Pad on all sides | +| `--det_bs`, `--reco_bs` | `2`, `128`| Batch sizes of the detection and recognition models | +| `--bin_thresh`, `--box_thresh` | model | [Detection thresholds](ocr_predictor.md#tune-the-text-detection), between 0 and 1 | +| `--confidence_aggregation` | model | `mean`, `min`, `max`, `median`, `geometric_mean` or `harmonic_mean` | +| `--detect_orientation` | off | Estimate the orientation of each page | +| `--detect_language` | off | Estimate the language of each page | +| `--detect_layout` | off | Attach the layout regions to each page | +| `--detect_tables` | off | Recognize tables (enables the layout model) | +| `--ignore_regions CLASS [CLASS ...]` | none | Layout classes to mask before OCR, e.g. `Picture Table` | +| `--export_as_straight_boxes` | off | Export straight boxes with `--no-assume_straight_pages` | +| `--preserve_original_coords` | off | With `--straighten_pages`, map the boxes back to the original pages | +| `--disable_page_orientation` | off | Skip the page orientation classifier | +| `--disable_crop_orientation` | off | Skip the crop orientation classifier | + +### Document assembly + +| Argument | Default | Description | +| ----------------------------------------- | ------- | --------------------------------------------------- | +| `--resolve_lines` / `--no-resolve_lines` | on | Group words into lines | +| `--resolve_blocks` | off | Group lines into blocks | +| `--paragraph_break` | `0.035` | Relative space that splits a line | +| `--keep_reading_order` | off | Sort the content of each page in reading order | + +### Output + +| Argument | Default | Description | +| ------------------------------------------------- | ----------------------------- | --------------------------------------------------------------------------- | +| `--output` | `results.json` | Output file | +| `--format` | from extension | `json`/`dict`, `txt`/`text`, `md`/`markdown`, `adoc`/`asciidoc`, `html`, `xml`/`hocr` | +| `--direction` | `auto` | Reading direction: `auto`, `ltr`, `rtl`, `ttb-rtl`, `ttb-ltr` | +| `--reading_order` / `--no-reading_order` | on | Linearize JSON and hOCR exports in reading order | +| `--escape` / `--no-escape` | on | Escape markup characters (Markdown, AsciiDoc) | +| `--include_furniture` / `--no-include_furniture` | on | Include page headers, footers and footnotes | +| `--images` | `placeholder` | Figures in Markdown, AsciiDoc and HTML: `none`, `placeholder`, `embedded`, `referenced` (see [figures](exporting.md#figures)) | +| `--image_dir` | `_images` | Directory of the figures with `--images referenced` | +| `--image_format` | `png` | `png`, `jpg`, `jpeg` or `webp` | +| `--file_title` | `docTR - XML export (hOCR)` | Title of the hOCR files | +| `--indent` | `4` | Indentation of the JSON export | +| `--quiet` | off | Only log errors | +| `--version` | | Print the docTR version and exit | + +## Output files + +- **JSON** contains the full structure: pages (dimensions, orientation, language, layout), blocks, lines and words + with their confidence and geometry, and the tables with `--detect_tables`. +- **Text-like formats** (`txt`, `md`, `adoc`, `html`) are written to a single file. +- **hOCR** describes one page per file: `--output doc.xml` on a three-page document writes `doc_page_1.xml`, + `doc_page_2.xml` and `doc_page_3.xml`. diff --git a/docs/source/user_guide/exporting.md b/docs/source/user_guide/exporting.md new file mode 100644 index 0000000000..b2e87a8ddf --- /dev/null +++ b/docs/source/user_guide/exporting.md @@ -0,0 +1,210 @@ +# Exporting results + +A {class}`~doctr.io.Document` can be exported to six formats. All of them present the content in the same +**reading order**, which follows columns, places headers and footers, and adapts to right-to-left scripts. + +| Format | Method | Output | Best for | +| ------------- | ------------------------------------------------------- | ---------------------------------------- | ------------------------------------------- | +| Plain text | {meth}`~doctr.io.Document.render` | `str` | Search indexing, NLP, LLM prompts | +| JSON | {meth}`~doctr.io.Document.export` | `dict` | Storing every word with its geometry | +| Markdown | {meth}`~doctr.io.Document.export_as_markdown` | `str` | LLMs, RAG pipelines, readable documents | +| AsciiDoc | {meth}`~doctr.io.Document.export_as_asciidoc` | `str` | Technical documentation toolchains | +| HTML | {meth}`~doctr.io.Document.export_as_html` | `str` | Web display | +| hOCR (XML) | {meth}`~doctr.io.Document.export_as_xml` | `list[tuple[bytes, ElementTree]]` | Searchable PDFs, OCR interoperability | + +The same methods exist on a single {class}`~doctr.io.Page`. The {meth}`~doctr.io.Document.export_as` dispatcher +selects the format by name, which is convenient when it comes from a configuration: + +```python +result.export_as("markdown") # or "md" +result.export_as("asciidoc") # or "adoc" +result.export_as("html") +result.export_as("text") # or "txt", same as render() +result.export_as("json") # or "dict", same as export() +result.export_as("xml") # or "hocr", same as export_as_xml() +``` + +## Plain text + +```python +text = result.render() +``` + +Blocks are separated by a blank line and pages by three blank lines. Both separators are configurable, and page +headers and footers can be left out: + +```python +text = result.render(page_break="\f", include_furniture=False) +``` + +## Markdown, AsciiDoc and HTML + +```python +markdown = result.export_as_markdown() +asciidoc = result.export_as_asciidoc() +html = result.export_as_html() +``` + +The structure of these exports depends on what the predictor detected: + +- **Without layout analysis**, blocks become paragraphs. +- **With layout analysis** (`detect_layout=True`), the layout regions are used to render titles and section + headers as headings, list items as lists, and to place the page furniture (headers, footers, footnotes). +- **With table recognition** (`detect_tables=True`), tables are rendered as real tables. + +::::{tab-set} + +:::{tab-item} Markdown +```markdown +## ACME Office Supplies + +42 Harbour Road, Hamburg + +## Bill to: + +Jane Doe + +12 Market Street, Berlin + +INVOICE + +No. 2026-0412 +Date: 26/10/2026 + +| Description | Qty | Unit price | Amount | +| --- | --- | --- | --- | +| Recycled paper A4 | 10 | 8.50 | 85.00 | +| Ballpoint pens (box) | 5 | 12.00 | 60.00 | +| Desk lamp | 2 | 45.00 | 90.00 | +| Office chair | 1 | 1,015.00 | 1,015.00 | + +Total due + +1,250.00 EUR +``` +::: + +:::{tab-item} HTML +```html +

        ACME Office Supplies

        +

        42 Harbour Road, Hamburg

        +

        Bill to:

        +

        Jane Doe

        +

        12 Market Street, Berlin

        +

        INVOICE

        +

        No. 2026-0412
        +Date: 26/10/2026

        + + + +... +
        DescriptionQtyUnit priceAmount
        Recycled paper A4108.5085.00
        +

        Total due

        +

        1,250.00 EUR

        +``` +::: +:::: + +*Output of `ocr_predictor(pretrained=True, detect_tables=True)` on the +{download}`sample invoice <../_static/images/examples/invoice.pdf>`.* + +Useful options: + +`escape` (Markdown, AsciiDoc) +: Escape the characters that carry a meaning in the markup (`*`, `#`, `|`...). Enabled by default. + +`include_furniture` +: Include page headers, page footers and footnotes. Enabled by default. + +`page_break` +: The separator inserted between pages: `---` in Markdown, `<<<` in AsciiDoc, `
        ` in HTML. + +`images` +: How figures are rendered, see [](#figures) below. + +## hOCR + +[hOCR](https://github.com/kba/hocr-spec) is an open standard to store OCR results in XML. docTR produces one hOCR +document per page, as raw bytes and as an {class}`xml.etree.ElementTree.ElementTree`: + +```python +for page_idx, (xml_bytes, xml_tree) in enumerate(result.export_as_xml()): + with open(f"page_{page_idx + 1}.hocr", "wb") as f: + f.write(xml_bytes) +``` + +hOCR files are the input of tools such as [hocr-tools](https://github.com/ocropus/hocr-tools) or +[OCRmyPDF](https://ocrmypdf.readthedocs.io). The +[Export as PDF/A notebook](https://github.com/mindee/notebooks/blob/main/doctr/export_as_pdfa.ipynb) shows how to +turn docTR results into **searchable PDFs**. + +## Reading order + +Every export path shares the same linearization of the page, computed once and memoized. It: + +- follows the **columns** of multi-column layouts instead of reading straight across the page, +- infers the **reading direction** from the recognized text (right-to-left for Arabic or Hebrew, for instance), +- uses the **layout regions**, when available, to order blocks, headings, tables and figures and to place the + page furniture. + +Force the direction when automatic detection is not what you want: + +```python +result.export_as_markdown(direction="rtl") # 'auto', 'ltr', 'rtl', 'ttb-rtl' or 'ttb-ltr' +``` + +To get the elements of a page (blocks, tables and optionally figures) in reading order, for your own exporter: + +```python +for item in result.pages[0].items_in_reading_order(include_figures=True): + print(type(item).__name__, item.render()[:40]) +``` + +The JSON export follows the reading order by default (`export(reading_order=False)` keeps the detection order). To +sort the `Document` tree itself, build the predictor with `keep_reading_order=True`. + +## Figures + +When the layout model runs (`detect_layout=True` or `detect_tables=True`), the regions it labels as figures +(pictures, charts...) take part in the reading order. The Markdown, AsciiDoc and HTML exports render them according +to their `images` argument: + +| Mode | Rendering | +| ---------------------------- | ----------------------------------------------------------------------------------------- | +| `"placeholder"` *(default)* | A comment marks the figure: `` (Markdown, HTML) or `// image` (AsciiDoc) | +| `"none"` | Figures are left out | +| `"embedded"` | Each figure is cropped and inlined as a base64 data URI: the export is self-contained | +| `"referenced"` | Each crop is written to a directory and linked by its relative path | + +```python +from doctr.io import DocumentFile, FigureEncoder +from doctr.models import ocr_predictor + +predictor = ocr_predictor(pretrained=True, detect_layout=True) +result = predictor(DocumentFile.from_pdf("report.pdf")) + +# A self-contained Markdown file, figures included +markdown = result.export_as_markdown(images="embedded") + +# A Markdown file linking to the crops written to `assets/` +markdown = result.export_as_markdown(images=FigureEncoder("referenced", image_dir="assets")) +``` + +{class}`~doctr.io.FigureEncoder` also sets the image format (`png`, `jpg`, `webp`), the quality of lossy formats, +a padding around each crop, and a `path_prefix` when the export is not written next to the image directory. +Crop file names contain the position and a hash of the figure (e.g. `page1_figure2-3fa2b1c9.png`), so several +documents can share a directory. + +:::{note} +Once a figure carries its pixels (`"embedded"` and `"referenced"`), the text recognized inside it is left out of +the export, since the image shows it, and its caption becomes the alternative text of the image. Plain text never +contains figures, and hOCR positions them as `ocr_photo` areas. +::: + +## From the command line + +The [CLI](cli.md) exposes all these formats; the format is inferred from the extension of the output file: + +```bash +doctr-cli --input_path report.pdf --detect_layout --output report.md --images referenced +``` diff --git a/docs/source/user_guide/faq.md b/docs/source/user_guide/faq.md new file mode 100644 index 0000000000..80e3f9b2df --- /dev/null +++ b/docs/source/user_guide/faq.md @@ -0,0 +1,112 @@ +# Troubleshooting & FAQ + +## Installation and setup + +:::{dropdown} `ModuleNotFoundError: No module named 'matplotlib'` when calling `.show()` +:open: + +Visualization relies on optional dependencies. Install the `viz` extra: + +```bash +pip install "python-doctr[viz]" +``` + +Similarly, `DocumentFile.from_url` needs the `html` extra and the `contrib` module needs the `contrib` extra +(see [](../getting_started/installation.md#optional-extras)). +::: + +:::{dropdown} The pretrained weights cannot be downloaded +Weights are downloaded on first use. Behind a proxy or on a machine without internet access, download them once +on a connected machine and copy the cache directory (`~/.cache/doctr` by default), or point `DOCTR_CACHE_DIR` to +a shared location. See [](../deployment/configuration.md). +::: + +:::{dropdown} Errors in a restricted environment (AWS Lambda, read-only file systems) +docTR writes its model cache to `~/.cache/doctr` and uses multiprocessing for some data operations. Set +`DOCTR_CACHE_DIR` to a writable directory and `DOCTR_MULTIPROCESSING_DISABLE=TRUE` +(see [](../deployment/configuration.md#aws-lambda)). +::: + +## Inputs + +:::{dropdown} `ValueError: incorrect input shape` +Predictors expect a **list** of pages, each a 3-channel array of shape `(H, W, 3)`. Wrap a single page in a list +(`predictor([page])`) and convert grayscale images to 3 channels: + +```python +import numpy as np + +page = np.stack([gray] * 3, axis=-1) +``` +::: + +:::{dropdown} The results are wrong on images loaded with OpenCV +OpenCV loads images in **BGR** order, while docTR expects **RGB**. Convert them first, or use +`DocumentFile.from_images`, which handles it for you: + +```python +import cv2 + +page = cv2.cvtColor(cv2.imread("scan.jpg"), cv2.COLOR_BGR2RGB) +``` +::: + +:::{dropdown} Does docTR use the text layer of digital PDFs? +No: every page is rendered to an image and read by the models, so scanned and digital-born PDFs are processed the +same way. If your PDFs have a reliable text layer and you only need the text, a PDF text extractor is faster. +::: + +## Accuracy + +:::{dropdown} Some words are missing +- Small print: render PDFs at a higher resolution, e.g. `DocumentFile.from_pdf(path, scale=3)`. +- Faint or low-contrast text: lower the detection thresholds (`bin_thresh`, `box_thresh`), see + [](ocr_predictor.md#tune-the-text-detection). +- Very large images: keep `preserve_aspect_ratio=True` (default) so the page is not distorted. +::: + +:::{dropdown} The output contains odd characters (accents, symbols) that are not in my documents +Restrict the recognition model to the characters you expect with a whitelist, see +[](ocr_predictor.md#restrict-the-output-characters). +::: + +:::{dropdown} My documents are in a language with another alphabet +The pretrained recognition models are trained on the `french` vocabulary (Latin script). For other scripts, look for +a [community model](../training/sharing_models.md#community-models) on the Hugging Face Hub, or +[train a model](../training/train.md) on a matching [vocabulary](../models/vocabs.md). +::: + +:::{dropdown} The text is read in the wrong order +Use an export method (`render()`, Markdown, HTML...), which applies the reading-order algorithm, rather than +iterating the blocks. Enable `detect_layout=True` for complex layouts, and set `direction` if the automatic +detection fails. See [](exporting.md#reading-order). +::: + +:::{dropdown} Rotated pages give poor results +The default mode assumes upright pages. Use `straighten_pages=True` or `assume_straight_pages=False` +(see [](rotated_documents.md)). +::: + +## Performance + +:::{dropdown} OCR is slow +- Run on a GPU, and use half precision (see [](../deployment/performance.md)). +- Create the predictor **once** and reuse it. +- Pass several pages per call and increase `det_bs` / `reco_bs` if your hardware allows it. +- Try lighter architectures (`fast_tiny`, `crnn_mobilenet_v3_small`), see the [model zoo](../models/index.md). +- Keep `assume_straight_pages=True` when your pages are upright. +::: + +:::{dropdown} I run out of GPU memory +Lower the batch sizes (`det_bs`, `reco_bs`), process fewer pages per call, or render PDFs at a lower `scale`. +::: + +## Still stuck? + +Search the [GitHub issues](https://github.com/mindee/doctr/issues) and +[discussions](https://github.com/mindee/doctr/discussions), or ask the community (see [](../community/index.md)). +When opening an issue, include the output of: + +```bash +python scripts/collect_env.py +``` diff --git a/docs/source/user_guide/index.md b/docs/source/user_guide/index.md new file mode 100644 index 0000000000..8c09b7a4b7 --- /dev/null +++ b/docs/source/user_guide/index.md @@ -0,0 +1,124 @@ +# User guide + +The user guide explains how to get the most out of docTR on your own documents, one topic at a time. Each page +is self-contained and full of examples you can copy. + +## The essentials + +::::{grid} 1 2 2 2 +:gutter: 3 + +:::{grid-item-card} {octicon}`file;1.1em` Loading documents +:link: loading_documents +:link-type: doc + +Read PDFs, images, web pages and in-memory data into pages. +::: + +:::{grid-item-card} {octicon}`gear;1.1em` Running OCR +:link: ocr_predictor +:link-type: doc + +Choose the models and configure the end-to-end OCR predictor. +::: + +:::{grid-item-card} {octicon}`list-unordered;1.1em` Working with results +:link: results +:link-type: doc + +Navigate the `Document`, convert coordinates, visualize and save predictions. +::: + +:::{grid-item-card} {octicon}`file-code;1.1em` Exporting results +:link: exporting +:link-type: doc + +Text, JSON, Markdown, AsciiDoc, HTML and hOCR, in reading order. +::: +:::: + +## Beyond plain text + +::::{grid} 1 2 2 2 +:gutter: 3 + +:::{grid-item-card} {octicon}`table;1.1em` Layout analysis & tables +:link: layout_and_tables +:link-type: doc + +Detect titles, figures and tables, and extract tables as row/column grids. +::: + +:::{grid-item-card} {octicon}`sync;1.1em` Rotated documents +:link: rotated_documents +:link-type: doc + +Read skewed scans, photos and pages in any orientation. +::: + +:::{grid-item-card} {octicon}`tag;1.1em` Key information extraction +:link: kie +:link-type: doc + +Detect several classes of fields (dates, amounts...) and read them in one pass. +::: + +:::{grid-item-card} {octicon}`package;1.1em` Task-specific predictors +:link: standalone_predictors +:link-type: doc + +Use the detection, recognition, layout, table and orientation models on their own. +::: + +:::{grid-item-card} {octicon}`image;1.1em` Artefact detection +:link: artefacts +:link-type: doc + +Find logos, QR codes, barcodes and photos with the `contrib` module. +::: + +:::{grid-item-card} {octicon}`terminal;1.1em` Command-line interface +:link: cli +:link-type: doc + +Run OCR on files from your terminal with `doctr-cli`. +::: +:::: + +## When something goes wrong + +:::{card} {octicon}`question;1.1em` Troubleshooting & FAQ +:link: faq +:link-type: doc + +Solutions to the most common installation, input and accuracy issues. +::: + +```{toctree} +:hidden: +:caption: The essentials + +loading_documents +ocr_predictor +results +exporting +``` + +```{toctree} +:hidden: +:caption: Beyond plain text + +layout_and_tables +rotated_documents +kie +standalone_predictors +artefacts +cli +``` + +```{toctree} +:hidden: +:caption: Help + +faq +``` diff --git a/docs/source/user_guide/kie.md b/docs/source/user_guide/kie.md new file mode 100644 index 0000000000..5587d1ff7f --- /dev/null +++ b/docs/source/user_guide/kie.md @@ -0,0 +1,73 @@ +# Key information extraction + +The OCR predictor finds *all* the words of a page. Often you only care about a few fields: the date, the total +amount, the invoice number... The **KIE predictor** (Key Information Extraction) uses a detection model trained on +several classes, so that each detected box comes with the *type* of information it contains. + +## How it differs from OCR + +| | {func}`~doctr.models.ocr_predictor` | {func}`~doctr.models.kie_predictor` | +| --- | --- | --- | +| Detection model | One class: `words` | Any number of classes (`date`, `total`, `address`...) | +| Output | {class}`~doctr.io.Document` of pages, blocks, lines and words | {class}`~doctr.io.KIEDocument` of pages with predictions grouped **by class** | +| Typical use | Read everything | Extract specific fields | + +## Run a KIE predictor + +The KIE predictor takes the same arguments as the OCR predictor (architectures, orientation, layout...): + +```python +from doctr.io import DocumentFile +from doctr.models import kie_predictor + +predictor = kie_predictor(det_arch="db_resnet50", reco_arch="crnn_vgg16_bn", pretrained=True) +result = predictor(DocumentFile.from_pdf("invoice.pdf")) + +page = result.pages[0] +for class_name, predictions in page.predictions.items(): + for prediction in predictions: + print(class_name, prediction.value, prediction.confidence, prediction.geometry) +``` + +Each {class}`~doctr.io.Prediction` is a word with an extra `crop_orientation` field. `render()` and the exports +group the predictions by class: + +```python +print(result.render()) +# words: ACME +# +# words: Office +# ... +``` + +:::{important} +The pretrained detection models only know the `words` class, so out of the box the KIE predictor behaves like the +OCR predictor with a flat output. Its value comes with a detection model **trained on your own classes**. +::: + +## Use your own classes + +1. Annotate your documents with one polygon list per class (see the + [multi-class detection format](../training/train.md#text-detection)), e.g. with the + [docTR Labeler](../community/tools.md#doctr-labeler). +2. Train a detection model with these classes using the + [detection training script](../training/train.md#text-detection). +3. Load it with its class names and plug it into the KIE predictor: + +```python +from doctr.models import db_resnet50, kie_predictor + +det_model = db_resnet50(pretrained=False, pretrained_backbone=False, class_names=["date", "total", "invoice_id"]) +det_model.from_pretrained("path/to/your/checkpoint.pt") + +predictor = kie_predictor(det_arch=det_model, reco_arch="crnn_vgg16_bn", pretrained=True) +result = predictor(pages) + +dates = [prediction.value for prediction in result.pages[0].predictions["date"]] +``` + +## Visualize and export + +{class}`~doctr.io.KIEDocument` offers the same tools as `Document`: `show()` draws the boxes with one color per +class, `export()` returns a JSON-ready dict with a `predictions` key per page, and the +[export formats](exporting.md) are available as well. diff --git a/docs/source/user_guide/layout_and_tables.md b/docs/source/user_guide/layout_and_tables.md new file mode 100644 index 0000000000..5ad7ece8ff --- /dev/null +++ b/docs/source/user_guide/layout_and_tables.md @@ -0,0 +1,177 @@ +# Layout analysis & tables + +Text alone loses the structure of a document. docTR can also tell *what* each region of a page is (a title, a +paragraph, a table, a figure...) and rebuild tables as rows and columns. + +## Layout analysis + +A layout model detects and classifies the regions of a page. The pretrained `lw_detr_s` model recognizes +11 classes: + +{bdg-primary-line}`Title` {bdg-primary-line}`Section-header` {bdg-primary-line}`Text` {bdg-primary-line}`List-item` +{bdg-primary-line}`Caption` {bdg-primary-line}`Footnote` {bdg-primary-line}`Formula` {bdg-primary-line}`Table` +{bdg-primary-line}`Picture` {bdg-primary-line}`Page-header` {bdg-primary-line}`Page-footer` + +### In the OCR pipeline + +Pass `detect_layout=True` and the regions are attached to every page as +{class}`~doctr.io.LayoutElement` objects: + +```python +from doctr.io import DocumentFile +from doctr.models import ocr_predictor + +predictor = ocr_predictor(pretrained=True, detect_layout=True) +result = predictor(DocumentFile.from_pdf("invoice.pdf")) + +for region in result.pages[0].layout: + print(f"{region.type:<15} {region.confidence:.2f}") +``` + +```text +Page-footer 0.89 +Section-header 0.75 +Section-header 0.67 +Table 0.95 +Text 0.78 +... +``` + +```{image} ../_static/images/examples/invoice_layout.png +:alt: Words and layout regions overlaid on the invoice +:width: 520px +:align: center +``` + +The layout also improves the exports: headings, lists, tables, figures, headers and footers are rendered with the +right structure and in the right place (see [](exporting.md)). It is part of the JSON export under the `layout` +key, and `page.show()` draws it. + +The layout model shares the input settings of the predictor (`assume_straight_pages`, `preserve_aspect_ratio`...) +and the batch size of the detection model (`det_bs`). Use `layout_arch` to select another architecture, or to pass +[your own fine-tuned model](../training/custom_models.md#layout-models). + +### Ignore some regions + +Pictures, stamps or tables can produce noisy text. `ignore_regions` masks the regions of the given layout classes +**before** text detection and recognition, so their content is simply not read: + +```python +predictor = ocr_predictor(pretrained=True, detect_layout=True, ignore_regions=["Picture", "Page-footer"]) +``` + +:::{important} +`ignore_regions` relies on the layout model: enable it with `detect_layout=True` (or `detect_tables=True`), +otherwise the regions cannot be located and nothing is masked. The CLI enables it automatically. +::: + +## Table structure recognition + +With `detect_tables=True`, each region the layout model labels as a `Table` is cropped and passed to a table +structure model (`tablecenternet`), which predicts its cells and the rows and columns they span. The words falling +inside a cell are regrouped into a {class}`~doctr.io.Table`: + +```python +from doctr.io import DocumentFile +from doctr.models import ocr_predictor + +predictor = ocr_predictor(pretrained=True, detect_tables=True) +result = predictor(DocumentFile.from_pdf("invoice.pdf")) + +table = result.pages[0].tables[0] +print(table.num_rows, table.num_cols) # 5 4 +print(table.render()) +``` + +```text +Description Qty Unit price Amount +Recycled paper A4 10 8.50 85.00 +Ballpoint pens (box) 5 12.00 60.00 +Desk lamp 2 45.00 90.00 +Office chair 1 1,015.00 1,015.00 +``` + +:::{important} +The words of a table are **removed from the regular `blocks`** of the page, so the same text is not returned +twice. Read them through `page.tables`, or use an export: tables are rendered in place by `render()`, Markdown, +AsciiDoc and HTML, and stored under the `tables` key of the JSON export. +::: + +### Load a table into pandas + +{meth}`~doctr.io.Table.to_grid` returns a dense `num_rows` × `num_cols` grid of strings. A cell spanning several +rows or columns has its value at its top-left position: + +```python +import pandas as pd + +grid = table.to_grid() +df = pd.DataFrame(grid[1:], columns=grid[0]) # first row as header +print(df) +``` + +```text + Description Qty Unit price Amount +0 Recycled paper A4 10 8.50 85.00 +1 Ballpoint pens (box) 5 12.00 60.00 +2 Desk lamp 2 45.00 90.00 +3 Office chair 1 1,015.00 1,015.00 +``` + +### Cells, spans and geometry + +For full control, iterate over the {class}`~doctr.io.TableCell` objects: + +```python +for cell in table.cells: + print(cell.value, (cell.row_start, cell.row_end), (cell.col_start, cell.col_end), cell.geometry) +``` + +| Attribute | Description | +| ---------------------------- | ------------------------------------------------------------------- | +| `value` | The text of the words assigned to the cell | +| `row_start`, `row_end` | First and last row spanned by the cell (0-indexed, inclusive) | +| `col_start`, `col_end` | First and last column spanned by the cell (0-indexed, inclusive) | +| `row_span`, `col_span` | Number of rows / columns spanned | +| `geometry` | Position of the cell, relative to the page | +| `confidence` | Mean recognition confidence of the words of the cell | +| `objectness_score` | Score of the cell predicted by the table model | + +## Standalone predictors + +Both models can also run on their own, without text recognition: + +::::{tab-set} + +:::{tab-item} Layout +```python +from doctr.models import layout_predictor + +predictor = layout_predictor("lw_detr_s", pretrained=True) +out = predictor(pages) + +# One dict per page +out[0]["class_names"] # ['Page-footer', 'Section-header', ..., 'Table', 'Text', ...] +out[0]["boxes"] # (N, 4) array of relative (xmin, ymin, xmax, ymax) +out[0]["scores"] # N confidence scores +``` +::: + +:::{tab-item} Table structure +Pass images of tables, e.g. crops of the `Table` regions: + +```python +from doctr.models import table_predictor + +predictor = table_predictor("tablecenternet", pretrained=True) +out = predictor([table_image]) + +out[0]["num_rows"], out[0]["num_cols"] # (5, 4) +out[0]["cells"][0] +# {'geometry': [[x1, y1], ..., [x4, y4]], # relative to the table image +# 'score': 0.42, 'row_start': 0, 'row_end': 0, 'col_start': 0, 'col_end': 0} +``` +::: +:::: + +See [](standalone_predictors.md) for all the task-specific predictors. diff --git a/docs/source/user_guide/loading_documents.md b/docs/source/user_guide/loading_documents.md new file mode 100644 index 0000000000..5798f20eb6 --- /dev/null +++ b/docs/source/user_guide/loading_documents.md @@ -0,0 +1,131 @@ +# Loading documents + +Predictors work on **pages**: a list of NumPy arrays of shape `(H, W, 3)`, in RGB order and `uint8` type. +{class}`~doctr.io.DocumentFile` reads PDFs, images and web pages into that format, so you rarely have to think +about it. + +## From a PDF + +```python +from doctr.io import DocumentFile + +pages = DocumentFile.from_pdf("path/to/report.pdf") +print(len(pages), pages[0].shape) # e.g. 3 (2339, 1653, 3) +``` + +Every page of the PDF is rendered to an image (with [pypdfium2](https://pypdfium2.readthedocs.io)), so +`pages[i]` and `result.pages[i]` always correspond to the *i*-th page of the file. + +::::{tab-set} + +:::{tab-item} Rendering resolution +The `scale` parameter controls the rendering resolution, where `1` corresponds to 72 dpi. The default, `2` +(144 dpi), is a good trade-off for most documents; increase it for small print: + +```python +pages = DocumentFile.from_pdf("path/to/report.pdf", scale=3) # 216 dpi +``` +::: + +:::{tab-item} Encrypted PDF +```python +pages = DocumentFile.from_pdf("path/to/protected.pdf", password="s3cr3t") +``` +::: + +:::{tab-item} From memory +Pass the raw bytes, e.g. a file received by a web API or downloaded from object storage: + +```python +with open("path/to/report.pdf", "rb") as f: + pages = DocumentFile.from_pdf(f.read()) +``` +::: +:::: + +:::{tip} +docTR always runs OCR on the rendered pages, even when the PDF already contains a text layer. This gives +consistent results on scanned and digital-born PDFs alike. +::: + +## From images + +Any format supported by OpenCV works (PNG, JPEG, TIFF, BMP, WebP...). Pass one path, or several to build a +multi-page document: + +```python +from doctr.io import DocumentFile + +# A single image is a one-page document +pages = DocumentFile.from_images("path/to/scan.jpg") + +# Several images are read as consecutive pages of the same document +pages = DocumentFile.from_images(["path/to/page1.png", "path/to/page2.png"]) + +# Raw bytes work too +with open("path/to/scan.jpg", "rb") as f: + pages = DocumentFile.from_images(f.read()) +``` + +:::{note} +A multi-frame TIFF is read as a single image (its first frame). Split it into frames first, e.g. with Pillow, +and pass them as NumPy arrays (see below). +::: + +## From a web page + +Web pages are first printed to PDF with [WeasyPrint](https://weasyprint.org), so this requires the `html` extra +(`pip install "python-doctr[html]"`): + +```python +from doctr.io import DocumentFile + +pages = DocumentFile.from_url("https://www.example.com") +``` + +## From NumPy arrays + +If your images are already in memory, e.g. frames from a camera or pages produced by another library, +pass them directly to the predictor as a list of arrays: + +```python +import numpy as np +from PIL import Image + +from doctr.models import ocr_predictor + +predictor = ocr_predictor(pretrained=True) + +page = np.asarray(Image.open("path/to/scan.png").convert("RGB")) # (H, W, 3), uint8, RGB +result = predictor([page]) +``` + +:::{warning} +Make sure arrays are **RGB** (OpenCV loads images as BGR: convert them with `cv2.cvtColor(img, cv2.COLOR_BGR2RGB)`), +of type `uint8`, and have **3 channels** (convert grayscale images with `np.stack([img] * 3, axis=-1)`). +::: + +## Mixing sources + +`DocumentFile` methods return plain Python lists, so you can concatenate them into a single document: + +```python +pages = DocumentFile.from_pdf("cover_letter.pdf") + DocumentFile.from_images(["id_front.jpg", "id_back.jpg"]) +result = predictor(pages) # one Document with all the pages, in order +``` + +## Low-level readers + +`DocumentFile` is a thin wrapper around these functions, which you can use directly when you need more control: + +| Function | Reads | +| --------------------------------------------- | --------------------------------------------------------- | +| {func}`~doctr.io.read_pdf` | A PDF into a list of arrays (`scale`, `password`, `rgb_mode`) | +| {func}`~doctr.io.read_img_as_numpy` | One image into an array (optionally resized) | +| {func}`~doctr.io.read_img_as_tensor` | One image into a `torch.Tensor` | +| {func}`~doctr.io.decode_img_as_tensor` | Image bytes into a `torch.Tensor` | +| {func}`~doctr.io.read_html` | A web page into PDF bytes | + +## Next steps + +Your pages are ready: head to [](ocr_predictor.md) to configure the predictor that will read them. diff --git a/docs/source/user_guide/ocr_predictor.md b/docs/source/user_guide/ocr_predictor.md new file mode 100644 index 0000000000..f43b950039 --- /dev/null +++ b/docs/source/user_guide/ocr_predictor.md @@ -0,0 +1,323 @@ +# Running OCR + +{func}`~doctr.models.ocr_predictor` builds the end-to-end pipeline: it detects the words of each page, reads them, +and assembles the result into a {class}`~doctr.io.Document`. This page walks through its options, from choosing +the models to fine-tuning the output. + +## Create a predictor + +```python +from doctr.io import DocumentFile +from doctr.models import ocr_predictor + +predictor = ocr_predictor(pretrained=True) + +pages = DocumentFile.from_pdf("path/to/report.pdf") +result = predictor(pages) +``` + +Building a predictor loads the models (and downloads their weights the first time), so **create it once and reuse +it** for all your documents. The predictor runs in inference mode and accepts any number of pages per call. + +## Choose the architectures + +By default, `ocr_predictor` uses `fast_base` for text detection and `crnn_vgg16_bn` for text recognition. Pass the +names of other architectures to trade speed for accuracy: + +```python +predictor = ocr_predictor(det_arch="db_resnet50", reco_arch="parseq", pretrained=True) +``` + +| You want... | Detection (`det_arch`) | Recognition (`reco_arch`) | +| ---------------------------------- | --------------------------------------- | ------------------------------------------------ | +| A good default | `fast_base` | `crnn_vgg16_bn` | +| Maximum speed (CPU, edge devices) | `fast_tiny`, `db_mobilenet_v3_large` | `crnn_mobilenet_v3_small`, `viptr_tiny` | +| Maximum accuracy | `db_resnet50`, `fast_base` | `parseq`, `vitstr_base`, `master` | + +The [model zoo](../models/index.md) lists every architecture with its benchmark. Instead of a name, you can also pass +a model **instance**, which is how you plug in [your own trained models](../training/custom_models.md): + +```python +from doctr.models import ocr_predictor, fast_base, parseq + +predictor = ocr_predictor( + det_arch=fast_base(pretrained=True), + reco_arch=parseq(pretrained=True), +) +``` + +## Options at a glance + +All options are keyword arguments of {func}`~doctr.models.ocr_predictor`. + +::::{tab-set} + +:::{tab-item} Page geometry +| Option | Default | Effect | +| -------------------------- | ------- | -------------------------------------------------------------------------------------------------------- | +| `assume_straight_pages` | `True` | Assume upright pages with horizontal text: fastest, returns straight boxes. Set to `False` for rotated or skewed documents. | +| `straighten_pages` | `False` | Estimate the page rotation and straighten the pages before running the models | +| `export_as_straight_boxes` | `False` | With `assume_straight_pages=False`, still export straight boxes instead of polygons | +| `preserve_aspect_ratio` | `True` | Pad the pages instead of stretching them when resizing them for the models | +| `symmetric_pad` | `True` | With `preserve_aspect_ratio=True`, pad on all sides instead of bottom-right only | + +See [](rotated_documents.md) for a detailed guide. +::: + +:::{tab-item} Extra predictions +| Option | Default | Effect | +| -------------------- | ------------ | --------------------------------------------------------------------------------------------------- | +| `detect_orientation` | `False` | Estimate the general orientation of each page, available as `page.orientation` | +| `detect_language` | `False` | Estimate the language of each page, available as `page.language` | +| `detect_layout` | `False` | Run a layout model and attach its regions to each page (`page.layout`) | +| `layout_arch` | `"lw_detr_s"`| Layout architecture name or model instance | +| `detect_tables` | `False` | Recognize the structure of tables (`page.tables`); enables the layout model | +| `ignore_regions` | `None` | Layout classes to mask out before OCR, e.g. `["Picture"]`; requires the layout model (`detect_layout=True`) | + +See [](layout_and_tables.md). +::: + +:::{tab-item} Output structure +| Option | Default | Effect | +| -------------------- | ------- | --------------------------------------------------------------------------------------- | +| `resolve_lines` | `True` | Group words into lines | +| `resolve_blocks` | `False` | Group lines into blocks (by default, all the lines of a page form a single block) | +| `paragraph_break` | `0.035` | Minimum horizontal gap, relative to the page width, that splits two words into different lines | +| `keep_reading_order` | `False` | Sort the blocks of every page in reading order | +::: + +:::{tab-item} Performance +| Option | Default | Effect | +| -------------------------- | ------- | --------------------------------------------------------------------------------------- | +| `det_bs` | `2` | Batch size of the detection model (also used by the layout and table models) | +| `reco_bs` | `128` | Batch size of the recognition model (number of word crops per batch) | +| `disable_page_orientation` | `False` | Skip the page orientation classifier (see [rotated documents](rotated_documents.md)) | +| `disable_crop_orientation` | `False` | Skip the word crop orientation classifier | + +See [](../deployment/performance.md) for GPU and half-precision inference. +::: +:::: + +## Tune the text detection + +The detection models output a probability map that is binarized, then split into boxes. Two thresholds of the +post-processor control this step: + +`bin_thresh` +: Minimum probability for a pixel to be considered as text. Lower it to catch faint text, raise it to separate words + that are close to each other. + +`box_thresh` +: Minimum mean score of a box to be kept. Lower it to keep more (uncertain) words, raise it to drop noise. + +```python +predictor = ocr_predictor(pretrained=True) + +predictor.det_predictor.model.postprocessor.bin_thresh = 0.3 +predictor.det_predictor.model.postprocessor.box_thresh = 0.1 +``` + +## Confidence scores + +The recognition model predicts a probability for each character of a word. They are aggregated into +`word.confidence` with one of the following methods: + +| Method | Behavior | +| ------------------------------------- | ----------------------------------------------------------------------------------- | +| `"min"` | The least confident character (default for CRNN, VIPTR, SAR and MASTER) | +| `"mean"` | Average probability (default for ViTSTR and PARSeq) | +| `"geometric_mean"`, `"harmonic_mean"` | Means that penalize a single uncertain character more than the arithmetic mean | +| `"median"`, `"max"` | Ignore most uncertain characters: they barely separate misread words from correct ones | +| a callable | Any function taking the 1D array of probabilities and returning a float | + +For the probabilities `[0.99, 0.98, 0.12, 0.99]` (one doubtful character), the mean is `0.77`, the geometric mean +`0.58`, the harmonic mean `0.35` and the minimum `0.12`. Pick a method that makes uncertain words stand out if +you use the confidence to flag words for human review. + +```python +from doctr.models import ocr_predictor, parseq + +# When building the predictor (modifies a model instance passed as `reco_arch`) +predictor = ocr_predictor(pretrained=True, confidence_aggregation="geometric_mean") + +# Or afterwards, on the post-processor of the recognition model +predictor.reco_predictor.model.postprocessor.confidence_aggregation = "mean" + +# Or on a model instance +predictor = ocr_predictor(reco_arch=parseq(pretrained=True, confidence_aggregation="min"), pretrained=True) +``` + +:::{dropdown} Details: which probabilities are aggregated? +Only the probabilities of the predicted characters: the CTC blank frames (CRNN, VIPTR) and the positions from the +end-of-sequence token onwards (SAR, MASTER) are ignored, and a CTC character has the highest probability of its +frames. An empty prediction has a confidence of `0`. + +Very wide crops are split into parts that are read separately; their confidences are combined with the +`split_confidence_aggregation` of the recognition predictor (`"min"` by default): + +```python +predictor.reco_predictor.split_confidence_aggregation = "mean" +``` +::: + +## Restrict the output characters + +If you know which languages to expect, restrict the recognition model to their characters with +{func}`~doctr.models.utils.add_whitelist`. Forbidden characters can no longer be predicted, which removes a whole +class of errors (e.g. `ł` read instead of `l` on an English document). + +```python +from doctr.datasets import VOCABS +from doctr.models import ocr_predictor +from doctr.models.utils import add_whitelist + +predictor = ocr_predictor(pretrained=True) + +# Only German and Polish characters can be predicted from now on +handle = add_whitelist(predictor, [VOCABS["german"], VOCABS["polish"]]) +result = predictor(pages) + +# Restore the original decoding +handle.remove() +``` + +The handle is also a context manager, which removes the whitelist when the block ends: + +```python +with add_whitelist(predictor, VOCABS["german"]): + result = predictor(pages) +``` + +By default, forbidden characters are dropped (`strategy="mask"`) and the model falls back to its best allowed +character. With `strategy="nearest"`, each forbidden character is first folded onto the closest allowed one, +which is handy to normalize accents onto a base alphabet: + +```python +# é -> e, ł -> l, ß -> ss...: an ASCII-only output +handle = add_whitelist(predictor, VOCABS["latin"], strategy="nearest") +``` + +The closest character is found by transliteration by default. Pass `mapping="weights"` to derive it from the +model's own confusions instead, or a `{"forbidden": "allowed"}` dict to override specific characters. + +:::{note} +A whitelist can only *restrict* a model: characters it was not trained on are silently ignored. To read a new +alphabet, use a model trained on a matching [vocabulary](../models/vocabs.md). +::: + +## Hooks + +Hooks let you edit the detected boxes **before they are read**. A hook is a callable that receives the location +predictions right after text detection and returns them, possibly modified. The recognition model then reads the +crops of the boxes the hook returned: + +- **remove** boxes to skip regions you don't need (they are not read, which also saves time); +- **move or resize** boxes, e.g. to pad crops that are too tight; +- **add** boxes, e.g. for fields at a known position on a form. + +The location predictions are a list with one NumPy array per page, in relative coordinates: `(N, 4)` straight boxes +as `xmin, ymin, xmax, ymax`, or `(N, 4, 2)` polygons with `assume_straight_pages=False`. A hook returns the same +structure, with any number of boxes per page. + +::::{tab-set} + +:::{tab-item} Skip headers & footers +```python +import numpy as np + +from doctr.models import ocr_predictor + + +class SkipMargins: + """Ignore the words in the top and bottom bands of the page (headers, footers)""" + + def __init__(self, band: float = 0.05): + self.band = band + + def __call__(self, loc_preds: list[np.ndarray]) -> list[np.ndarray]: + kept = [] + for boxes in loc_preds: # one array per page, relative coordinates + if boxes.ndim == 2: # straight boxes (N, 4): xmin, ymin, xmax, ymax + center_y = (boxes[:, 1] + boxes[:, 3]) / 2 + else: # rotated boxes (N, 4, 2): polygons + center_y = boxes[:, :, 1].mean(axis=1) + keep = (center_y > self.band) & (center_y < 1 - self.band) + kept.append(boxes[keep]) + return kept + + +predictor = ocr_predictor(pretrained=True) +predictor.add_hook(SkipMargins()) +``` + +On the {download}`sample invoice <../_static/images/examples/invoice.pdf>`, the footer line +(`ACME Office Supplies GmbH - VAT ID ...`) is no longer read. +::: + +:::{tab-item} Pad the boxes +```python +import numpy as np + +from doctr.models import ocr_predictor + + +def pad_boxes(loc_preds: list[np.ndarray], pad: float = 0.002) -> list[np.ndarray]: + """Enlarge the straight boxes slightly, so that the crops keep the character edges""" + offsets = np.array([-pad, -pad, pad, pad]) + return [np.clip(boxes + offsets.astype(boxes.dtype), 0, 1) for boxes in loc_preds] + + +predictor = ocr_predictor(pretrained=True) +predictor.add_hook(pad_boxes) +``` +::: +:::: + +Good to know: + +- Hooks run in the order they were added, each one receiving the output of the previous one. +- Each returned box keeps the `objectness_score` of the closest detected box of its page; a box added on a page + without any detection gets a score of `1`. +- With the [KIE predictor](kie.md), hooks receive and return a dict with one such list per class. +- An output in the wrong format (not one array per page, or boxes of another shape) raises a `ValueError`. + +## Process many documents + +- **Reuse the predictor**: building it is the expensive part. +- **Batch your pages**: one call on a list of pages is faster than one call per page, as the models process + several pages and word crops at once (see `det_bs` and `reco_bs` above). +- **Free memory between documents**: the predictor returns plain Python objects, so drop the results you no + longer need. + +```python +from pathlib import Path + +from doctr.io import DocumentFile +from doctr.models import ocr_predictor + +predictor = ocr_predictor(pretrained=True) + +for path in sorted(Path("invoices").glob("*.pdf")): + result = predictor(DocumentFile.from_pdf(path)) + path.with_suffix(".txt").write_text(result.render()) +``` + +## Next steps + +::::{grid} 1 2 2 2 +:gutter: 3 + +:::{grid-item-card} {octicon}`list-unordered;1.1em` Working with results +:link: results +:link-type: doc + +Navigate the `Document`, read words and boxes, and save the predictions. +::: + +:::{grid-item-card} {octicon}`rocket;1.1em` Performance +:link: ../deployment/performance +:link-type: doc + +Run on GPU, in half precision, and compile the models. +::: +:::: diff --git a/docs/source/user_guide/results.md b/docs/source/user_guide/results.md new file mode 100644 index 0000000000..93978ccac4 --- /dev/null +++ b/docs/source/user_guide/results.md @@ -0,0 +1,234 @@ +# Working with results + +The OCR predictor returns a {class}`~doctr.io.Document`. This page shows how to navigate it, turn its geometries +into pixels, visualize the predictions, and save them for later. + +:::{seealso} +[](../getting_started/concepts.md#the-document-tree) introduces the elements of the tree and +[](exporting.md) covers the text-oriented export formats (Markdown, HTML, hOCR...). +::: + +## Navigate the tree + +```python +from doctr.io import DocumentFile +from doctr.models import ocr_predictor + +predictor = ocr_predictor(pretrained=True) +result = predictor(DocumentFile.from_pdf("invoice.pdf")) + +page = result.pages[0] +page.dimensions # (height, width) of the page image, in pixels: (1684, 1191) +page.page # the page image itself, as a NumPy array +page.blocks # list of Block +page.orientation # {"value": ..., "confidence": ...} with detect_orientation=True +page.language # {"value": ..., "confidence": ...} with detect_language=True +page.layout # list of LayoutElement with detect_layout=True +page.tables # list of Table with detect_tables=True +``` + +Most of the time, you want a flat list of words. A small generator does the job: + +```python +def iter_words(document): + for page_idx, page in enumerate(document.pages): + for block in page.blocks: + for line in block.lines: + for word in line.words: + yield page_idx, word + + +words = [word.value for _, word in iter_words(result)] +``` + +Every element also has a `render()` method that returns its text: `line.render()` joins the words of a line with +spaces, `page.render()` returns the whole page. + +## Filter by confidence + +`word.confidence` tells how sure the recognition model is. Use it to send doubtful words to a human, or to drop +noise: + +```python +doubtful = [(page_idx, word.value, word.confidence) for page_idx, word in iter_words(result) if word.confidence < 0.5] +``` + +:::{tip} +The way character probabilities are combined into `word.confidence` is configurable: see +[confidence scores](ocr_predictor.md#confidence-scores). +::: + +## Convert coordinates to pixels + +Geometries are relative to the page size, with `(0, 0)` at the top-left corner. Multiply them by the page +dimensions to get pixels: + +::::{tab-set} + +:::{tab-item} Straight boxes +```python +import numpy as np + +height, width = page.dimensions +(xmin, ymin), (xmax, ymax) = word.geometry + +x0, y0 = int(xmin * width), int(ymin * height) +x1, y1 = int(xmax * width), int(ymax * height) + +word_image = page.page[y0:y1, x0:x1] # crop the word from the page +``` +::: + +:::{tab-item} Rotated boxes +With `assume_straight_pages=False`, geometries are `(4, 2)` arrays of points: + +```python +import numpy as np + +height, width = page.dimensions +polygon = np.asarray(word.geometry) * np.array([width, height]) # (4, 2) pixel coordinates +``` +::: +:::: + +## Find a value next to a keyword + +Combining positions and text lets you build simple extraction rules. For instance, to read the amount written to +the right of *Total*: + +```python +def value_right_of(page, keyword): + words = [w for block in page.blocks for line in block.lines for w in line.words] + anchor = next(w for w in words if w.value.lower().startswith(keyword.lower())) + (_, ay0), (ax1, ay1) = anchor.geometry + center_y = (ay0 + ay1) / 2 + # Words on the same horizontal band, to the right of the keyword, sorted left to right + candidates = [w for w in words if w.geometry[0][1] < center_y < w.geometry[1][1] and w.geometry[0][0] > ax1] + return " ".join(w.value for w in sorted(candidates, key=lambda w: w.geometry[0][0])) + + +print(value_right_of(result.pages[0], "Total")) # due 1,250.00 EUR +``` + +For forms and invoices with many fields, a [KIE predictor](kie.md) trained on your fields is more robust than +hand-written rules. + +## Visualize the predictions + +::::{tab-set} + +:::{tab-item} Interactive window +Requires the `viz` extra. Hover a box to see the word and its confidence: + +```python +result.show() # all pages; or result.pages[0].show() +``` + +When the layout model ran, its regions are drawn as well (`display_layout=False` hides them). +::: + +:::{tab-item} Image file +{func}`~doctr.utils.visualization.visualize_page` returns a Matplotlib figure that you can save, e.g. on a +server without display: + +```python +import matplotlib + +matplotlib.use("Agg") # no display needed +from doctr.utils.visualization import visualize_page + +page = result.pages[0] +fig = visualize_page(page.export(), page.page, interactive=False, add_labels=False) +fig.savefig("predictions.png", bbox_inches="tight") +``` +::: +:::: + +```{image} ../_static/images/examples/invoice_words.png +:alt: Detected words overlaid on the invoice +:width: 520px +:align: center +``` + +## Rebuild the page from its predictions + +{meth}`~doctr.io.Page.synthesize` draws the recognized words at their position on a blank page. It is a quick +way to eyeball what was read, and where: + +```python +import matplotlib.pyplot as plt + +synthetic_pages = result.synthesize() # one image per page +plt.imshow(synthetic_pages[0]) +plt.axis("off") +plt.show() +``` + +```{image} ../_static/images/examples/invoice_synthesized.png +:alt: The invoice rebuilt from the predictions +:width: 520px +:align: center +``` + +## Save and reload + +{meth}`~doctr.io.Document.export` converts the result into a nested dictionary of plain Python types, ready for +JSON. {meth}`~doctr.io.Document.from_dict` rebuilds the `Document` from it: + +```python +import json + +from doctr.io import Document + +# Save +with open("invoice.json", "w") as f: + json.dump(result.export(), f) + +# ... later: reload +with open("invoice.json") as f: + restored = Document.from_dict(json.load(f)) + +print(restored.render()) +``` + +The page images are not part of the export. Pass them back with `Document.from_dict(data, pages=pages)` if you +need them, e.g. to call `show()`. + +:::{dropdown} What does the JSON export look like? +```json +{ + "pages": [ + { + "page_idx": 0, + "dimensions": [1684, 1191], + "orientation": {"value": null, "confidence": null}, + "language": {"value": null, "confidence": null}, + "blocks": [ + { + "geometry": [[0.0706, 0.0537], [0.3992, 0.0732]], + "objectness_score": 0.83, + "lines": [ + { + "geometry": [[0.0706, 0.0537], [0.3992, 0.0732]], + "objectness_score": 0.83, + "words": [ + { + "value": "ACME", + "confidence": 0.99995, + "geometry": [[0.0706, 0.0537], [0.1603, 0.0713]], + "objectness_score": 0.80, + "crop_orientation": {"value": 0, "confidence": null} + } + ] + } + ], + "artefacts": [] + } + ], + "layout": [], + "tables": [] + } + ] +} +``` +::: diff --git a/docs/source/user_guide/rotated_documents.md b/docs/source/user_guide/rotated_documents.md new file mode 100644 index 0000000000..abfd886469 --- /dev/null +++ b/docs/source/user_guide/rotated_documents.md @@ -0,0 +1,94 @@ +# Rotated documents + +Scans are rarely perfectly aligned: pages are skewed, photographed at an angle, fed upside down into the scanner, +or contain vertical text. docTR handles all of these cases, at a small cost in speed. This page helps you choose +the right options. + +## Which setting do I need? + +| Your documents | Recommended options | +| ------------------------------------------------------------------- | ------------------------------------------------------------------ | +| Upright pages, horizontal text (digital PDFs, clean scans) | defaults (`assume_straight_pages=True`): fastest | +| Slightly skewed or rotated pages, and you want **straight boxes** | `straighten_pages=True` | +| Pages in any orientation, text in several directions | `assume_straight_pages=False` | +| As above, but your application only understands rectangles | `assume_straight_pages=False, export_as_straight_boxes=True` | +| You only want to **know** how each page is rotated | `detect_orientation=True` | + +## Straight pages (default) + +With `assume_straight_pages=True`, docTR fits axis-aligned boxes to the text and reads the crops as they are. +This is the fastest mode and the right one for most digital documents. Geometries are +`((xmin, ymin), (xmax, ymax))` pairs. + +## Straighten the pages first + +`straighten_pages=True` estimates the rotation of each page, rotates the page back, and only then runs text +detection and recognition. The output looks as if the page had been scanned straight: straight boxes, and a +reading order that follows the text. + +```python +from doctr.models import ocr_predictor + +predictor = ocr_predictor(pretrained=True, straighten_pages=True) +``` + +The coordinates refer to the **straightened** page, which may have different dimensions than the input (check +`page.dimensions`). To get coordinates on the original page instead, add `preserve_original_coords=True`. + +## Rotated boxes + +`assume_straight_pages=False` makes the detection model predict **rotated boxes**, and enables two small +classifiers: + +- a **page orientation** classifier, which estimates the general orientation of each page; +- a **crop orientation** classifier, which rotates each word crop upright (0°, 90°, 180° or 270°) before it is read. + +```python +predictor = ocr_predictor(pretrained=True, assume_straight_pages=False) +result = predictor(pages) + +word = result.pages[0].blocks[0].lines[0].words[0] +word.geometry # four (x, y) points: ((x1, y1), (x2, y2), (x3, y3), (x4, y4)) +word.crop_orientation # {'value': 0, 'confidence': 1.0} +``` + +Add `export_as_straight_boxes=True` to get the enclosing axis-aligned boxes instead of polygons. + +## Detect the page orientation + +`detect_orientation=True` adds the estimated rotation of each page, in degrees, to the results. It works with every +other option: + +```python +predictor = ocr_predictor(pretrained=True, assume_straight_pages=False, detect_orientation=True) +result = predictor(pages) + +print(result.pages[0].orientation) # {'value': -10, 'confidence': None} for a page skewed by 10° +``` + +## Speed up the orientation models + +The orientation classifiers are light, but you can skip them when you know your documents well: + +`disable_page_orientation=True` +: Skip the page orientation classifier, e.g. for pages that are only slightly skewed (between about -45° and 45°). + Only relevant with `assume_straight_pages=False`, `straighten_pages=True` or `detect_orientation=True`. + +`disable_crop_orientation=True` +: Skip the word crop classifier when all the text is horizontal (never upside down or vertical). Only relevant + with `assume_straight_pages=False` or `straighten_pages=True`. + +```python +predictor = ocr_predictor( + pretrained=True, + assume_straight_pages=False, + disable_page_orientation=True, + disable_crop_orientation=True, +) +``` + +## Learn more + +- The [Dealing with rotated documents](https://colab.research.google.com/github/mindee/notebooks/blob/main/doctr/dealing_with_rotations.ipynb) + notebook compares all these modes on real examples. +- The orientation classifiers can be [retrained on your data](../training/custom_models.md#orientation-classifiers). diff --git a/docs/source/user_guide/standalone_predictors.md b/docs/source/user_guide/standalone_predictors.md new file mode 100644 index 0000000000..27d1ebfdaf --- /dev/null +++ b/docs/source/user_guide/standalone_predictors.md @@ -0,0 +1,96 @@ +# Task-specific predictors + +The OCR predictor chains several models. Each of them is also available on its own, wrapped in a predictor that +handles pre-processing, batching and post-processing. Use them when you only need one step: locating text, +reading pre-cropped words, classifying orientations... + +| Predictor | Input | Output per input image | +| ------------------------------------------------------ | ------------------------- | ------------------------------------------------------ | +| {func}`~doctr.models.detection.detection_predictor` | Pages | `{class_name: array of boxes + scores}` | +| {func}`~doctr.models.recognition.recognition_predictor` | Word crops | `(text, confidence)` | +| {func}`~doctr.models.layout.layout_predictor` | Pages | `{"class_names", "boxes", "scores"}` | +| {func}`~doctr.models.table_structure.table_predictor` | Table images | `{"cells", "num_rows", "num_cols"}` | +| {func}`~doctr.models.classification.page_orientation_predictor` | Pages | Orientation class, angle and probability | +| {func}`~doctr.models.classification.crop_orientation_predictor` | Word crops | Orientation class, angle and probability | + +All of them take a **list of images** (NumPy arrays of shape `(H, W, 3)`, `uint8`, RGB) and return one result per +image. As with the OCR predictor, pass `pretrained=True` to load trained weights. + +## Text detection + +```python +from doctr.io import DocumentFile +from doctr.models import detection_predictor + +predictor = detection_predictor("fast_base", pretrained=True) +pages = DocumentFile.from_pdf("invoice.pdf") +out = predictor(pages) + +boxes = out[0]["words"] # (N, 5): xmin, ymin, xmax, ymax, score (relative coordinates) +``` + +With `assume_straight_pages=False`, each box is a rotated polygon: the array has shape `(N, 5, 2)`, with the +four corners followed by the score. Multi-class detection models (see [](kie.md)) return one entry per class. + +The predictor accepts the same input options as the OCR predictor: `assume_straight_pages`, +`preserve_aspect_ratio`, `symmetric_pad` and `batch_size`. + +## Text recognition + +The recognition predictor reads **one word per image**. Crops are resized to the input size of the model (32 px +high), so they should be tightly cropped around the word: + +```python +from doctr.models import recognition_predictor + +predictor = recognition_predictor("crnn_vgg16_bn", pretrained=True) +out = predictor([word_crop]) # e.g. the crop of "ACME" from the sample invoice + +print(out) # [('ACME', 0.9996)] +``` + +:::{note} +The pretrained vocabularies have no space character: feed the predictor single words, not whole lines. To read +lines or pages, use the OCR predictor, which detects the words first. +::: + +Very wide crops are split into overlapping parts that are read separately and merged. `batch_size` (default +`128`) sets how many crops are processed at once. + +## Layout analysis & table structure + +See [](layout_and_tables.md#standalone-predictors). + +## Orientation classifiers + +Two lightweight classifiers predict the orientation of a page or a word crop among 0°, 90°, 180° and 270°: + +```python +from doctr.models import crop_orientation_predictor, page_orientation_predictor + +page_classifier = page_orientation_predictor(pretrained=True) +class_idxs, angles, probs = page_classifier([upright_page, rotated_page]) +print(angles) # [0, -90] + +crop_classifier = crop_orientation_predictor(pretrained=True) +class_idxs, angles, probs = crop_classifier([word_crop, upside_down_crop]) +print(angles) # [0, 180] +``` + +They are used by the OCR predictor for [rotated documents](rotated_documents.md), and can be +[retrained on your data](../training/custom_models.md#orientation-classifiers). + +## Accessing the models + +Every predictor exposes its model as `.model`, a regular PyTorch module: + +```python +predictor = detection_predictor("db_resnet50", pretrained=True) + +predictor.model # the DBNet module +predictor.model.cfg # its configuration (input shape, mean/std, url...) +predictor.model.postprocessor.bin_thresh # post-processing parameters +``` + +The [Using standalone predictors](https://colab.research.google.com/github/mindee/notebooks/blob/main/doctr/using_standalone_predictors.ipynb) +notebook shows these predictors in action. diff --git a/docs/source/using_doctr/custom_models_training.rst b/docs/source/using_doctr/custom_models_training.rst deleted file mode 100644 index bcb0fc0556..0000000000 --- a/docs/source/using_doctr/custom_models_training.rst +++ /dev/null @@ -1,221 +0,0 @@ -.. _custom_models_training: - -Train your own model -==================== - -If the pretrained models don't meet your specific needs, you have the option to train your own model using the docTR library. -For details on the training process and the necessary data and data format, refer to the following links: - -- `detection `_ -- `recognition `_ -- `layout `_ -- `table structure `_ - -If you’re looking for a lightweight yet efficient tool to annotate small amounts of data, especially tailored for docTR, -check out the `docTR Labeling Tool `_. -This tool makes it easy to create your own dataset for fine-tuning and optimizing your OCR models. - -Loading your custom trained model ---------------------------------- - -This section shows how you can easily load a custom trained model in docTR. - -.. code:: python3 - - import torch - from doctr.models import ocr_predictor, db_resnet50, crnn_vgg16_bn - - # Load custom detection model - det_model = db_resnet50(pretrained=False, pretrained_backbone=False) - det_model.from_pretrained('', map_location="cpu") - predictor = ocr_predictor(det_arch=det_model, reco_arch="vitstr_small", pretrained=True) - - # Load custom recognition model - reco_model = crnn_vgg16_bn(pretrained=False, pretrained_backbone=False) - reco_model.from_pretrained('', map_location="cpu") - predictor = ocr_predictor(det_arch="linknet_resnet18", reco_arch=reco_model, pretrained=True) - - # Load custom detection and recognition model - det_model = db_resnet50(pretrained=False, pretrained_backbone=False) - det_model.from_pretrained('', map_location="cpu") - reco_model = crnn_vgg16_bn(pretrained=False, pretrained_backbone=False) - reco_model.from_pretrained('', map_location="cpu") - predictor = ocr_predictor(det_arch=det_model, reco_arch=reco_model, pretrained=False) - - -Load a custom recognition model trained on another vocabulary as the default one (French): - -.. code:: python3 - - import torch - from doctr.models import ocr_predictor, crnn_vgg16_bn - from doctr.datasets import VOCABS - - reco_model = crnn_vgg16_bn(pretrained=False, pretrained_backbone=False, vocab=VOCABS["german"]) - reco_model.from_pretrained('') - - predictor = ocr_predictor(det_arch='linknet_resnet18', reco_arch=reco_model, pretrained=True) - - -Plug a custom layout analysis model (trained on another set of classes) directly into the OCR pipeline so the detected regions are attached to every page: - -.. code:: python3 - - import torch - from doctr.models import ocr_predictor, lw_detr_s - - # Custom layout model with your own class names - layout_model = lw_detr_s(pretrained=False, class_names=["heading", "paragraph", "figure", "table"]) - layout_model.from_pretrained('') - - # Pass it through `layout_arch`, exactly as for the detection / recognition models - predictor = ocr_predictor(pretrained=True, detect_layout=True, layout_arch=layout_model) - - result = predictor(doc) - # The regions (with your custom class names) are available on each page - print([(region.type, region.confidence) for region in result.pages[0].layout]) - - - -Plug a custom layout analysis model (trained on another set of classes) directly into the OCR pipeline so the detected regions are attached to every page: - -.. code:: python3 - - import torch - from doctr.models import ocr_predictor, lw_detr_s - - # Custom layout model with your own class names - layout_model = lw_detr_s(pretrained=False, class_names=["heading", "paragraph", "figure", "table"]) - layout_model.from_pretrained('') - - # Pass it through `layout_arch`, exactly as for the detection / recognition models - predictor = ocr_predictor(pretrained=True, detect_layout=True, layout_arch=layout_model) - - result = predictor(doc) - # The regions (with your custom class names) are available on each page - print([(region.type, region.confidence) for region in result.pages[0].layout]) - - -Load a custom trained KIE detection model: - -.. code:: python3 - - import torch - from doctr.models import kie_predictor, db_resnet50 - - det_model = db_resnet50(pretrained=False, pretrained_backbone=False, class_names=['total', 'date']) - det_model.from_pretrained('') - kie_predictor(det_arch=det_model, reco_arch='crnn_vgg16_bn', pretrained=True) - -Load a model with customized Preprocessor: - -.. code:: python3 - - import torch - from doctr.models.predictor import OCRPredictor - from doctr.models.detection.predictor import DetectionPredictor - from doctr.models.recognition.predictor import RecognitionPredictor - from doctr.models.preprocessor import PreProcessor - from doctr.models import db_resnet50, crnn_vgg16_bn - - det_model = db_resnet50(pretrained=False, pretrained_backbone=False) - det_model.from_pretrained('') - reco_model = crnn_vgg16_bn(pretrained=False, pretrained_backbone=False) - reco_model.from_pretrained('') - - det_predictor = DetectionPredictor( - PreProcessor( - (1024, 1024), - batch_size=1, - mean=(0.798, 0.785, 0.772), - std=(0.264, 0.2749, 0.287) - ), - det_model - ) - - reco_predictor = RecognitionPredictor( - PreProcessor( - (32, 128), - preserve_aspect_ratio=True, - batch_size=32, - mean=(0.694, 0.695, 0.693), - std=(0.299, 0.296, 0.301) - ), - reco_model - ) - - predictor = OCRPredictor(det_predictor, reco_predictor) - -Custom orientation classification models ----------------------------------------- - -If you work with rotated documents and make use of the orientation classification feature by passing one of the following arguments: - -* `assume_straight_pages=False` -* `detect_orientation=True` -* `straigten_pages=True` - -You can train your own orientation classification model using the docTR library. For details on the training process and the necessary data and data format, refer to the following link: - -- `orientation `_ - -**NOTE**: Currently we support only `mobilenet_v3_small` models for crop and page orientation classification. - -Loading your custom trained orientation classification model -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -.. code:: python3 - - import torch - from doctr.io import DocumentFile - from doctr.models import ocr_predictor, mobilenet_v3_small_page_orientation, mobilenet_v3_small_crop_orientation - from doctr.models.classification.zoo import crop_orientation_predictor, page_orientation_predictor - - custom_page_orientation_model = mobilenet_v3_small_page_orientation(pretrained=False) - custom_page_orientation_model.from_pretrained('') - custom_crop_orientation_model = mobilenet_v3_small_crop_orientation(pretrained=False) - custom_crop_orientation_model.from_pretrained('') - - predictor = ocr_predictor( - pretrained=True, - assume_straight_pages=False, - straighten_pages=True, - detect_orientation=True, - ) - - # Overwrite the default orientation models - predictor.crop_orientation_predictor = crop_orientation_predictor(custom_crop_orientation_model) - predictor.page_orientation_predictor = page_orientation_predictor(custom_page_orientation_model) - -Custom table structure recognition models ------------------------------------------ - -If you work with documents containing tables and make use of the table structure recognition feature by passing the following arguments: - -* `detect_tables=True` - -You can train your own table structure recognition model using the docTR library. For details on the training process and the necessary data and data format, refer to the following link: - -- `table structure recognition `_ - -Loading your custom trained table structure recognition model -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -.. code:: python3 - - import torch - from doctr.io import DocumentFile - from doctr.models import ocr_predictor, tablecenternet - from doctr.models.table_structure.zoo import table_predictor - - custom_table_structure_model = tablecenternet(pretrained=False) - custom_table_structure_model.from_pretrained('') - - predictor = ocr_predictor( - pretrained=True, - detect_layout=True, - detect_tables=True, - ) - - # Overwrite the default table structure model - predictor.table_predictor = table_predictor(custom_table_structure_model) diff --git a/docs/source/using_doctr/running_on_aws.rst b/docs/source/using_doctr/running_on_aws.rst deleted file mode 100644 index 8a5e1a4cc4..0000000000 --- a/docs/source/using_doctr/running_on_aws.rst +++ /dev/null @@ -1,10 +0,0 @@ -AWS Lambda -========== - -The security policy of `AWS Lambda `_ restricts writing outside the ``/tmp`` directory. - -To make docTR work on Lambda, you need to perform the following two steps: - -1. Disable the usage of the ``multiprocessing`` package by setting the ``DOCTR_MULTIPROCESSING_DISABLE`` environment variable to ``TRUE``. This step is necessary because the package uses the ``/dev/shm`` directory for shared memory. - -2. Change the caching directory used by docTR for models. By default, it is set to ``~/.cache/doctr``, which is outside the ``/tmp`` directory on AWS Lambda. You can modify this by setting the ``DOCTR_CACHE_DIR`` environment variable. diff --git a/docs/source/using_doctr/sharing_models.rst b/docs/source/using_doctr/sharing_models.rst deleted file mode 100644 index 37f73ef12b..0000000000 --- a/docs/source/using_doctr/sharing_models.rst +++ /dev/null @@ -1,127 +0,0 @@ -Share your model with the community -=================================== - -docTR's focus is on open source, and if you feel the same way, we appreciate you sharing your trained model with the community. -To make it easy for you, we have integrated an interface to the Hugging Face Hub. - -.. currentmodule:: doctr.models.factory - - -Loading from Hugging Face Hub -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -This section shows how you can easily load a pretrained model from the Hugging Face Hub. - -.. code:: python3 - - from doctr.io import DocumentFile - from doctr.models import ocr_predictor, from_hub - image = DocumentFile.from_images(['data/example.jpg']) - # Load a custom detection model from the Hugging Face Hub - det_model = from_hub('Felix92/doctr-torch-db-mobilenet-v3-large') - # Load a custom recognition model from the Hugging Face Hub - reco_model = from_hub('Felix92/doctr-torch-crnn-mobilenet-v3-large-french') - # You can easily plug these models in to the OCR predictor - predictor = ocr_predictor(det_arch=det_model, reco_arch=reco_model) - result = predictor(image) - - -Pushing to the Hugging Face Hub -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -You can also push your trained model to the Hugging Face Hub. -You need only to provide the task type (classification, detection, recognition or obj_detection), a name for your trained model (NOTE: -existing repositories will not be overwritten) and the model name itself. - -- Prerequisites: - - Hugging Face account (you can easily create one at https://huggingface.co/) - - installed Git LFS (check installation at: https://git-lfs.github.com/) in the repository - -.. code:: python3 - - from doctr.models import recognition, login_to_hub, push_to_hf_hub - login_to_hub() - my_awesome_model = recognition.crnn_mobilenet_v3_large(pretrained=True) - push_to_hf_hub(my_awesome_model, model_name='doctr-crnn-mobilenet-v3-large-french-v1', task='recognition', arch='crnn_mobilenet_v3_large') - -It is also possible to push your model directly after training. - -.. code:: bash - - python3 ~/doctr/references/recognition/train.py crnn_mobilenet_v3_large --name doctr-crnn-mobilenet-v3-large --push-to-hub - - -Pretrained community models -^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -This section is to provide some tables for pretrained community models. -Feel free to open a pull request or issue to add your model to this list. - -Naming conventions ------------------- - -We suggest using the following naming conventions for your models: - -**Classification:** ``doctr--`` - -**Detection:** ``doctr-`` - -**Recognition:** ``doctr--`` - -**Layout:** ``doctr-`` - -**Table structure:** ``doctr-`` - - -Classification --------------- - -+---------------------------------+-------------------------------------+-----------------------+ -| **Architecture** | **Repo_ID** | **Vocabulary** | -+=================================+=====================================+=======================+ -| resnet18 (dummy) | Felix92/doctr-dummy-torch-resnet18 | french | -+---------------------------------+-------------------------------------+-----------------------+ - - -Detection ---------- - -+---------------------------------+-------------------------------------------------+------------------------+ -| **Architecture** | **Repo_ID** | **Framework** | -+=================================+=================================================+========================+ -| db_resnet50 | rania-sr/doctr-Detection-model-v1-arabic | PyTorch | -+---------------------------------+-------------------------------------------------+------------------------+ - - -Recognition ------------ - -+---------------------------------+---------------------------------------------------+---------------------+------------------------+ -| **Architecture** | **Repo_ID** | **Language** | **Framework** | -+=================================+===================================================+=====================+========================+ -| crnn_vgg16_bn | tilman-rassy/doctr-crnn-vgg16-bn-fascan-v1 | french + german + § | PyTorch | -+---------------------------------+---------------------------------------------------+---------------------+------------------------+ -| parseq | Felix92/doctr-torch-parseq-multilingual-v1 | multilingual | PyTorch | -+---------------------------------+---------------------------------------------------+---------------------+------------------------+ -| parseq | rania-sr/doctr-model-v1-arabic | arabic | PyTorch | -+---------------------------------+---------------------------------------------------+---------------------+------------------------+ - - -Layout ------- - -+---------------------------------+---------------------------------------------------+------------------------+ -| **Architecture** | **Repo_ID** | **Framework** | -+=================================+===================================================+========================+ -| lw_detr_s (dummy) | Felix92/doctr-dummy-torch-lw-detr-s | PyTorch | -+---------------------------------+---------------------------------------------------+------------------------+ - - -Table structure ---------------- - -+---------------------------------+---------------------------------------------------+------------------------+ -| **Architecture** | **Repo_ID** | **Framework** | -+=================================+===================================================+========================+ -| tablecenternet (dummy) | Felix92/doctr-dummy-torch-tablecenternet | PyTorch | -+---------------------------------+---------------------------------------------------+------------------------+ diff --git a/docs/source/using_doctr/using_cli.rst b/docs/source/using_doctr/using_cli.rst deleted file mode 100644 index c1f4b37c16..0000000000 --- a/docs/source/using_doctr/using_cli.rst +++ /dev/null @@ -1,124 +0,0 @@ -Using the CLI for Optical Character Recognition -=============================================== - -The full Optical Character Recognition (OCR) task can be executed by using the Command Line Interface (CLI) implemented in docTR. This tool allows you to process both images and PDF files without writing a single line of Python code, and to export the results as JSON, plain text, Markdown, AsciiDoc, HTML or hOCR. - -Basic Usage ------------ - -To run the OCR engine on a file, use the following command structure: - -.. code-block:: bash - - doctr-cli --input_path path/to/your/document.pdf --output results.json - -Arguments ---------- - -The CLI supports a variety of arguments to fine-tune the detection, recognition and export process: - -**Mandatory Arguments:** - -* ``--input_path``: Path to one or more input images / PDF files. Every page is appended to a single document, so several files can be processed in one go. Values starting with ``http://`` or ``https://`` are interpreted as web pages and rendered as PDF (this requires ``weasyprint``, cf. :meth:`doctr.io.DocumentFile.from_url`). - -**General Options:** - -* ``--version``: Prints the installed docTR version and exits. - -**Input Options:** - -* ``--pdf_password``: Password used to unlock encrypted PDF files. *Default: None* -* ``--pdf_scale``: PDF rendering scale, where 1 corresponds to 72dpi. *Default: 2* - -**Architecture Selection:** - -* ``--det_arch``: The detection architecture to use (e.g., ``fast_base``). *Default: fast_base* -* ``--reco_arch``: The recognition architecture to use (e.g., ``crnn_vgg16_bn``). *Default: crnn_vgg16_bn* -* ``--layout_arch``: The layout architecture to use. *Default: lw_detr_s* -* ``--device``: Device the models are loaded on (``auto``, ``cpu``, ``cuda:0``, ...). On a CUDA device of compute capability 8.0 or above, the models are cast to bfloat16. *Default: auto* - -**Processing Options:** - -* ``--assume_straight_pages``, ``--no-assume_straight_pages``: Determine whether pages should be handled as straight or skewed pages. *Default: True* -* ``--straighten_pages``: If flagged, the tool will attempt to straighten skewed pages before analysis. *Default: False* -* ``--preserve_aspect_ratio``, ``--no-preserve_aspect_ratio``: Ensures that the aspect ratio is maintained during resizing. *Default: True* -* ``--symmetric_pad``, ``--no-symmetric_pad``: Applies symmetric padding to the input images. *Default: True* -* ``--det_bs``: Batch size used for the detection model. *Default: 2* -* ``--reco_bs``: Batch size used for the recognition model. *Default: 128* -* ``--bin_thresh``: Binarization threshold of the detection post-processing. *Default: the value of the architecture* -* ``--box_thresh``: Minimum confidence of a detected box. *Default: the value of the architecture* -* ``--confidence_aggregation``: Aggregation method of the character probabilities into the word confidence, one of ``mean``, ``min``, ``max``, ``median``, ``geometric_mean``, ``harmonic_mean``. *Default: the method of the recognition architecture* -* ``--detect_orientation``: Enables automatic detection of page orientation. *Default: False* -* ``--detect_language``: Enables language detection for the extracted text. *Default: False* -* ``--detect_layout``: Attaches the detected layout regions to each page. *Default: False* -* ``--detect_tables``: Regroups the words of the detected tables into structured tables. This enables the layout model. *Default: False* -* ``--ignore_regions``: Layout class names to mask out before detection & recognition (e.g. ``--ignore_regions Picture Table``). This enables the layout model. *Default: None* -* ``--export_as_straight_boxes``: Exports (potentially rotated) predictions as straight boxes. *Default: False* -* ``--preserve_original_coords``: Maps the boxes back to the original page coordinates when ``--straighten_pages`` is used. *Default: False* -* ``--disable_page_orientation``: Disables the page orientation classifier. *Default: False* -* ``--disable_crop_orientation``: Disables the crop orientation classifier. *Default: False* - -**Document Assembling Options:** - -* ``--resolve_lines``, ``--no-resolve_lines``: Groups the words into lines. *Default: True* -* ``--resolve_blocks``: Groups the lines into blocks. *Default: False* -* ``--paragraph_break``: Relative length of the minimum space separating two paragraphs. *Default: 0.035* -* ``--keep_reading_order``: Arranges the content of every page in reading order. *Default: False* - -**Output Options:** - -* ``--output``: The destination path where the results will be saved. *Default: results.json* -* ``--format``: The export format, one of ``json``/``dict``, ``txt``/``text``, ``md``/``markdown``, ``adoc``/``asciidoc``, ``html``, ``xml``/``hocr``. When it is not set, the format is inferred from the extension of ``--output``, and falls back to JSON. *Default: None* -* ``--direction``: Reading direction of the document, one of ``auto``, ``ltr``, ``rtl``, ``ttb-rtl``, ``ttb-ltr``. *Default: auto* -* ``--reading_order``, ``--no-reading_order``: Linearizes the content in reading order (JSON & hOCR exports). *Default: True* -* ``--escape``, ``--no-escape``: Escapes the characters carrying a structural meaning (Markdown & AsciiDoc exports). *Default: True* -* ``--include_furniture``, ``--no-include_furniture``: Includes page headers, page footers and footnotes (text-like exports). *Default: True* -* ``--file_title``: Title of the exported hOCR files. *Default: docTR - XML export (hOCR)* -* ``--indent``: Indentation of the JSON export. *Default: 4* -* ``--quiet``: Only logs errors. *Default: False* - -Examples --------- - -**Running OCR on an image:** - -.. code-block:: bash - - doctr-cli --input_path image.jpg --output ocr_res.json - -**Running OCR on several files at once:** - -.. code-block:: bash - - doctr-cli --input_path page1.jpg page2.jpg scan.pdf --output ocr_res.json - -**Using a specific detection architecture and straightening pages:** - -.. code-block:: bash - - doctr-cli --input_path doc.pdf --det_arch db_mobilenet_v3_large --straighten_pages - -**Exporting the text as Markdown, with tables and layout:** - -.. code-block:: bash - - doctr-cli --input_path doc.pdf --detect_tables --output doc.md - -**Exporting as hOCR on the GPU, ignoring the pictures of the document:** - -.. code-block:: bash - - doctr-cli --input_path doc.pdf --device cuda:0 --ignore_regions Picture --output doc.xml - -Output Format -------------- - -By default, the results are exported in a structured JSON format containing: - -* **Pages**: Dimensions, orientation, language and layout regions. -* **Blocks**: Grouping of lines. -* **Lines**: Grouping of words. -* **Words**: The actual text content with confidence scores and bounding box coordinates. -* **Tables**: The structured tables, when ``--detect_tables`` is used. - -The text-like formats (``txt``, ``md``, ``adoc``, ``html``) are written to a single file. Since hOCR describes a single page per file, the ``xml`` export writes one file per page: an ``--output`` of ``doc.xml`` on a 3-page document produces ``doc_page_1.xml``, ``doc_page_2.xml`` and ``doc_page_3.xml``. diff --git a/docs/source/using_doctr/using_contrib_modules.rst b/docs/source/using_doctr/using_contrib_modules.rst deleted file mode 100644 index 30b86b0846..0000000000 --- a/docs/source/using_doctr/using_contrib_modules.rst +++ /dev/null @@ -1,51 +0,0 @@ -Integrate contributions into your pipeline -========================================== - -The `contrib` module provides a collection of additional features which could be relevant for your document analysis pipeline. -The following sections will give you an overview of the available modules and features. - -.. currentmodule:: doctr.contrib - - -Available contribution modules ------------------------------- - -**NOTE:** To use the contrib module, you need to install the `onnxruntime` package. You can install it using the following command: - -.. code:: bash - - pip install python-doctr[contrib] - # Or - pip install onnxruntime # pip install onnxruntime-gpu - -Here are all contribution modules that are available through docTR: - -ArtefactDetector -^^^^^^^^^^^^^^^^^ - -The ArtefactDetector module provides a set of functions to detect artefacts in the document images, such as logos, QR codes, bar codes, etc. -It is based on the YOLOv8 architecture, which is a state-of-the-art object detection model. - -.. code:: python3 - - from doctr.io import DocumentFile - from doctr.contrib.artefacts import ArtefactDetector - - # Load the document - doc = DocumentFile.from_images(["path/to/your/image"]) - detector = ArtefactDetector(batch_size=2, conf_threshold=0.5, iou_threshold=0.5) - artefacts = detector(doc) - - # Visualize the detected artefacts - detector.show() - -You can also use your custom trained YOLOv8 model to detect artefacts or anything else you need. -Reference: `YOLOv8 `_ - -**NOTE:** The YOLOv8 model (no Oriented Bounding Box (OBB) inference supported yet) needs to be provided as onnx exported model with a dynamic batch size. - -.. code:: python3 - - from doctr.contrib import ArtefactDetector - - detector = ArtefactDetector(model_path="path/to/your/model.onnx", labels=["table", "figure"]) diff --git a/docs/source/using_doctr/using_datasets.rst b/docs/source/using_doctr/using_datasets.rst deleted file mode 100644 index 8a9f1a0259..0000000000 --- a/docs/source/using_doctr/using_datasets.rst +++ /dev/null @@ -1,188 +0,0 @@ -Choose a ready to use dataset -============================= - -Whether it is for training or for evaluation, having predefined objects to access datasets in your prefered framework -can be a significant save of time. - -.. currentmodule:: doctr.datasets - - -Available Datasets ------------------- -In the package reference you will also find some samples for each dataset. - -Here are all datasets that are available through docTR: - -Detection -^^^^^^^^^ - -This datasets contains the information to train or validate a text detection model. - -+-----------------------------+---------------------------------+---------------------------------+---------------------------------------+ -| **Dataset** | **Train Samples** | **Test Samples** | **Information** | -+=============================+=================================+=================================+=======================================+ -| FUNSD | 149 | 50 | | -+-----------------------------+---------------------------------+---------------------------------+---------------------------------------+ -| SROIE | 626 | 360 | | -+-----------------------------+---------------------------------+---------------------------------+---------------------------------------+ -| CORD | 800 | 100 | | -+-----------------------------+---------------------------------+---------------------------------+---------------------------------------+ -| IIIT5K | 2000 | 3000 | | -+-----------------------------+---------------------------------+---------------------------------+---------------------------------------+ -| SVT | 100 | 249 | | -+-----------------------------+---------------------------------+---------------------------------+---------------------------------------+ -| SVHN | 33402 | 13068 | Character Localization | -+-----------------------------+---------------------------------+---------------------------------+---------------------------------------+ -| SynthText | 772875 | 85875 | | -+-----------------------------+---------------------------------+---------------------------------+---------------------------------------+ -| IC03 | 246 | 249 | | -+-----------------------------+---------------------------------+---------------------------------+---------------------------------------+ -| IC13 | 229 | 233 | external resources | -+-----------------------------+---------------------------------+---------------------------------+---------------------------------------+ -| IMGUR5K | 7149 | 796 | Handwritten / external resources | -+-----------------------------+---------------------------------+---------------------------------+---------------------------------------+ -| WILDRECEIPT | 1268 | 472 | external resources | -+-----------------------------+---------------------------------+---------------------------------+---------------------------------------+ -| COCOTEXT | 13880 | 3261 | external resources / legible filtered | -+-----------------------------+---------------------------------+---------------------------------+---------------------------------------+ - -.. code:: python3 - - from doctr.datasets import CORD - # Load straight boxes - train_set = CORD(train=True, download=True, detection_task=True) - # Load rotated boxes - train_set = CORD(train=True, download=True, use_polygons=True, detection_task=True) - img, target = train_set[0] - - -Recognition -^^^^^^^^^^^ - -This datasets contains the information to train or validate a text recognition model. - -+-----------------------------+---------------------------------+---------------------------------+--------------------------------------------------+ -| **Dataset** | **Train Samples** | **Test Samples** | **Information** | -+=============================+=================================+=================================+==================================================+ -| FUNSD | 21888 | 8707 | english | -+-----------------------------+---------------------------------+---------------------------------+--------------------------------------------------+ -| SROIE | 33608 | 19342 | english / only uppercase labels | -+-----------------------------+---------------------------------+---------------------------------+--------------------------------------------------+ -| CORD | 19370 | 2186 | english | -+-----------------------------+---------------------------------+---------------------------------+--------------------------------------------------+ -| IIIT5K | 2000 | 3000 | english | -+-----------------------------+---------------------------------+---------------------------------+--------------------------------------------------+ -| SVT | 257 | 647 | english / only uppercase labels | -+-----------------------------+---------------------------------+---------------------------------+--------------------------------------------------+ -| SVHN | 73257 | 26032 | digits | -+-----------------------------+---------------------------------+---------------------------------+--------------------------------------------------+ -| SynthText | ~7100000 | 707470 | english | -+-----------------------------+---------------------------------+---------------------------------+--------------------------------------------------+ -| IC03 | 1156 | 1107 | english | -+-----------------------------+---------------------------------+---------------------------------+--------------------------------------------------+ -| IC13 | 849 | 1095 | english / external resources | -+-----------------------------+---------------------------------+---------------------------------+--------------------------------------------------+ -| IMGUR5K | 207901 | 22672 | english / handwritten / external resources | -+-----------------------------+---------------------------------+---------------------------------+--------------------------------------------------+ -| MJSynth | 7581382 | 1337891 | english / external resources | -+-----------------------------+---------------------------------+---------------------------------+--------------------------------------------------+ -| IIITHWS | 7141797 | 793533 | english / handwritten / external resources | -+-----------------------------+---------------------------------+---------------------------------+--------------------------------------------------+ -| WILDRECEIPT | 49377 | 19598 | english / external resources | -+-----------------------------+---------------------------------+---------------------------------+--------------------------------------------------+ -| COCOTEXT | 59130 | 13258 | english / external resources / legible filtered | -+-----------------------------+---------------------------------+---------------------------------+--------------------------------------------------+ - -.. code:: python3 - - from doctr.datasets import CORD - # Crop boxes as is (can contain irregular) - train_set = CORD(train=True, download=True, recognition_task=True) - # Crop rotated boxes (always regular) - train_set = CORD(train=True, download=True, use_polygons=True, recognition_task=True) - img, target = train_set[0] - - -OCR -^^^ - -The same dataset table as for detection, but with information about the bounding boxes and labels. - -.. code:: python3 - - from doctr.datasets import CORD - # Load straight boxes - train_set = CORD(train=True, download=True) - # Load rotated boxes - train_set = CORD(train=True, download=True, use_polygons=True) - img, target = train_set[0] - - -Object Detection -^^^^^^^^^^^^^^^^ - -This datasets contains the information to train or validate a object detection model. - -+-----------------------------+---------------------------------+---------------------------------+-------------------------------------------------------+ -| **Dataset** | **Train Samples** | **Test Samples** | **Information** | -+=============================+=================================+=================================+=======================================================+ -| DocArtefacts | 2700 | 300 |["background", "qr_code", "bar_code", "logo", "photo"] | -+-----------------------------+---------------------------------+---------------------------------+-------------------------------------------------------+ - -.. code:: python3 - - from doctr.datasets import DocArtefacts - train_set = DocArtefacts(train=True, download=True) - img, target = train_set[0] - - -Synthetic dataset generator -^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -docTR provides also some generator objects, which can be used to generate synthetic datasets. -Both are also integrated in the training scripts to train a classification or recognition model. - -.. code:: python3 - - from doctr.datasets import CharacterGenerator - ds = CharacterGenerator(vocab='abdef', num_samples=100) - img, target = ds[0] - -.. code:: python3 - - from doctr.datasets import WordGenerator - ds = WordGenerator(vocab='abdef', min_chars=1, max_chars=32, num_samples=100) - img, target = ds[0] - - -Use your own datasets ---------------------- - -Since many documents include sensitive / personal information, we are not able to share all the data that has been used for this project. -However, we provide some guidance on how to format your own dataset into the same format so that you can use all docTR tools more easily. -You can find further information about the format in references. - -.. code:: python3 - - from doctr.datasets import DetectionDataset - # Load a detection dataset - train_set = DetectionDataset(img_folder="/path/to/images", label_path="/path/to/labels.json") - # Load a recognition Dataset - train_set = RecognitionDataset(img_folder="/path/to/images", labels_path="/path/to/labels.json") - # Load a OCR dataset which contains annotations for the boxes and labels - train_set = OCRDataset(img_folder="/path/to/images", label_file="/path/to/labels.json") - img, target = train_set[0] - - -Data Loading ------------- - -Each dataset has its specific way to load a sample, but handling batch aggregation and the underlying iterator is a task deferred to another object in docTR. - -.. code:: python3 - - from doctr.datasets import CORD, DataLoader - train_set = CORD(train=True, download=True) - train_loader = DataLoader(train_set, batch_size=32) - train_iter = iter(train_loader) - images, targets = next(train_iter) diff --git a/docs/source/using_doctr/using_model_export.rst b/docs/source/using_doctr/using_model_export.rst deleted file mode 100644 index 4aafce335f..0000000000 --- a/docs/source/using_doctr/using_model_export.rst +++ /dev/null @@ -1,151 +0,0 @@ -Preparing your model for inference -================================== - -A well-trained model is a good achievement but you might want to tune a few things to make it production-ready! - -.. currentmodule:: doctr.models.utils - - -Model optimization ------------------- - -This section is meant to help you perform inference with optimized versions of your model. - -.. _half-precision: - - -Half-precision -^^^^^^^^^^^^^^ - -**NOTE:** We support half-precision inference for PyTorch models only on **GPU devices**. - -Half-precision formats occupy 16 bits in computer memory instead of the 32 bits used by -single-precision (FP32). Two formats are supported: - -- **BF16** (``bfloat16``): keeps the same exponent range as FP32 with a reduced mantissa. -- **FP16** (``float16``): higher precision than BF16, but a much narrower dynamic range. - -Advantages: - -- Faster inference -- Less memory usage - -We recommend **BF16 over FP16**. Because it retains the full FP32 exponent range, BF16 is far -less prone to overflow and underflow. BF16 requires an Ampere-generation GPU or newer -(compute capability 8.0+); on older hardware, use FP16 instead. - -.. code:: python3 - - import torch - predictor = ocr_predictor( - reco_arch="crnn_mobilenet_v3_small", - det_arch="linknet_resnet34", - pretrained=True - ).cuda().bfloat16() # or .half() for FP16 - res = predictor(doc) - - -Compiling your models (PyTorch only) -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -**NOTE:** - -- This feature is only available if you use PyTorch as backend. -- The recognition architecture `master` is not supported for model compilation yet. -- We provide only official support for the default (`inductor`) backend, but you can try other backends, configurations depending on your hardware and requirements as well. - -Compiling your PyTorch models with `torch.compile` optimizes the model by converting it to a graph representation and applying backends that can improve performance. -This process can make inference faster and reduce memory overhead during execution. - -Further information can be found in the `PyTorch documentation `_. - -.. code:: - - import torch - from doctr.models import ( - ocr_predictor, - vitstr_small, - fast_base, - mobilenet_v3_small_crop_orientation, - mobilenet_v3_small_page_orientation, - crop_orientation_predictor, - page_orientation_predictor - ) - - # Compile the models - detection_model = torch.compile( - fast_base(pretrained=True).eval() - ) - recognition_model = torch.compile( - vitstr_small(pretrained=True).eval() - ) - crop_orientation_model = torch.compile( - mobilenet_v3_small_crop_orientation(pretrained=True).eval() - ) - page_orientation_model = torch.compile( - mobilenet_v3_small_page_orientation(pretrained=True).eval() - ) - - predictor = ocr_predictor( - detection_model, recognition_model, assume_straight_pages=False - ) - # NOTE: Only required for non-straight pages (`assume_straight_pages=False`) and non-disabled orientation classification - # Set the orientation predictors - predictor.crop_orientation_predictor = crop_orientation_predictor(crop_orientation_model) - predictor.page_orientation_predictor = page_orientation_predictor(page_orientation_model) - - compiled_out = predictor(doc) - -Export to ONNX -^^^^^^^^^^^^^^ - -ONNX (Open Neural Network Exchange) is an open and interoperable format for representing and exchanging machine learning models. -It defines a common format for representing models, including the network structure, layer types, parameters, and metadata. - -.. code:: python3 - - import torch - from doctr.models import vitstr_small - from doctr.models.utils import export_model_to_onnx - - batch_size = 1 - input_shape = (3, 32, 128) - model = vitstr_small(pretrained=True, exportable=True) - dummy_input = torch.rand((batch_size, *input_shape), dtype=torch.float32) - model_path = export_model_to_onnx( - model, - model_name="vitstr.onnx", - dummy_input=dummy_input - ) - - -Using your ONNX exported model -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -To use your exported model, we have build a dedicated lightweight package called `OnnxTR `_. -The package doesn't require PyTorch or TensorFlow to be installed - build on top of ONNXRuntime. -It is simple and easy-to-use (with the same interface you know already from docTR), that allows you to perform inference with your exported model. - -- `Installation `_ -- `Loading custom exported model `_ - -.. code:: shell - - pip install onnxtr[cpu] - -.. code:: python3 - - from onnxtr.io import DocumentFile - from onnxtr.models import ocr_predictor, parseq, linknet_resnet18 - # Load your documents - single_img_doc = DocumentFile.from_images("path/to/your/img.jpg") - - # Load your exported model/s - reco_model = parseq("path_to_custom_model.onnx", vocab="ABC") - det_model = linknet_resnet18("path_to_custom_model.onnx") - predictor = ocr_predictor(det_arch=det_model, reco_arch=reco_model) - # Or use any of the pre-trained models - predictor = ocr_predictor(det_arch="linknet_resnet18", reco_arch="parseq") - - # Get your results - res = predictor(single_img_doc) diff --git a/docs/source/using_doctr/using_models.rst b/docs/source/using_doctr/using_models.rst deleted file mode 100644 index af4012d076..0000000000 --- a/docs/source/using_doctr/using_models.rst +++ /dev/null @@ -1,836 +0,0 @@ -.. _using_models: - -Choosing the right model -======================== - -The full Optical Character Recognition task can be seen as two consecutive tasks: text detection and text recognition. -Either performed at once or separately, to each task corresponds a type of deep learning architecture. - -For a given task, docTR provides a Predictor, which is composed of 2 components: - -* PreProcessor: a module in charge of making inputs directly usable by the deep learning model. -* Model: a deep learning model, implemented with all supported deep learning backends (PyTorch) along with its specific post-processor to make outputs structured and reusable. - - -Which predictor should I use? ------------------------------- - -.. list-table:: - :widths: 60 40 - :header-rows: 1 - - * - I want to… - - Use - * - Extract all text (words, lines, layout hierarchy) from a document - - :py:meth:`ocr_predictor ` - * - Detect document regions by type (tables, figures, headers, …) - - :py:meth:`layout_predictor ` - * - Get word bounding-boxes only, without recognition - - :py:meth:`detection_predictor ` - * - Transcribe pre-cropped word images to strings - - :py:meth:`recognition_predictor ` - * - Detect the structure of a table (cell bounding-boxes and logical coordinates) - - :py:meth:`table_predictor ` - -For :doc:`custom model loading ` or sharing models, see the dedicated pages. - - -Text Detection --------------- - -The task consists of localizing textual elements in a given image. -While those text elements can represent many things, in docTR, we will consider uninterrupted character sequences (words). Additionally, the localization can take several forms: from straight bounding boxes (delimited by the 2D coordinates of the top-left and bottom-right corner), to polygons, or binary segmentation (flagging which pixels belong to this element, and which don't). -Our latest detection models works with rotated and skewed documents! - -Available detection architectures -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -The following architectures are currently supported: - -* :py:meth:`linknet_resnet34 ` -* :py:meth:`linknet_resnet50 ` -* :py:meth:`db_resnet50 ` -* :py:meth:`db_mobilenet_v3_large ` -* :py:meth:`fast_tiny ` -* :py:meth:`fast_small ` -* :py:meth:`fast_base ` - -For a comprehensive comparison, we have compiled a detailed benchmark on publicly available datasets: - - -+------------------------------------------------------------------------------------+----------------------------+----------------------------+--------------------+ -| | FUNSD | CORD | | -+==================================================+=================+===============+============+===============+============+===============+====================+ -| **Architecture** | **Input shape** | **# params** | **Recall** | **Precision** | **Recall** | **Precision** | **sec/it (B: 1)** | -+--------------------------------------------------+-----------------+---------------+------------+---------------+------------+---------------+--------------------+ -| db_resnet34 | (1024, 1024, 3) | 22.4 M | 82.76 | 76.75 | 89.20 | 71.74 | 0.8 | -+--------------------------------------------------+-----------------+---------------+------------+---------------+------------+---------------+--------------------+ -| db_resnet50 | (1024, 1024, 3) | 25.4 M | 83.56 | 86.68 | 92.61 | 86.39 | 1.1 | -+--------------------------------------------------+-----------------+---------------+------------+---------------+------------+---------------+--------------------+ -| db_mobilenet_v3_large | (1024, 1024, 3) | 4.2 M | 82.69 | 84.63 | 94.51 | 70.28 | 0.5 | -+--------------------------------------------------+-----------------+---------------+------------+---------------+------------+---------------+--------------------+ -| linknet_resnet18 | (1024, 1024, 3) | 11.5 M | 81.64 | 85.52 | 88.92 | 82.74 | 0.6 | -+--------------------------------------------------+-----------------+---------------+------------+---------------+------------+---------------+--------------------+ -| linknet_resnet34 | (1024, 1024, 3) | 21.6 M | 81.62 | 82.95 | 86.26 | 81.06 | 0.7 | -+--------------------------------------------------+-----------------+---------------+------------+---------------+------------+---------------+--------------------+ -| linknet_resnet50 | (1024, 1024, 3) | 28.8 M | 81.78 | 82.47 | 87.29 | 85.54 | 1.0 | -+--------------------------------------------------+-----------------+---------------+------------+---------------+------------+---------------+--------------------+ -| fast_tiny | (1024, 1024, 3) | 13.5 M (8.5M) | 84.90 | 85.04 | 93.73 | 76.26 | 0.7 (0.4) | -+--------------------------------------------------+-----------------+---------------+------------+---------------+------------+---------------+--------------------+ -| fast_small | (1024, 1024, 3) | 14.7 M (9.7M) | 85.36 | 86.68 | 94.09 | 78.53 | 0.7 (0.5) | -+--------------------------------------------------+-----------------+---------------+------------+---------------+------------+---------------+--------------------+ -| fast_base | (1024, 1024, 3) | 16.3 M (10.6M)| 84.95 | 86.73 | 94.39 | 85.36 | 0.8 (0.5) | -+--------------------------------------------------+-----------------+---------------+------------+---------------+------------+---------------+--------------------+ - - -All text detection models above have been evaluated using both the training and evaluation sets of FUNSD and CORD (cf. :ref:`datasets`). -Explanations about the metrics being used are available in :ref:`metrics`. - -*Disclaimer: both FUNSD subsets combined have 199 pages which might not be representative enough of the model capabilities* - -Seconds per iteration (with a batch size of 1) is computed after a warmup phase of 100 tensors, by measuring the average number of processed tensors per second over 1000 samples. Those results were obtained on a `11th Gen Intel(R) Core(TM) i7-11800H @ 2.30GHz`. - - -Detection predictors -^^^^^^^^^^^^^^^^^^^^ - -:py:meth:`detection_predictor ` wraps your detection model to make it easily usable with your favorite deep learning framework seamlessly. - -.. code:: python3 - - import numpy as np - from doctr.models import detection_predictor - model = detection_predictor('db_resnet50') - dummy_img = (255 * np.random.rand(800, 600, 3)).astype(np.uint8) - out = model([dummy_img]) - -You can pass specific boolean arguments to the predictor: - -* ``pretrained``: if you want to use a model that has been pretrained on a specific dataset, setting ``pretrained=True`` will load the corresponding weights. If ``pretrained=False`` (the default), the model is randomly initialized and will produce no useful results. -* ``assume_straight_pages``: if you work with straight documents only, it will fit straight bounding boxes to the text areas. -* ``preserve_aspect_ratio``: if you want to preserve the aspect ratio of your documents while resizing before sending them to the model. -* ``symmetric_pad``: if you choose to preserve the aspect ratio, it will pad the image symmetrically and not from the bottom-right. - -.. code:: python3 - - from doctr.models import detection_predictor - predictor = detection_predictor('db_resnet50', pretrained=True, assume_straight_pages=False, preserve_aspect_ratio=True) - - -Text Recognition ----------------- - -The task consists of transcribing the character sequence in a given image. - - -Available architectures -^^^^^^^^^^^^^^^^^^^^^^^ - -The following architectures are currently supported: - -* :py:meth:`crnn_vgg16_bn ` -* :py:meth:`crnn_mobilenet_v3_small ` -* :py:meth:`crnn_mobilenet_v3_large ` -* :py:meth:`sar_resnet31 ` -* :py:meth:`master ` -* :py:meth:`vitstr_small ` -* :py:meth:`vitstr_base ` -* :py:meth:`parseq ` -* :py:meth:`viptr_tiny ` - - -For a comprehensive comparison, we have compiled a detailed benchmark on publicly available datasets: - - -+-----------------------------------------------------------------------------------+----------------------------+----------------------------+--------------------+ -| | FUNSD | CORD | | -+==================================================+=================+==============+============+===============+============+===============+====================+ -| **Architecture** | **Input shape** | **# params** | **Exact** | **Partial** | **Exact** | **Partial** | **sec/it (B: 64)** | -+--------------------------------------------------+-----------------+--------------+------------+---------------+------------+---------------+--------------------+ -| crnn_vgg16_bn | (32, 128, 3) | 15.8 M | 88.21 | 88.95 | 95.47 | 95.91 | 0.6 | -+--------------------------------------------------+-----------------+--------------+------------+---------------+------------+---------------+--------------------+ -| crnn_mobilenet_v3_small | (32, 128, 3) | 2.1 M | 87.25 | 87.99 | 93.91 | 94.34 | 0.05 | -+--------------------------------------------------+-----------------+--------------+------------+---------------+------------+---------------+--------------------+ -| crnn_mobilenet_v3_large | (32, 128, 3) | 4.5 M | 87.38 | 88.09 | 94.46 | 94.92 | 0.08 | -+--------------------------------------------------+-----------------+--------------+------------+---------------+------------+---------------+--------------------+ -| master | (32, 128, 3) | 58.7 M | 88.57 | 89.39 | 95.73 | 96.21 | 17.6 | -+--------------------------------------------------+-----------------+--------------+------------+---------------+------------+---------------+--------------------+ -| sar_resnet31 | (32, 128, 3) | 55.4 M | 88.10 | 88.88 | 94.83 | 95.29 | 4.9 | -+--------------------------------------------------+-----------------+--------------+------------+---------------+------------+---------------+--------------------+ -| vitstr_small | (32, 128, 3) | 21.4 M | 88.00 | 88.82 | 95.40 | 95.78 | 1.5 | -+--------------------------------------------------+-----------------+--------------+------------+---------------+------------+---------------+--------------------+ -| vitstr_base | (32, 128, 3) | 85.2 M | 88.33 | 89.09 | 95.32 | 95.71 | 4.1 | -+--------------------------------------------------+-----------------+--------------+------------+---------------+------------+---------------+--------------------+ -| parseq | (32, 128, 3) | 23.8 M | 88.53 | 89.24 | 95.56 | 95.91 | 2.2 | -+--------------------------------------------------+-----------------+--------------+------------+---------------+------------+---------------+--------------------+ -| viptr_tiny | (32, 128, 3) | 3.2 M | 86.03 | 86.71 | 93.08 | 93.47 | 0.08 | -+--------------------------------------------------+-----------------+--------------+------------+---------------+------------+---------------+--------------------+ - - -All text recognition models above have been evaluated using both the training and evaluation sets of FUNSD and CORD (cf. :ref:`datasets`). -Explanations about the metric being used (exact match) are available in :ref:`metrics`. - -While most of our recognition models were trained on our french vocab (cf. :ref:`vocabs`), you can easily access the vocab of any model as follows: - -.. code:: python3 - - from doctr.models import recognition_predictor - predictor = recognition_predictor('crnn_vgg16_bn') - print(predictor.model.cfg['vocab']) - - -*Disclaimer: both FUNSD subsets combined have 30595 word-level crops which might not be representative enough of the model capabilities* - -Seconds per iteration (with a batch size of 64) is computed after a warmup phase of 100 tensors, by measuring the average number of processed tensors per second over 1000 samples. Those results were obtained on a `11th Gen Intel(R) Core(TM) i7-11800H @ 2.30GHz`. - - -Recognition predictors -^^^^^^^^^^^^^^^^^^^^^^ -:py:meth:`recognition_predictor ` wraps your recognition model to make it easily usable with your favorite deep learning framework seamlessly. - -.. code:: python3 - - import numpy as np - from doctr.models import recognition_predictor - model = recognition_predictor('crnn_vgg16_bn') - dummy_img = (255 * np.random.rand(50, 150, 3)).astype(np.uint8) - out = model([dummy_img]) - - -Layout Analysis ---------------- - -The task consists of localizing and classifying visual elements in a given image. -This is a more general task than text detection, as it can be used to detect and classify any type of visual element in a document, such as tables, figures, headers, footers, etc. -Our latest layout models works with rotated and skewed documents! - -Available layout architectures -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -The following architectures are currently supported: - -* :py:meth:`lw_detr_s ` -* :py:meth:`lw_detr_m ` - -For a comprehensive comparison, we have compiled a detailed benchmark: - -+--------------------------------------------------+-----------------+---------------+------------------+-------------+--------------+--------------------+ -| | | | | | | | -+==================================================+=================+===============+==================+=============+==============+====================+ -| **Architecture** | **Input shape** | **# params** | **mAP@[.5:.95]** | **AP@[.5]** | **AP@[.75]** | **sec/it (B: 1)** | -+--------------------------------------------------+-----------------+---------------+------------------+-------------+--------------+--------------------+ -| lw_detr_s | (1024, 1024, 3) | 15.1 M | 66.89 | 82.83 | 73.75 | 0.5 | -+--------------------------------------------------+-----------------+---------------+------------------+-------------+--------------+--------------------+ -| lw_detr_m | (1024, 1024, 3) | 29.5 M | soon | soon | soon | 0.7 | -+--------------------------------------------------+-----------------+---------------+------------------+-------------+--------------+--------------------+ - - -Explanations about the metrics being used are available in :ref:`metrics`. - -Seconds per iteration (with a batch size of 1) is computed after a warmup phase of 100 tensors, by measuring the average number of processed tensors per second over 1000 samples. Those results were obtained on a `11th Gen Intel(R) Core(TM) i7-11800H @ 2.30GHz`. - - -Layout predictors -^^^^^^^^^^^^^^^^^ - -:py:meth:`layout_predictor ` wraps your layout model to make it easily usable with your favorite deep learning framework seamlessly. - -.. code:: python3 - - import numpy as np - from doctr.models import layout_predictor - model = layout_predictor('lw_detr_s') - dummy_img = (255 * np.random.rand(800, 600, 3)).astype(np.uint8) - out = model([dummy_img]) - -You can pass specific boolean arguments to the predictor: - -* ``pretrained``: if you want to use a model that has been pretrained on a specific dataset, setting ``pretrained=True`` will load the corresponding weights. If ``pretrained=False`` (the default), the model is randomly initialized and will produce no useful results. -* ``assume_straight_pages``: if you work with straight documents only, it will fit straight bounding boxes to the text areas. -* ``preserve_aspect_ratio``: if you want to preserve the aspect ratio of your documents while resizing before sending them to the model. -* ``symmetric_pad``: if you choose to preserve the aspect ratio, it will pad the image symmetrically and not from the bottom-right. - -For instance, this snippet instantiates a layout predictor able to detect text on rotated documents while preserving the aspect ratio: - -.. code:: python3 - - from doctr.models import layout_predictor - predictor = layout_predictor('lw_detr_s', pretrained=True, assume_straight_pages=False, preserve_aspect_ratio=True) - - -Table Structure Recognition ---------------------------- - -The task consists of parsing the structure of a table into a machine-understandable representation: localizing every -cell (its spatial structure) and recovering the row and column it spans (its logical structure). - -Available table architectures -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -The following architectures are currently supported: - -* :py:meth:`tablecenternet ` - -For a comprehensive comparison, we have compiled a detailed benchmark on a publicly available dataset: - -+--------------------------------------------------+-----------------+---------------+--------------+---------------+------------+-------------------+--------------------+ -| **Architecture** | **Input shape** | **# params** | **Recall** | **Precision** | **F1** | **Structure acc** | **sec/it (B: 1)** | -+==================================================+=================+===============+==============+===============+============+===================+====================+ -| tablecenternet | (1024, 1024, 3) | 7.1 M | 82.31 | 96.01 | 88.64 | 77.53 | 0.5 | -+--------------------------------------------------+-----------------+---------------+--------------+---------------+------------+-------------------+--------------------+ - -.. note:: - - The reported metrics are produced by ``references/table/evaluate.py`` using the - :py:class:`TableCellMetric `: cell-detection **Recall**, **Precision** and - **F1** (cells matched above an IoU threshold of 0.5), and **Structure acc**, the share of matched cells whose - logical (row/column) coordinates are correctly predicted. - -Table structure predictors -^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:py:meth:`table_predictor ` wraps your table model so it can be used directly on -document images. For each page it returns the list of detected cells, each with its geometry, its confidence score and its logical coordinates, together with the inferred number of rows -and columns. - -.. code:: python3 - - import numpy as np - from doctr.models import table_predictor - model = table_predictor('tablecenternet', pretrained=True) - table_crop = (255 * np.random.rand(800, 600, 3)).astype(np.uint8) - out = model([table_crop]) - # out[0] -> {"cells": [{"geometry": ..., "score": ..., "row_start": 0, "row_end": 0, - # "col_start": 0, "col_end": 0}, ...], "num_rows": ..., "num_cols": ...} - -Tables in the OCR pipeline -^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Passing ``detect_tables=True`` to :py:meth:`ocr_predictor ` runs table structure -recognition. It relies on the layout model: each region the layout model labels as -a table is cropped and passed to the table model, so a page yields one structured table per detected table region -(``detect_tables=True`` therefore also enables the layout model, whose regions are attached to the page). The words -whose center falls inside a detected cell are regrouped into a structured table, attached to the page as -``page.tables``, and **removed from the regular** ``blocks`` **output** so the same text is not returned twice. Each -table exposes a dense row/column grid that loads directly into pandas. - -.. code:: python3 - - from doctr.io import DocumentFile - from doctr.models import ocr_predictor - - model = ocr_predictor(pretrained=True, detect_tables=True) - doc = DocumentFile.from_images("invoice_with_table.png") - result = model(doc) - - page = result.pages[0] - # Structured tables (one or more per page), kept out of the regular text blocks - for i, table in enumerate(page.tables): - df = table.to_grid() # for a plain list of lists - print(f"Table {i} ({table.num_rows}x{table.num_cols}):") - print(df) - - # The remaining (non-table) text is still available as usual - print(page.render()) - -Tables are included in :meth:`Page.export` under the ``tables`` key, so they are preserved in the JSON export as well. - - -End-to-End OCR --------------- - -The task consists of both localizing and transcribing textual elements in a given image. - -Available OCR architectures -^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -You can use any combination of detection and recognition models supported by docTR. - -For a comprehensive comparison, we have compiled a detailed benchmark on publicly available datasets: - -+---------------------------------------------------------------------------+----------------------------+----------------------------+ -| | FUNSD | CORD | -+===========================================================================+============================+============+===============+ -| **Architecture** | **Recall** | **Precision** | **Recall** | **Precision** | -+---------------------------------------------------------------------------+------------+---------------+------------+---------------+ -| db_resnet50 + crnn_vgg16_bn | 73.37 | 76.11 | 84.80 | 79.09 | -+---------------------------------------------------------------------------+------------+---------------+------------+---------------+ -| db_resnet50 + crnn_mobilenet_v3_small | 73.06 | 75.79 | 84.64 | 78.94 | -+---------------------------------------------------------------------------+------------+---------------+------------+---------------+ -| db_resnet50 + crnn_mobilenet_v3_large | 73.17 | 75.90 | 84.96 | 79.25 | -+---------------------------------------------------------------------------+------------+---------------+------------+---------------+ -| db_resnet50 + master | 73.90 | 76.66 | 85.84 | 80.07 | -+---------------------------------------------------------------------------+------------+---------------+------------+---------------+ -| db_resnet50 + sar_resnet31 | 73.58 | 76.33 | 85.64 | 79.88 | -+---------------------------------------------------------------------------+------------+---------------+------------+---------------+ -| db_resnet50 + vitstr_small | 73.06 | 75.79 | 85.95 | 80.17 | -+---------------------------------------------------------------------------+------------+---------------+------------+---------------+ -| db_resnet50 + vitstr_base | 73.70 | 76.46 | 85.76 | 79.99 | -+---------------------------------------------------------------------------+------------+---------------+------------+---------------+ -| db_resnet50 + parseq | 73.52 | 76.27 | 85.91 | 80.13 | -+---------------------------------------------------------------------------+------------+---------------+------------+---------------+ -| Gvision text detection | 59.50 | 62.50 | 75.30 | 59.03 | -+---------------------------------------------------------------------------+------------+---------------+------------+---------------+ -| Gvision doc. text detection | 64.00 | 53.30 | 68.90 | 61.10 | -+---------------------------------------------------------------------------+------------+---------------+------------+---------------+ -| AWS textract | 78.10 | 83.00 | 87.50 | 66.00 | -+---------------------------------------------------------------------------+------------+---------------+------------+---------------+ -| Azure Form Recognizer (v3.2) | 79.42 | 85.89 | 89.62 | 88.93 | -+---------------------------------------------------------------------------+------------+---------------+------------+---------------+ - - -All OCR models above have been evaluated using both the training and evaluation sets of FUNSD and CORD (cf. :ref:`datasets`). -Explanations about the metrics being used are available in :ref:`metrics`. - -*Disclaimer: both FUNSD subsets combined have 199 pages which might not be representative enough of the model capabilities* - - -Two-stage approaches -^^^^^^^^^^^^^^^^^^^^ -Those architectures involve one stage of text detection, and one stage of text recognition. The text detection will be used to produces cropped images that will be passed into the text recognition block. Everything is wrapped up with :py:meth:`ocr_predictor `. - -.. code:: python3 - - import numpy as np - from doctr.models import ocr_predictor - model = ocr_predictor('db_resnet50', 'crnn_vgg16_bn', pretrained=True) - input_page = (255 * np.random.rand(800, 600, 3)).astype(np.uint8) - out = model([input_page]) - - -You can pass specific boolean arguments to the predictor: - -* `assume_straight_pages`: if you work with straight documents only, it will fit straight bounding boxes to the text areas. -* `preserve_aspect_ratio`: if you want to preserve the aspect ratio of your documents while resizing before sending them to the model. -* `symmetric_pad`: if you choose to preserve the aspect ratio, it will pad the image symmetrically and not from the bottom-right. - -Those 3 are going straight to the detection predictor, as mentioned above (in the detection part). - -Additional arguments which can be passed to the `ocr_predictor` are: - -* `export_as_straight_boxes`: If you work with rotated and skewed documents but you still want to export straight bounding boxes and not polygons, set it to True. -* `straighten_pages`: If you want to straighten the pages before sending them to the detection model, set it to True. -* `detect_orientation`: If you want to estimate the general page orientation and add it to each page, set it to True. -* `detect_language`: If you want to predict the language of the text on each page, set it to True. -* `detect_layout`: If you want to run a layout detection model on each page and attach the detected regions to each page, set it to True (default: False). -* `layout_arch`: The layout architecture name (e.g. ``'lw_detr_s'``, ``'lw_detr_m'``) or your own (fine-tuned) layout model instance to use when ``detect_layout=True``. - -For instance, this snippet instantiates an end-to-end ocr_predictor working with rotated documents, which preserves the aspect ratio of the documents, and returns polygons: - -.. code:: python3 - - from doctr.models import ocr_predictor - model = ocr_predictor('linknet_resnet18', pretrained=True, assume_straight_pages=False, preserve_aspect_ratio=True) - - -Additionally, you can change the batch size of the underlying detection and recognition predictors to optimize the performance depending on your hardware: - -* `det_bs`: batch size for the detection model (default: 2) - will also be used for the layout model if ``detect_layout=True`` -* `reco_bs`: batch size for the recognition model (default: 128) - -.. code:: python3 - - from doctr.models import ocr_predictor - model = ocr_predictor(pretrained=True, det_bs=4, reco_bs=1024) - -To modify the output structure you can pass the following arguments to the predictor which will be handled by the underlying `DocumentBuilder`: - -* `resolve_lines`: whether words should be automatically grouped into lines (default: True) -* `resolve_blocks`: whether lines should be automatically grouped into blocks (default: False) -* `paragraph_break`: relative length of the minimum space separating paragraphs (default: 0.035) - -For example to disable the automatic grouping of lines into blocks: - -.. code:: python3 - - from doctr.models import ocr_predictor - model = ocr_predictor(pretrained=True, resolve_blocks=False) - - -Detecting the document layout -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -In addition to running the :py:meth:`layout_predictor ` standalone, you can plug a layout detection model directly into the end-to-end pipeline by setting ``detect_layout=True``. The detected regions (e.g. Title, Text, Table, Page-header, Page-footer) are attached to every :class:`Page ` and can be accessed through ``page.layout``, exported alongside the rest of the page, and rendered with :py:meth:`show `. - -.. code:: python3 - - from doctr.io import DocumentFile - from doctr.models import ocr_predictor - - model = ocr_predictor(pretrained=True, detect_layout=True) - doc = DocumentFile.from_images("path/to/your/doc.jpg") - result = model(doc) - - # Access the detected layout regions of the first page - for region in result.pages[0].layout: - print(region.type, region.confidence, region.geometry) - - # The layout is part of the exported representation - export = result.pages[0].export() - print(export["layout"]) - - # Overlay both text and layout regions (use display_layout=False to hide the regions) - result.pages[0].show() - -The same ``detect_layout`` / ``layout_arch`` arguments are available for the :py:meth:`kie_predictor `. - -The figures found by the layout model also take part in the reading order, and the Markdown / AsciiDoc / HTML exports can render them, inlined as base64 data URIs or written to an image directory (see :ref:`Figures`): - -.. code:: python3 - - # A self-contained Markdown file, figures included - markdown = result.export_as_markdown(images="embedded") - - # ... or one referencing the crops written to an `assets` directory - from doctr.io import FigureEncoder - - markdown = result.export_as_markdown(images=FigureEncoder("referenced", image_dir="assets")) - -By default (``images="placeholder"``), a comment marks each figure, and ``images="none"`` leaves them out. In the ``"embedded"`` and ``"referenced"`` modes, the text recognized inside a figure is left out of the export, since the image shows it. - - -Running the predictors on GPU -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -You can run the predictors on GPU by specifying the appropriate device. - -Here's how to do it for both **NVIDIA** and **Apple Silicon (MPS)** GPUs: - -.. code:: python3 - - import torch - from doctr.models import ocr_predictor - - # For NVIDIA GPU - device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') - predictor = ocr_predictor(pretrained=True).to(device) - # Alternatively: predictor = ocr_predictor(pretrained=True).cuda() - - # For Apple Silicon (MPS) - device = torch.device('mps' if torch.backends.mps.is_available() else 'cpu') - predictor = ocr_predictor(pretrained=True).to(device) - - -The same approach applies to all standalone predictors: - -* `recognition_predictor` -* `detection_predictor` -* `crop_orientation_predictor` -* `page_orientation_predictor` -* `layout_predictor` - -Just create the predictor instance and move it to the appropriate device. -To enable **half-precision inference**, append `.bfloat16()` after moving the predictor to the -device -- or `.half()` for FP16, though BF16 is preferred (see :ref:`half-precision` for details) - - -What should I do with the output? -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -The ocr_predictor returns a `Document` object with a nested structure (with `Page`, `Block`, `Line`, `Word`, `Artefact`). -When ``detect_layout=True`` was passed, each `Page` additionally carries a list of `LayoutElement` regions under ``page.layout``. -To get a better understanding of our document model, check our :ref:`document_structure` section - -Here is a typical `Document` layout:: - - Document( - (pages): [Page( - dimensions=(340, 600) - (blocks): [Block( - (lines): [Line( - (words): [ - Word(value='No.', confidence=0.91), - Word(value='RECEIPT', confidence=0.99), - Word(value='DATE', confidence=0.96), - ] - )] - (artefacts): [] - )] - )] - ) - -To get only the text content of the `Document`, you can use the `render` method:: - - text_output = result.render() - -For reference, here is the output for the `Document` above:: - - No. RECEIPT DATE - -You can also export them as a nested dict, more appropriate for JSON format:: - - json_output = result.export() - -For reference, here is the export for the same `Document` as above:: - - { - 'pages': [ - { - 'page_idx': 0, - 'dimensions': (340, 600), - 'orientation': {'value': None, 'confidence': None}, - 'language': {'value': None, 'confidence': None}, - 'blocks': [ - { - 'geometry': ((0.1357421875, 0.0361328125), (0.8564453125, 0.8603515625)), - 'lines': [ - { - 'geometry': ((0.1357421875, 0.0361328125), (0.8564453125, 0.8603515625)), - 'words': [ - { - 'value': 'No.', - 'confidence': 0.914085328578949, - 'geometry': ((0.5478515625, 0.06640625), (0.5810546875, 0.0966796875)), - 'objectness_score': 0.96, - 'crop_orientation': {'value': 0, 'confidence': None}, - }, - { - 'value': 'RECEIPT', - 'confidence': 0.9949972033500671, - 'geometry': ((0.1357421875, 0.0361328125), (0.51171875, 0.1630859375)), - 'objectness_score': 0.99, - 'crop_orientation': {'value': 0, 'confidence': None}, - }, - { - 'value': 'DATE', - 'confidence': 0.9578408598899841, - 'geometry': ((0.1396484375, 0.3232421875), (0.185546875, 0.3515625)), - 'objectness_score': 0.99, - 'crop_orientation': {'value': 0, 'confidence': None}, - } - ] - } - ], - 'artefacts': [] - } - ] - } - ] - } - -To export the output as XML (hocr-format) you can use the `export_as_xml` method: - -.. code-block:: python - - xml_output = result.export_as_xml() - for output in xml_output: - xml_bytes_string = output[0] - xml_element = output[1] - -For reference, here is a sample XML byte string output: - -.. code-block:: xml - - - - - docTR - hOCR - - - - - -
        -
        -

        - - Hello - XML - World - -

        -
        -
        - - - -To export the output in reading order as Markdown, AsciiDoc, HTML or XML, you can use the `export_as_markdown`, -`export_as_asciidoc`, `export_as_html` and `export_as_xml` methods (also available on a single :class:`Page`). -Reading order is always applied by these exporters: the content is linearized column by column, the reading direction is inferred from the -recognized text (e.g. right-to-left for Arabic or Hebrew documents), and - when the predictor is run with -layout detection (``detect_layout=True``) - the layout regions are used to render headings, list items and -recognized tables, and to place the page furniture (headers, footers, footnotes): - -.. code-block:: python - - markdown_output = result.export_as_markdown() - asciidoc_output = result.export_as_asciidoc() - html_output = result.export_as_html() - xml_output = result.export_as_xml() - raw_text_output = result.render() # same as result.export_as("text") - dict_output = result.export() # same as result.export_as("json") - -The `export_as` method is a convenience dispatcher over all the formats above:: - - result.export_as("markdown") # or "md" - result.export_as("asciidoc") # or "adoc" - result.export_as("html") - result.export_as("text") # same as render() - result.export_as("json") # same as export() - result.export_as("xml") # same as export_as_xml() - -The document structure itself can also be produced in reading order by building the predictor with -``keep_reading_order=True``, which sorts the blocks of every page in reading order:: - - predictor = ocr_predictor(pretrained=True, keep_reading_order=True) - -Advanced options -^^^^^^^^^^^^^^^^ -We provide a few advanced options to customize the behavior of the predictor to your needs: - -* Modify the binarization threshold for the detection model. -* Modify the box threshold for the detection model. - -This is useful to detect (possible less) text regions more accurately with a higher threshold, or to detect more text regions with a lower threshold. - - -.. code:: python3 - - import numpy as np - from doctr.models import ocr_predictor - predictor = ocr_predictor('db_resnet50', 'crnn_vgg16_bn', pretrained=True) - - # Modify the binarization threshold and the box threshold - predictor.det_predictor.model.postprocessor.bin_thresh = 0.5 - predictor.det_predictor.model.postprocessor.box_thresh = 0.2 - - input_page = (255 * np.random.rand(800, 600, 3)).astype(np.uint8) - out = predictor([input_page]) - - -* Modify how the word confidences are aggregated. - -The character probabilities of the recognition model are aggregated into the word confidence with `"mean"`, `"min"`, -`"max"`, `"median"`, `"geometric_mean"`, `"harmonic_mean"` or a Python callable taking the -1D array of probabilities and returning a float. The default is `"min"` for the CRNN, VIPTR, SAR and MASTER models and -`"mean"` for the ViTSTR and PARSeq models. -A mean can hide a single uncertain character: for `[0.99, 0.98, 0.12, 0.99]`, the mean is `0.77`, the geometric mean -`0.58`, the harmonic mean `0.35` and the minimum `0.12`. `"max"` and `"median"` ignore most uncertain characters, so -they hardly separate the misread words from the correct ones. - -Only the probabilities of the predicted characters are aggregated: the CTC blank frames (CRNN, VIPTR) and the -positions from the end-of-sequence token onwards (SAR, MASTER) are ignored, a CTC character has the highest -probability of its frames, and an empty prediction has a confidence of `0`. The parts of a split wide crop are -aggregated with the `split_confidence_aggregation` of the recognition predictor (`"min"` by default). - -Pass `confidence_aggregation` to `ocr_predictor`, `kie_predictor` or `recognition_predictor` (a model instance passed -to them is modified), or change it afterwards on the postprocessor of the recognition model. - -.. code:: python3 - - from doctr.models import ocr_predictor, parseq - - # Aggregate the character probabilities into the word confidence with the mean - predictor = ocr_predictor(pretrained=True, confidence_aggregation="mean") - - # Or modify the aggregation method of the recognition model afterwards - predictor = ocr_predictor('db_resnet50', 'crnn_vgg16_bn', pretrained=True) - predictor.reco_predictor.model.postprocessor.confidence_aggregation = "geometric_mean" - - # Modify the aggregation of the confidences of the parts of a split wide crop - predictor.reco_predictor.split_confidence_aggregation = "mean" - - # Or set it when instantiating a model - predictor = ocr_predictor('db_resnet50', parseq(pretrained=True, confidence_aggregation="min"), pretrained=True) - - -* Disable page orientation classification - -If you deal with documents which contains only small rotations (~ -45 to 45 degrees), you can disable the page orientation classification to speed up the inference. - -This will only have an effect with `assume_straight_pages=False` and/or `straighten_pages=True` and/or `detect_orientation=True`. - -.. code:: python3 - - from doctr.models import ocr_predictor - model = ocr_predictor(pretrained=True, assume_straight_pages=False, disable_page_orientation=True) - - -* Disable crop orientation classification - -If you deal with documents which contains only horizontal text, you can disable the crop orientation classification to speed up the inference. - -This will only have an effect with `assume_straight_pages=False` and/or `straighten_pages=True`. - -.. code:: python3 - - from doctr.models import ocr_predictor - model = ocr_predictor(pretrained=True, assume_straight_pages=False, disable_crop_orientation=True) - - -* Add a hook to the `ocr_predictor` to manipulate the location predictions before the crops are passed to the recognition model. - -.. code:: python3 - - from doctr.models import ocr_predictor - - class CustomHook: - def __call__(self, loc_preds): - # Manipulate the location predictions here - # 1. The output structure needs to be the same as the input location predictions - # 2. Be aware that the coordinates are relative and needs to be between 0 and 1 - return loc_preds - - my_hook = CustomHook() - - predictor = ocr_predictor(pretrained=True) - # Add a hook in the middle of the pipeline - predictor.add_hook(my_hook) - # You can also add multiple hooks which will be executed sequentially - for hook in [my_hook, my_hook, my_hook]: - predictor.add_hook(hook) - - -* Restrict the recognition model to a subset of its vocabulary. - -If you only expect text from one or more known languages, you can whitelist the corresponding vocabs so the -recognition model can no longer predict any character outside of them. This works with every recognition -architecture and with any predictor wrapping one (`ocr_predictor`, `kie_predictor`, `recognition_predictor`). -A whitelist can only restrict a model to characters it already knows: characters that are not part of the -model's own vocabulary are silently ignored, so make sure the model was trained on a vocab that covers the -languages you need (e.g. a multilingual model). - -.. code:: python3 - - from doctr.datasets import VOCABS - from doctr.io import DocumentFile - from doctr.models import ocr_predictor - from doctr.models.utils import add_whitelist - - predictor = ocr_predictor(pretrained=True) - - # The recognition model can now only predict Polish/German characters - handle = add_whitelist(predictor, [VOCABS["polish"], VOCABS["german"]]) - - input_page = DocumentFile.from_images("path/to/your/image.png") - out = predictor(input_page) - - # Restore the original, unconstrained decoding - handle.remove() - -The returned handle can also be used as a context manager, in which case the whitelist is removed on exit: - -.. code:: python3 - - with add_whitelist(predictor, VOCABS["german"]): - out = predictor(input_page) # only German characters can be predicted here - # the whitelist is automatically removed outside of the ``with`` block - -By default forbidden characters are dropped (``strategy="mask"``), so decoding falls back to the highest-scoring -allowed character. Alternatively, ``strategy="nearest"`` folds each forbidden character onto the closest allowed -one (e.g. ``ä`` -> ``a``, ``ł`` -> ``l``), which is useful to normalize accents/diacritics onto a base alphabet. -The mapping is built by transliteration by default; pass ``mapping="weights"`` to derive it from the model's own -learned confusions, or a ``{forbidden_char: allowed_char}`` dict to override specific characters. - -.. code:: python3 - - from doctr.datasets import VOCABS - from doctr.models import ocr_predictor - from doctr.models.utils import add_whitelist - - predictor = ocr_predictor(pretrained=True) - - # Fold any non-ASCII character onto its closest ASCII letter (e.g. é -> e, ł -> l) - handle = add_whitelist(predictor, VOCABS["latin"], strategy="nearest") - out = predictor(input_page) - handle.remove() diff --git a/doctr/utils/metrics.py b/doctr/utils/metrics.py index 4d20bc7078..909074a858 100644 --- a/doctr/utils/metrics.py +++ b/doctr/utils/metrics.py @@ -661,8 +661,7 @@ class ObjectDetectionMetric: - :math:`\mathcal{C}` is the set of possible class indices, - :math:`S` are confidence scores associated to predictions, - :math:`\mathcal{T} = \{0.5, 0.55, \dots, 0.95\}` is the set of IoU thresholds, - - :math:`AP_t(c)` is the Average Precision for class :math:`c` - at IoU threshold :math:`t`. + - :math:`AP_t(c)` is the Average Precision for class :math:`c` at IoU threshold :math:`t`. For a given class and IoU threshold, predictions from all images are aggregated and sorted globally by decreasing confidence score. diff --git a/pyproject.toml b/pyproject.toml index b50f62111c..2c726eaa21 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -81,14 +81,16 @@ quality = [ "pre-commit>=2.17.0", ] docs = [ - "sphinx>=3.0.0,!=3.5.0", - "sphinxemoji>=0.1.8", - "sphinx-copybutton>=0.3.1", + "sphinx>=8.0.0", "docutils<0.23", - "recommonmark>=0.7.1", - "sphinx-markdown-tables>=0.0.15", + "pydata-sphinx-theme>=0.23.0", + "myst-parser>=4.0.0", + "sphinx-design>=0.6.0", + "sphinx-copybutton>=0.5.2", + "sphinx-reredirects>=0.1.5", + # Only used to render the documentation of previous releases (cf. docs/build.sh) + "sphinxemoji>=0.1.8", "sphinx-tabs>=3.3.0", - "furo>=2022.3.4", ] dev = [ # PyTorch @@ -110,14 +112,16 @@ dev = [ "mypy>=1.0", "pre-commit>=3.0.0", # Docs - "sphinx>=3.0.0,!=3.5.0", - "sphinxemoji>=0.1.8", - "sphinx-copybutton>=0.3.1", + "sphinx>=8.0.0", "docutils<0.23", - "recommonmark>=0.7.1", - "sphinx-markdown-tables>=0.0.15", + "pydata-sphinx-theme>=0.23.0", + "myst-parser>=4.0.0", + "sphinx-design>=0.6.0", + "sphinx-copybutton>=0.5.2", + "sphinx-reredirects>=0.1.5", + # Only used to render the documentation of previous releases (cf. docs/build.sh) + "sphinxemoji>=0.1.8", "sphinx-tabs>=3.3.0", - "furo>=2022.3.4", ] [project.urls]